Introduction of `domain_to_idna()` tests.
authorfunilrys <redacted>
Fri, 2 Mar 2018 21:23:21 +0000 (22:23 +0100)
committerfunilrys <redacted>
Fri, 2 Mar 2018 21:23:21 +0000 (22:23 +0100)
testUpdateHostsFile.py

index c1968c8820ac89e3b914201b882bf8f43d44295b..b4f4bfdcadeb3de3cb9e78e3cea7ee66fb2a9507 100644 (file)
@@ -5,25 +5,29 @@
 #
 # Python script for testing updateHostFiles.py
 
-from updateHostsFile import (
-    Colors, PY3, colorize, display_exclusion_options, exclude_domain,
-    flush_dns_cache, gather_custom_exclusions, get_defaults, get_file_by_url,
-    is_valid_domain_format, matches_exclusions, move_hosts_file_into_place,
-    normalize_rule, path_join_robust, print_failure, print_success,
-    prompt_for_exclusions, prompt_for_move, prompt_for_flush_dns_cache,
-    prompt_for_update, query_yes_no, recursive_glob, remove_old_hosts_file,
-    supports_color, strip_rule, update_all_sources, update_readme_data,
-    update_sources_data, write_data, write_opening_header)
-
-import updateHostsFile
-import unittest
-import tempfile
-import locale
-import shutil
 import json
-import sys
+import locale
 import os
 import re
+import shutil
+import sys
+import tempfile
+import unittest
+
+import updateHostsFile
+from updateHostsFile import (PY3, Colors, colorize, display_exclusion_options,
+                             domain_to_idna, exclude_domain, flush_dns_cache,
+                             gather_custom_exclusions, get_defaults,
+                             get_file_by_url, is_valid_domain_format,
+                             matches_exclusions, move_hosts_file_into_place,
+                             normalize_rule, path_join_robust, print_failure,
+                             print_success, prompt_for_exclusions,
+                             prompt_for_flush_dns_cache, prompt_for_move,
+                             prompt_for_update, query_yes_no, recursive_glob,
+                             remove_old_hosts_file, strip_rule, supports_color,
+                             update_all_sources, update_readme_data,
+                             update_sources_data, write_data,
+                             write_opening_header)
 
 if PY3:
     from io import BytesIO, StringIO
@@ -1360,6 +1364,81 @@ def mock_url_open_decode_fail(_):
     return m
 
 
+class DomainToIDNA(Base):
+
+    def __init__(self, *args, **kwargs):
+        super(DomainToIDNA, self).__init__(*args, **kwargs)
+
+        self.domains = [b'\xc9\xa2oogle.com', b'www.huala\xc3\xb1e.cl']
+        self.expected_domains = ['xn--oogle-wmc.com', 'www.xn--hualae-0wa.cl']
+
+    def test_empty_line(self):
+        data = ["", "\r", "\n"]
+
+        for empty in data:
+            expected = empty
+
+            actual = domain_to_idna(empty)
+            self.assertEqual(actual, expected)
+
+    def test_commented_line(self):
+        data = "# Hello World"
+        expected = data
+        actual = domain_to_idna(data)
+
+        self.assertEqual(actual, expected)
+
+    def test_simple_line(self):
+        # Test with a space as separator.
+        for i in range(len(self.domains)):
+            data = (b"0.0.0.0 " + self.domains[i]).decode('utf-8')
+            expected = "0.0.0.0 " + self.expected_domains[i]
+
+            actual = domain_to_idna(data)
+
+            self.assertEqual(actual, expected)
+
+        # Test with a tabulation as separator.
+        for i in range(len(self.domains)):
+            data = (b"0.0.0.0\t" + self.domains[i]).decode('utf-8')
+            expected = "0.0.0.0\t" + self.expected_domains[i]
+
+            actual = domain_to_idna(data)
+
+            self.assertEqual(actual, expected)
+
+    def test_single_line_with_comment_at_the_end(self):
+        # Test with a space as separator.
+        for i in range(len(self.domains)):
+            data = (b"0.0.0.0 " + self.domains[i] + b" # Hello World") \
+                .decode('utf-8')
+            expected = "0.0.0.0 " + self.expected_domains[i] + " # Hello World"
+
+            actual = domain_to_idna(data)
+
+            self.assertEqual(actual, expected)
+
+        # Test with a tabulation as separator.
+        for i in range(len(self.domains)):
+            data = (b"0.0.0.0\t" + self.domains[i] + b" # Hello World") \
+                .decode('utf-8')
+            expected = "0.0.0.0\t" + self.expected_domains[i] + \
+                " # Hello World"
+
+            actual = domain_to_idna(data)
+
+            self.assertEqual(actual, expected)
+
+    def test_single_line_without_prefix(self):
+        for i in range(len(self.domains)):
+            data = self.domains[i].decode('utf-8')
+            expected = self.expected_domains[i]
+
+            actual = domain_to_idna(data)
+
+            self.assertEqual(actual, expected)
+
+
 class GetFileByUrl(BaseStdout):
 
     @mock.patch("updateHostsFile.urlopen",
git clone https://git.99rst.org/PROJECT