Пример #1
0
    def testCatchAnswerUrlId(self):
        input_api = MockInputApi()
        input_api.files = [
            MockFile('somewhere/file.cc', [
                'char* host = '
                '  "https://support.google.com/chrome/answer/123456";'
            ]),
            MockFile('somewhere_else/file.cc', [
                'char* host = '
                '  "https://support.google.com/chrome/a/answer/123456";'
            ]),
        ]

        warnings = PRESUBMIT._CheckGoogleSupportAnswerUrl(
            input_api, MockOutputApi())
        self.assertEqual(1, len(warnings))
        self.assertEqual(2, len(warnings[0].items))
Пример #2
0
 def testTypicalNotMatchedChange(self):
     diff_cc = ['UMA_HISTOGRAM_BOOL("Bla.Foo.Dummy", true)']
     mock_input_api = MockInputApi()
     mock_input_api.files = [MockFile('some/path/foo.cc', diff_cc)]
     warnings = PRESUBMIT._CheckUmaHistogramChanges(mock_input_api,
                                                    MockOutputApi())
     self.assertEqual(1, len(warnings))
     self.assertEqual('warning', warnings[0].type)
Пример #3
0
 def testValidIfDefinedMacroNames(self):
     lines = [
         '#if defined(FOO)',
         '#ifdef BAR',
     ]
     errors = PRESUBMIT._CheckForInvalidIfDefinedMacrosInFile(
         MockInputApi(), MockFile('some/path/source.cc', lines))
     self.assertEqual(0, len(errors))
Пример #4
0
 def testIgnoresReadmes(self):
     lines = [
         'A First Level Header', '====================', '',
         'A Second Level Header', '---------------------'
     ]
     errors = PRESUBMIT._CheckForVersionControlConflictsInFile(
         MockInputApi(), MockFile('some/polymer/README.md', lines))
     self.assertEqual(0, len(errors))
Пример #5
0
 def testSpecialFirstInclude3(self):
   mock_input_api = MockInputApi()
   contents = ['#include "some/path/foo.h"',
               '#include "a/header.h"']
   mock_file = MockFile('some/path/foo_platform.cc', contents)
   warnings = PRESUBMIT._CheckIncludeOrderInFile(
       mock_input_api, mock_file, range(1, len(contents) + 1))
   self.assertEqual(0, len(warnings))
Пример #6
0
 def testFalsePositives(self):
     """Examples of when Notification.Builder should not be flagged."""
     mock_input = MockInputApi()
     mock_input.files = [
         MockFile(
             'chrome/android/java/src/org/chromium/chrome/browser/notifications/'
             'ChromeNotificationWrapperBuilder.java',
             ['new Notification.Builder()']),
         MockFile(
             'chrome/android/java/src/org/chromium/chrome/browser/notifications/'
             'ChromeNotificationWrapperCompatBuilder.java',
             ['new NotificationCompat.Builder()']),
         MockFile('path/One.java', ['Notification.Builder']),
         MockFile('path/Two.java',
                  ['// do not: new Notification.Builder()']),
         MockFile('path/Three.java', [
             '/** NotificationWrapperBuilder',
             ' * replaces: new Notification.Builder()'
         ]),
         MockFile('path/PRESUBMIT.py', ['new Notification.Builder()']),
         MockFile('path/Four.java', ['new NotificationCompat.Builder()'],
                  action='D'),
     ]
     errors = PRESUBMIT._CheckNotificationConstructors(
         mock_input, MockOutputApi())
     self.assertEqual(0, len(errors))
Пример #7
0
 def testFailure_Widget(self):
     lines_top_level = [
         '<TextView',
         'xmlns:android="http://schemas.android.com/apk/res/android"',
         'android:layout_width="match_parent"',
         'android:layout_height="@dimen/snippets_article_header_height"',
         'android:textColor="@color/snippets_list_header_text_color"',
         'android:textSize="14sp" />'
     ]
     lines_subcomponent_widget = [
         '<RelativeLayout',
         'xmlns:android="http://schemas.android.com/apk/res/android"',
         'android:layout_width="match_parent"',
         'android:layout_height="wrap_content">', '<View',
         'android:textColor="@color/error_text_color"',
         'android:textSize="@dimen/text_size_medium"',
         'android:textAllCaps="true"',
         'android:background="@drawable/infobar_shadow_top"',
         'android:visibility="gone" />', '</RelativeLayout>'
     ]
     mock_input_api = MockInputApi()
     mock_input_api.files = [
         MockFile('chrome/java/res_test/test1.xml', lines_top_level),
         MockFile('chrome/java/res_test/test2.xml',
                  lines_subcomponent_widget)
     ]
     errors = checkxmlstyle._CheckTextAppearance(mock_input_api,
                                                 MockOutputApi())
     self.assertEqual(1, len(errors))
     self.assertEqual(5, len(errors[0].items))
     self.assertEqual(
         ('  chrome/java/res_test/test1.xml:5 contains attribute '
          'android:textColor'), errors[0].items[0].splitlines()[0])
     self.assertEqual(
         ('  chrome/java/res_test/test1.xml:6 contains attribute '
          'android:textSize'), errors[0].items[1].splitlines()[0])
     self.assertEqual(
         ('  chrome/java/res_test/test2.xml:6 contains attribute '
          'android:textColor'), errors[0].items[2].splitlines()[0])
     self.assertEqual(
         ('  chrome/java/res_test/test2.xml:7 contains attribute '
          'android:textSize'), errors[0].items[3].splitlines()[0])
     self.assertEqual(
         ('  chrome/java/res_test/test2.xml:8 contains attribute '
          'android:textAllCaps'), errors[0].items[4].splitlines()[0])
Пример #8
0
 def testFailure_WrongBuilderCheck(self):
     """Use of AppCompat AlertDialog.Builder is correctly flagged."""
     mock_input = MockInputApi()
     mock_input.files = [
         MockFile('path/One.java', [
             'import android.support.v7.app.AlertDialog;',
             'new AlertDialog.Builder()'
         ]),
         MockFile('path/Two.java', [
             'import android.app.AlertDialog;',
             'new AlertDialog.Builder(context);'
         ]),
     ]
     errors = PRESUBMIT._CheckAlertDialogBuilder(mock_input,
                                                 MockOutputApi())
     self.assertEqual(2, len(errors))
     self.assertEqual(1, len(errors[1].items))
     self.assertIn('One.java', errors[1].items[0])
Пример #9
0
 def testSucess(self):
     lines = ['xmlns:app="http://schemas.android.com/apk/res-auto"']
     mock_input_api = MockInputApi()
     mock_input_api.files = [
         MockFile('chrome/java/res_test/file.xml', lines)
     ]
     errors = checkxmlstyle._CheckXmlNamespacePrefixes(
         mock_input_api, MockOutputApi())
     self.assertEqual(0, len(errors))
Пример #10
0
 def testValidReference(self):
     lines = ['<TextView', 'android:textColor="@color/color1" />']
     mock_input_api = MockInputApi()
     mock_input_api.files = [
         MockFile('chrome/java/res_test/test.xml', lines)
     ]
     errors = checkxmlstyle._CheckColorReferences(mock_input_api,
                                                  MockOutputApi())
     self.assertEqual(0, len(errors))
Пример #11
0
 def testValidReferenceInColorResources(self):
     lines = ['<color name="color1">#61000000</color>']
     mock_input_api = MockInputApi()
     mock_input_api.files = [
         MockFile('chrome/java/res_test/colors.xml', lines)
     ]
     errors = checkxmlstyle._CheckColorReferences(mock_input_api,
                                                  MockOutputApi())
     self.assertEqual(0, len(errors))
Пример #12
0
 def testFalsePositives(self):
     """Examples of when AlertDialog.Builder should not be flagged."""
     mock_input = MockInputApi()
     mock_input.files = [
         MockFile('path/One.java', ['AlertDialog.Builder']),
         MockFile('path/Two.java',
                  ['// do not: new AlertDialog.Builder()']),
         MockFile('path/Three.java', [
             '/** ChromeAlertDialogBuilder',
             ' * replaces: new AlertDialog.Builder()'
         ]),
         MockFile('path/PRESUBMIT.py', ['new AlertDialog.Builder()']),
         MockFile('path/Four.java', ['new AlertDialog.Builder()'],
                  action='D'),
     ]
     errors = PRESUBMIT._CheckAlertDialogBuilder(mock_input,
                                                 MockOutputApi())
     self.assertEqual(0, len(errors))
 def testSpecialFirstInclude6(self):
   mock_input_api = MockInputApi()
   contents = ['#include "some/other/path/foo_win.h"',
               '#include <set>',
               '#include "a/header.h"']
   mock_file = MockFile('some/path/foo_unittest_win.h', contents)
   warnings = PRESUBMIT._CheckIncludeOrderInFile(
       mock_input_api, mock_file, range(1, len(contents) + 1))
   self.assertEqual(0, len(warnings))
Пример #14
0
 def testReferenceInSemanticColors(self):
     mock_input_api = MockInputApi()
     mock_input_api.files = [
         MockFile(
             helpers.COLOR_PALETTE_PATH,
             ['<resources><color name="a">#f0f0f0</color></resources>']),
         MockFile(
             'ui/android/java/res/values/semantic_colors_non_adaptive.xml',
             [
                 '<color name="b">@color/hello<color>',
                 '<color name="c">@color/a<color>'
             ]),
         MockFile('ui/android/java/res/values/semantic_colors_adaptive.xml',
                  ['<color name="c">@color/a<color>'])
     ]
     errors = checkxmlstyle._CheckSemanticColorsReferences(
         mock_input_api, MockOutputApi())
     self.assertEqual(1, len(errors))
Пример #15
0
 def testValidReferenceInColorResources(self):
     lines = ['<color name="color1">#61000000</color>']
     mock_input_api = MockInputApi()
     mock_input_api.files = [
         MockFile(helpers.COLOR_PALETTE_RELATIVE_PATH, lines)
     ]
     errors = checkxmlstyle._CheckColorReferences(mock_input_api,
                                                  MockOutputApi())
     self.assertEqual(0, len(errors))
Пример #16
0
    def testFailure(self):
        input_api = MockInputApi()
        test_data = [
            ('invalid_idl_1.idl', [
                '//', 'namespace test {', '  dictionary {', '    DOMString s;',
                '  };', '};'
            ], 'Unexpected "{" after keyword "dictionary".\n'),
            # TODO(yoz): Disabled because it causes the IDL parser to hang.
            # See crbug.com/363830.
            # ('invalid_idl_2.idl',
            #  (['namespace test {',
            #    '  dictionary MissingSemicolon {',
            #    '    DOMString a',
            #    '    DOMString b;',
            #    '  };',
            #    '};'],
            #   'Unexpected symbol DOMString after symbol a.'),
            ('invalid_idl_3.idl', [
                '//', 'namespace test {', '  enum MissingComma {', '    name1',
                '    name2', '  };', '};'
            ], 'Unexpected symbol name2 after symbol name1.'),
            ('invalid_idl_4.idl', [
                '//', 'namespace test {', '  enum TrailingComma {',
                '    name1,', '    name2,', '  };', '};'
            ], 'Trailing comma in block.'),
            ('invalid_idl_5.idl',
             ['//', 'namespace test {', '  callback Callback1 = void(;',
              '};'], 'Unexpected ";" after "(".'),
            ('invalid_idl_6.idl', [
                '//', 'namespace test {',
                '  callback Callback1 = void(long );', '};'
            ], 'Unexpected ")" after symbol long.'),
            ('invalid_idl_7.idl', [
                '//', 'namespace test {', '  interace Events {',
                '    static void onFoo1();', '  };', '};'
            ], 'Unexpected symbol Events after symbol interace.'),
            ('invalid_idl_8.idl', [
                '//', 'namespace test {', '  interface NotEvent {',
                '    static void onFoo1();', '  };', '};'
            ], 'Did not process Interface Interface(NotEvent)'),
            ('invalid_idl_9.idl', [
                '//', 'namespace test {', '  interface {',
                '    static void function1();', '  };', '};'
            ], 'Interface missing name.'),
        ]

        input_api.files = [
            MockFile(filename, contents)
            for (filename, contents, _) in test_data
        ]

        for (filename, _, expected_error) in test_data:
            actual_error = PRESUBMIT._GetIDLParseError(input_api, filename)
            self.assertTrue(
                expected_error in str(actual_error),
                "'%s' not found in '%s'" % (expected_error, actual_error))
Пример #17
0
 def testInvalidReference(self):
     lines = ['<TextView', 'android:textColor="#FFFFFF" />']
     mock_input_api = MockInputApi()
     mock_input_api.files = [MockFile('chrome/path/test.xml', lines)]
     errors = PRESUBMIT._CheckColorReferences(mock_input_api,
                                              MockOutputApi())
     self.assertEqual(1, len(errors))
     self.assertEqual(1, len(errors[0].items))
     self.assertEqual('  chrome/path/test.xml:2',
                      errors[0].items[0].splitlines()[0])
Пример #18
0
 def testVectorDrawbleIgnored(self):
     lines = [
         '<vector', 'tools:targetApi="21"', 'android:fillColor="#CCCCCC">',
         '</vector>'
     ]
     mock_input_api = MockInputApi()
     mock_input_api.files = [MockFile('chrome/path/test.xml', lines)]
     errors = PRESUBMIT._CheckColorReferences(mock_input_api,
                                              MockOutputApi())
     self.assertEqual(0, len(errors))
Пример #19
0
 def testColorFormatIgnoredFile(self):
     lines = [
         '<color name="color1">#61000000</color>',
         '<color name="color2">#FFFFFF</color>',
         '<color name="color3">#CCC</color>'
     ]
     mock_input_api = MockInputApi()
     mock_input_api.files = [MockFile('chrome/path/test.java', lines)]
     errors = PRESUBMIT._CheckColorFormat(mock_input_api, MockOutputApi())
     self.assertEqual(0, len(errors))
Пример #20
0
 def testActionXMLChanged(self):
   mock_input_api = MockInputApi()
   lines = ['<input id="testinput" pref="testpref"',
            'metric="validaction" type="checkbox" dialog-pref>']
   mock_input_api.files = [MockFile('path/valid.html', lines)]
   mock_input_api.change = MockChange(['path/valid.html','actions.xml'])
   action_xml_path = self._createActionXMLFile()
   self.assertEqual([], PRESUBMIT.CheckUserActionUpdate(mock_input_api,
                                                        MockOutputApi(),
                                                        action_xml_path))
Пример #21
0
 def testFailure(self):
   lines = ['xmlns:chrome="http://schemas.android.com/apk/res-auto"']
   mock_input_api = MockInputApi()
   mock_input_api.files = [MockFile('chrome/java/res_test/file.xml', lines)]
   errors = checkxmlstyle._CheckXmlNamespacePrefixes(
       mock_input_api, MockOutputApi())
   self.assertEqual(1, len(errors))
   self.assertEqual(1, len(errors[0].items))
   self.assertEqual('  chrome/java/res_test/file.xml:1',
                    errors[0].items[0].splitlines()[0])
Пример #22
0
 def testSucess(self):
     lines = [
         '<color name="color1">#61000000</color>',
         '<color name="color1">#FFFFFF</color>'
     ]
     mock_input_api = MockInputApi()
     mock_input_api.files = [MockFile('chrome/path/colors.xml', lines)]
     errors = PRESUBMIT._CheckDuplicateColors(mock_input_api,
                                              MockOutputApi())
     self.assertEqual(0, len(errors))
Пример #23
0
    def testAllowInComment(self):
        input_api = MockInputApi()
        input_api.files = [
            MockFile('content/file.cc',
                     ['char* host = "https://www.aol.com"; // google.com'])
        ]

        warnings = PRESUBMIT._CheckHardcodedGoogleHostsInLowerLayers(
            input_api, MockOutputApi())
        self.assertEqual(0, len(warnings))
Пример #24
0
 def testSuccess(self):
     input_api = MockInputApi()
     filename = 'valid_json.json'
     contents = [
         '// This is a comment.', '{', '  "key1": ["value1", "value2"],',
         '  "key2": 3  // This is an inline comment.', '}'
     ]
     input_api.files = [MockFile(filename, contents)]
     self.assertEqual(None,
                      PRESUBMIT._GetJSONParseError(input_api, filename))
Пример #25
0
 def inputApiContainingFileWithPaths(self, filename, paths):
     """Returns a MockInputApi object with a single file having |filename| as
 its name and |paths| as its contents, with each path being wrapped in a
 pair of double-quotes to match the syntax for strings within BUILD.gn
 files."""
     contents = ['"%s"' % path for path in paths]
     mock_file = MockFile(filename, contents)
     mock_input_api = MockInputApi()
     mock_input_api.files.append(mock_file)
     return mock_input_api
 def testInvalidOSMacroNames(self):
   lines = ['#if defined(OS_WINDOWS)',
            ' #elif defined(OS_WINDOW)',
            ' # if defined(OS_MACOSX) || defined(OS_CHROME)',
            '# else  // defined(OS_MAC)',
            '#endif  // defined(OS_MACOS)']
   errors = PRESUBMIT._CheckForInvalidOSMacrosInFile(
       MockInputApi(), MockFile('some/path/foo_platform.cc', lines))
   self.assertEqual(len(lines), len(errors))
   self.assertTrue(':1 OS_WINDOWS' in errors[0])
   self.assertTrue('(did you mean OS_WIN?)' in errors[0])
Пример #27
0
 def testColorFormatLowerCase(self):
   lines = ['<color name="color1">#61000000</color>',
            '<color name="color2">#EFFFFFFF</color>',
            '<color name="color3">#CcCcCC</color>']
   mock_input_api = MockInputApi()
   mock_input_api.files = [MockFile('chrome/java/res_test/test.xml', lines)]
   errors = checkxmlstyle._CheckColorFormat(mock_input_api, MockOutputApi())
   self.assertEqual(1, len(errors))
   self.assertEqual(1, len(errors[0].items))
   self.assertEqual('  chrome/java/res_test/test.xml:3',
                    errors[0].items[0].splitlines()[0])
Пример #28
0
 def testVectorDrawbleIgnored(self):
   lines = ['<vector',
            'tools:targetApi="21"',
            'android:fillColor="#CCCCCC">',
            '</vector>']
   mock_input_api = MockInputApi()
   mock_input_api.files = [MockFile('chrome/java/res_test/test.xml', lines)]
   result = checkxmlstyle._CheckColorReferences(
       mock_input_api, MockOutputApi())
   self.assertEqual(1, len(result))
   self.assertEqual(result[0].type, 'warning')
Пример #29
0
 def testTypicalConflict(self):
     lines = [
         '<<<<<<< HEAD', '  base::ScopedTempDir temp_dir_;', '=======',
         '  ScopedTempDir temp_dir_;', '>>>>>>> master'
     ]
     errors = PRESUBMIT._CheckForVersionControlConflictsInFile(
         MockInputApi(), MockFile('some/path/foo_platform.cc', lines))
     self.assertEqual(3, len(errors))
     self.assertTrue('1' in errors[0])
     self.assertTrue('3' in errors[1])
     self.assertTrue('5' in errors[2])
Пример #30
0
 def testSuccess(self):
     """
 Examples of when SplitCompatUtils.getIdentifierName() should not be flagged.
 """
     mock_input = MockInputApi()
     mock_input.files = [
         MockFile(
             'path/One.java',
             ['SplitCompatUtils.getIdentifierName("foo")', 'A new line.']),
         MockFile('path/Two.java',
                  ['SplitCompatUtils.getIdentifierName(    "foo")']),
         MockFile('path/Three.java',
                  ['SplitCompatUtils.getIdentifierName(', '    "bar")']),
         MockFile(
             'path/Four.java',
             ['  super(SplitCompatUtils.getIdentifierName(', '"bar"))']),
     ]
     errors = PRESUBMIT._CheckSplitCompatUtilsIdentifierName(
         mock_input, MockOutputApi())
     self.assertEqual(0, len(errors))