| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249 |
- # coding=utf-8
- """
- Unit tests for ddns.util.comment module
- @author: GitHub Copilot
- """
- from __future__ import unicode_literals
- from __init__ import unittest
- from ddns.util.comment import remove_comment
- class TestRemoveComment(unittest.TestCase):
- """Test cases for comment removal functionality"""
- def test_remove_comment_empty_string(self):
- """测试空字符串"""
- result = remove_comment("")
- self.assertEqual(result, "")
- def test_remove_comment_no_comments(self):
- """测试没有注释的内容"""
- content = '{"key": "value", "number": 123}'
- result = remove_comment(content)
- self.assertEqual(result, content)
- def test_remove_comment_hash_full_line(self):
- """测试整行 # 注释"""
- content = '# This is a comment\n{"key": "value"}'
- expected = '\n{"key": "value"}'
- result = remove_comment(content)
- self.assertEqual(result, expected)
- def test_remove_comment_double_slash_full_line(self):
- """测试整行 // 注释"""
- content = '// This is a comment\n{"key": "value"}'
- expected = '\n{"key": "value"}'
- result = remove_comment(content)
- self.assertEqual(result, expected)
- def test_remove_comment_hash_with_leading_whitespace(self):
- """测试带前导空白的 # 注释"""
- content = ' # This is a comment\n{"key": "value"}'
- expected = '\n{"key": "value"}'
- result = remove_comment(content)
- self.assertEqual(result, expected)
- def test_remove_comment_double_slash_with_leading_whitespace(self):
- """测试带前导空白的 // 注释"""
- content = ' // This is a comment\n{"key": "value"}'
- expected = '\n{"key": "value"}'
- result = remove_comment(content)
- self.assertEqual(result, expected)
- def test_remove_comment_hash_end_of_line(self):
- """测试行尾 # 注释"""
- content = '{"key": "value"} # this is a comment'
- expected = '{"key": "value"}'
- result = remove_comment(content)
- self.assertEqual(result, expected)
- def test_remove_comment_double_slash_end_of_line(self):
- """测试行尾 // 注释"""
- content = '{"key": "value"} // this is a comment'
- expected = '{"key": "value"}'
- result = remove_comment(content)
- self.assertEqual(result, expected)
- def test_remove_comment_hash_in_string_should_not_remove(self):
- """测试字符串内的 # 不应该被移除"""
- content = '{"url": "http://example.com#anchor"}'
- result = remove_comment(content)
- self.assertEqual(result, content)
- def test_remove_comment_double_slash_in_string_should_not_remove(self):
- """测试字符串内的 // 不应该被移除"""
- content = '{"url": "http://example.com/path"}'
- result = remove_comment(content)
- self.assertEqual(result, content)
- def test_remove_comment_single_quoted_string_with_hash(self):
- """测试单引号字符串内的 # 不应该被移除"""
- content = "{'url': 'http://example.com#anchor'}"
- result = remove_comment(content)
- self.assertEqual(result, content)
- def test_remove_comment_single_quoted_string_with_double_slash(self):
- """测试单引号字符串内的 // 不应该被移除"""
- content = "{'url': 'http://example.com/path'}"
- result = remove_comment(content)
- self.assertEqual(result, content)
- def test_remove_comment_escaped_quotes_in_string(self):
- """测试字符串内转义引号的处理"""
- content = '{"message": "He said \\"Hello#World\\""} # comment'
- expected = '{"message": "He said \\"Hello#World\\""}'
- result = remove_comment(content)
- self.assertEqual(result, expected)
- def test_remove_comment_complex_json_with_comments(self):
- """测试复杂JSON配置与多种注释"""
- content = """{
- // Configuration file for DDNS
- "$schema": "https://ddns.newfuture.cc/schema/v4.0.json", // Schema validation
- "debug": false, # false=disable, true=enable
- "dns": "dnspod_com", // DNS provider
- "id": "1008666", # ID or Email
- "token": "ae86$cbbcctv666666666666666", // API Token or Key
- "ipv4": ["test.lorzl.ml"], # IPv4 domains to update
- "ipv6": ["test.lorzl.ml"], // IPv6 domains to update
- "index4": "public", # IPv4 update method
- "index6": "url:https://iptest.com", # IPv6 update method
- "proxy": null // Proxy settings
- }"""
- expected = """{
- "$schema": "https://ddns.newfuture.cc/schema/v4.0.json",
- "debug": false,
- "dns": "dnspod_com",
- "id": "1008666",
- "token": "ae86$cbbcctv666666666666666",
- "ipv4": ["test.lorzl.ml"],
- "ipv6": ["test.lorzl.ml"],
- "index4": "public",
- "index6": "url:https://iptest.com",
- "proxy": null
- }"""
- result = remove_comment(content)
- self.assertEqual(result, expected)
- def test_remove_comment_mixed_comment_styles(self):
- """测试混合注释风格"""
- content = """// Header comment
- {
- # This is a hash comment
- "key1": "value1", // End of line comment
- "key2": "value2" # Another end of line comment
- }
- # Footer comment"""
- expected = """
- {
- "key1": "value1",
- "key2": "value2"
- }
- """
- result = remove_comment(content)
- self.assertEqual(result, expected)
- def test_remove_comment_comments_with_special_chars(self):
- """测试包含特殊字符的注释"""
- content = """// Comment with 中文字符 and émojis 🚀
- {
- "test": "value" # Comment with symbols !@#$%^&*()
- }"""
- expected = """
- {
- "test": "value"
- }"""
- result = remove_comment(content)
- self.assertEqual(result, expected)
- def test_remove_comment_preserve_empty_lines(self):
- """测试保留空行"""
- content = """// Comment
- {
- "key": "value"
- }
- // Another comment"""
- expected = """
- {
- "key": "value"
- }
- """
- result = remove_comment(content)
- self.assertEqual(result, expected)
- def test_remove_comment_url_with_hash_and_comment(self):
- """测试URL中包含#,行尾有注释的情况"""
- content = '{"url": "https://example.com#section"} # This is a comment'
- expected = '{"url": "https://example.com#section"}'
- result = remove_comment(content)
- self.assertEqual(result, expected)
- def test_remove_comment_json_array_with_comments(self):
- """测试JSON数组与注释"""
- content = """[
- // First item
- "item1", # Comment 1
- "item2", // Comment 2
- "item3" # Last item
- ]"""
- expected = """[
- "item1",
- "item2",
- "item3"
- ]"""
- result = remove_comment(content)
- self.assertEqual(result, expected)
- def test_remove_comment_nested_quotes(self):
- """测试嵌套引号的处理"""
- content = """{"message": "She said: \\"Don't use // or # here\\""} // comment"""
- expected = """{"message": "She said: \\"Don't use // or # here\\""} """
- result = remove_comment(content)
- # Note: we expect a trailing space where the comment was removed
- self.assertEqual(result, expected.rstrip())
- def test_remove_comment_multiple_slashes(self):
- """测试多个斜杠的情况"""
- content = '{"path": "C:\\\\Program Files\\\\App"} // Windows path'
- expected = '{"path": "C:\\\\Program Files\\\\App"}'
- result = remove_comment(content)
- self.assertEqual(result, expected)
- def test_remove_comment_hash_after_double_slash_comment(self):
- """测试 // 注释中包含 # 的情况"""
- content = '{"key": "value"} // Comment with # symbol'
- expected = '{"key": "value"}'
- result = remove_comment(content)
- self.assertEqual(result, expected)
- def test_remove_comment_single_line_various_formats(self):
- """测试单行多种格式"""
- test_cases = [
- ('{"key": "value"}', '{"key": "value"}'), # No comment
- ("# Full line comment", ""), # Full line hash
- ("// Full line comment", ""), # Full line double slash
- (" # Indented comment", ""), # Indented hash
- (" // Indented comment", ""), # Indented double slash
- ('{"a": "b"} # End comment', '{"a": "b"}'), # End hash
- ('{"a": "b"} // End comment', '{"a": "b"}'), # End double slash
- ]
- for i, (input_content, expected) in enumerate(test_cases):
- result = remove_comment(input_content)
- self.assertEqual(
- result,
- expected,
- "Failed for test case %d: %r -> expected %r, got %r" % (i, input_content, expected, result),
- )
- if __name__ == "__main__":
- unittest.main()
|