tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

java_cpp_strings_tests.py (5188B)


      1 #!/usr/bin/env python3
      2 
      3 # Copyright 2019 The Chromium Authors
      4 # Use of this source code is governed by a BSD-style license that can be
      5 # found in the LICENSE file.
      6 
      7 """Tests for java_cpp_strings.py.
      8 
      9 This test suite contains various tests for the C++ -> Java string generator.
     10 """
     11 
     12 import unittest
     13 
     14 import java_cpp_strings
     15 from util import java_cpp_utils
     16 
     17 
     18 class _TestStringsParser(unittest.TestCase):
     19 
     20  def testParseComments(self):
     21    test_data = """
     22 /**
     23 * This should be ignored as well.
     24 */
     25 
     26 // Comment followed by a blank line.
     27 
     28 // Comment followed by unrelated code.
     29 int foo() { return 3; }
     30 
     31 // Real comment.
     32 const char kASwitch[] = "a-value";
     33 
     34 // Real comment that spans
     35 // multiple lines.
     36 const char kAnotherSwitch[] = "another-value";
     37 
     38 // Comment followed by nothing.
     39 """.split('\n')
     40    string_file_parser = java_cpp_utils.CppConstantParser(
     41        java_cpp_strings.StringParserDelegate(), test_data)
     42    strings = string_file_parser.Parse()
     43    self.assertEqual(2, len(strings))
     44    self.assertEqual('A_SWITCH', strings[0].name)
     45    self.assertEqual('"a-value"', strings[0].value)
     46    self.assertEqual(1, len(strings[0].comments.split('\n')))
     47    self.assertEqual('ANOTHER_SWITCH', strings[1].name)
     48    self.assertEqual('"another-value"', strings[1].value)
     49    self.assertEqual(2, len(strings[1].comments.split('\n')))
     50 
     51  def testStringValues(self):
     52    test_data = r"""
     53 // Single line string constants.
     54 const char kAString[] = "a-value";
     55 const char kNoComment[] = "no-comment";
     56 
     57 namespace myfeature {
     58 const char kMyFeatureNoComment[] = "myfeature.no-comment";
     59 }
     60 
     61 // Single line switch with a big space.
     62 const char kAStringWithSpace[]                      = "a-value";
     63 
     64 // Wrapped constant definition.
     65 const char kAStringWithAVeryLongNameThatWillHaveToWrap[] =
     66    "a-string-with-a-very-long-name-that-will-have-to-wrap";
     67 
     68 // This one has no comment before it.
     69 
     70 const char kAStringWithAVeryLongNameThatWillHaveToWrap2[] =
     71    "a-string-with-a-very-long-name-that-will-have-to-wrap2";
     72 
     73 const char kStringWithEscapes[] = "tab\tquote\"newline\n";
     74 const char kStringWithEscapes2[] =
     75    "tab\tquote\"newline\n";
     76 
     77 const char kEmptyString[] = "";
     78 
     79 // These are valid C++ but not currently supported by the script.
     80 const char kInvalidLineBreak[] =
     81 
     82    "invalid-line-break";
     83 
     84 const char kConcatenateMultipleStringLiterals[] =
     85    "first line"
     86    "second line";
     87 """.split('\n')
     88    string_file_parser = java_cpp_utils.CppConstantParser(
     89        java_cpp_strings.StringParserDelegate(), test_data)
     90    strings = string_file_parser.Parse()
     91    self.assertEqual(9, len(strings))
     92    self.assertEqual('A_STRING', strings[0].name)
     93    self.assertEqual('"a-value"', strings[0].value)
     94    self.assertEqual('NO_COMMENT', strings[1].name)
     95    self.assertEqual('"no-comment"', strings[1].value)
     96    self.assertEqual('MY_FEATURE_NO_COMMENT', strings[2].name)
     97    self.assertEqual('"myfeature.no-comment"', strings[2].value)
     98    self.assertEqual('A_STRING_WITH_SPACE', strings[3].name)
     99    self.assertEqual('"a-value"', strings[3].value)
    100    self.assertEqual('A_STRING_WITH_A_VERY_LONG_NAME_THAT_WILL_HAVE_TO_WRAP',
    101                     strings[4].name)
    102    self.assertEqual('"a-string-with-a-very-long-name-that-will-have-to-wrap"',
    103                     strings[4].value)
    104    self.assertEqual('A_STRING_WITH_A_VERY_LONG_NAME_THAT_WILL_HAVE_TO_WRAP2',
    105                     strings[5].name)
    106    self.assertEqual('"a-string-with-a-very-long-name-that-will-have-to-wrap2"',
    107                     strings[5].value)
    108    self.assertEqual('STRING_WITH_ESCAPES', strings[6].name)
    109    self.assertEqual(r'"tab\tquote\"newline\n"', strings[6].value)
    110    self.assertEqual('STRING_WITH_ESCAPES2', strings[7].name)
    111    self.assertEqual(r'"tab\tquote\"newline\n"', strings[7].value)
    112    self.assertEqual('EMPTY_STRING', strings[8].name)
    113    self.assertEqual('""', strings[8].value)
    114 
    115  def testTreatWebViewLikeOneWord(self):
    116    test_data = """
    117 const char kSomeWebViewSwitch[] = "some-webview-switch";
    118 const char kWebViewOtherSwitch[] = "webview-other-switch";
    119 const char kSwitchWithPluralWebViews[] = "switch-with-plural-webviews";
    120 """.split('\n')
    121    string_file_parser = java_cpp_utils.CppConstantParser(
    122        java_cpp_strings.StringParserDelegate(), test_data)
    123    strings = string_file_parser.Parse()
    124    self.assertEqual('SOME_WEBVIEW_SWITCH', strings[0].name)
    125    self.assertEqual('"some-webview-switch"', strings[0].value)
    126    self.assertEqual('WEBVIEW_OTHER_SWITCH', strings[1].name)
    127    self.assertEqual('"webview-other-switch"', strings[1].value)
    128    self.assertEqual('SWITCH_WITH_PLURAL_WEBVIEWS', strings[2].name)
    129    self.assertEqual('"switch-with-plural-webviews"', strings[2].value)
    130 
    131  def testTemplateParsing(self):
    132    test_data = """
    133 // Copyright 2019 The Chromium Authors
    134 // Use of this source code is governed by a BSD-style license that can be
    135 // found in the LICENSE file.
    136 
    137 package my.java.package;
    138 
    139 public any sort of class MyClass {{
    140 
    141 {NATIVE_STRINGS}
    142 
    143 }}
    144 """.split('\n')
    145    package, class_name = java_cpp_utils.ParseTemplateFile(test_data)
    146    self.assertEqual('my.java.package', package)
    147    self.assertEqual('MyClass', class_name)
    148 
    149 
    150 if __name__ == '__main__':
    151  unittest.main()