def testNoDeprecatedCompiledResourcsGYP(self):
        mock_input_api = MockInputApi()
        mock_input_api.files = [MockFile("some/js/compiled_resources.gyp", [])]
        errors = PRESUBMIT._CheckNoDeprecatedCompiledResourcesGYP(mock_input_api, MockOutputApi())
        self.assertEquals(1, len(errors))

        mock_input_api.files = [MockFile("some/js/compiled_resources2.gyp", [])]
        errors = PRESUBMIT._CheckNoDeprecatedCompiledResourcesGYP(mock_input_api, MockOutputApi())
        self.assertEquals(0, len(errors))
示例#2
0
 def testFailure_Style(self):
   lines = [
       '<resource>',
       '<style name="TestTextAppearance">',
       '<item name="android:textColor">@color/default_text_color_link</item>',
       '<item name="android:textSize">14sp</item>',
       '<item name="android:textStyle">bold</item>',
       '<item name="android:fontFamily">some-font</item>',
       '<item name="android:textAllCaps">true</item>',
       '</style>',
       '</resource>']
   mock_input_api = MockInputApi()
   mock_input_api.files = [MockFile('chrome/path/test.xml', lines)]
   errors = PRESUBMIT._CheckTextAppearance(mock_input_api, MockOutputApi())
   self.assertEqual(1, len(errors))
   self.assertEqual(5, len(errors[0].items))
   self.assertEqual(
       '  chrome/path/test.xml:2 contains attribute android:textColor',
       errors[0].items[0].splitlines()[0])
   self.assertEqual(
       '  chrome/path/test.xml:2 contains attribute android:textSize',
       errors[0].items[1].splitlines()[0])
   self.assertEqual(
       '  chrome/path/test.xml:2 contains attribute android:textStyle',
       errors[0].items[2].splitlines()[0])
   self.assertEqual(
       '  chrome/path/test.xml:2 contains attribute android:fontFamily',
       errors[0].items[3].splitlines()[0])
   self.assertEqual(
       '  chrome/path/test.xml:2 contains attribute android:textAllCaps',
       errors[0].items[4].splitlines()[0])
示例#3
0
  def testNoEatComments(self):
    input_api = MockInputApi()
    file_with_comments = 'file_with_comments.json'
    contents_with_comments = ['// This is a comment.',
                              '{',
                              '  "key1": ["value1", "value2"],',
                              '  "key2": 3  // This is an inline comment.',
                              '}'
                              ]
    file_without_comments = 'file_without_comments.json'
    contents_without_comments = ['{',
                                 '  "key1": ["value1", "value2"],',
                                 '  "key2": 3',
                                 '}'
                                 ]
    input_api.files = [MockFile(file_with_comments, contents_with_comments),
                       MockFile(file_without_comments,
                                contents_without_comments)]

    self.assertEqual('No JSON object could be decoded',
                     str(PRESUBMIT._GetJSONParseError(input_api,
                                                      file_with_comments,
                                                      eat_comments=False)))
    self.assertEqual(None,
                     PRESUBMIT._GetJSONParseError(input_api,
                                                  file_without_comments,
                                                  eat_comments=False))
示例#4
0
 def testSucess(self):
   lines = ['xmlns:app="http://schemas.android.com/apk/res-auto"']
   mock_input_api = MockInputApi()
   mock_input_api.files = [MockFile('chrome/path/file.xml', lines)]
   errors = PRESUBMIT._CheckXmlNamespacePrefixes(
       mock_input_api, MockOutputApi())
   self.assertEqual(0, len(errors))
示例#5
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))
示例#6
0
  def testCheckAndroidTestAnnotationUsage(self):
    mock_input_api = MockInputApi()
    mock_output_api = MockOutputApi()

    mock_input_api.files = [
        MockAffectedFile('LalaLand.java', [
          'random stuff'
        ]),
        MockAffectedFile('CorrectUsage.java', [
          'import org.junit.ABC',
          'import org.junit.XYZ;',
        ]),
        MockAffectedFile('UsedDeprecatedJUnit.java', [
          'import junit.framework.*;',
        ]),
        MockAffectedFile('UsedDeprecatedJUnitAssert.java', [
          'import junit.framework.Assert;',
        ]),
    ]
    msgs = PRESUBMIT._CheckAndroidTestJUnitFrameworkImport(
        mock_input_api, mock_output_api)
    self.assertEqual(1, len(msgs),
                     'Expected %d items, found %d: %s'
                     % (1, len(msgs), msgs))
    self.assertEqual(2, len(msgs[0].items),
                     'Expected %d items, found %d: %s'
                     % (2, len(msgs[0].items), msgs[0].items))
    self.assertTrue('UsedDeprecatedJUnit.java:1' in msgs[0].items,
                    'UsedDeprecatedJUnit.java not found in errors')
    self.assertTrue('UsedDeprecatedJUnitAssert.java:1'
                    in msgs[0].items,
                    'UsedDeprecatedJUnitAssert not found in errors')
示例#7
0
  def testFailure(self):
    input_api = MockInputApi()
    test_data = [
      ('invalid_json_1.json',
       ['{ x }'],
       'Expecting property name:'),
      ('invalid_json_2.json',
       ['// Hello world!',
        '{ "hello": "world }'],
       'Unterminated string starting at:'),
      ('invalid_json_3.json',
       ['{ "a": "b", "c": "d", }'],
       'Expecting property name:'),
      ('invalid_json_4.json',
       ['{ "a": "b" "c": "d" }'],
       'Expecting , delimiter:'),
      ]

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

    for (filename, _, expected_error) in test_data:
      actual_error = PRESUBMIT._GetJSONParseError(input_api, filename)
      self.assertTrue(expected_error in str(actual_error),
                      "'%s' not found in '%s'" % (expected_error, actual_error))
示例#8
0
 def testSingletonInCC(self):
   diff_cc = ['Foo* foo = Singleton<Foo>::get();']
   mock_input_api = MockInputApi()
   mock_input_api.files = [MockAffectedFile('some/path/foo.cc', diff_cc)]
   warnings = PRESUBMIT._CheckSingletonInHeaders(mock_input_api,
                                                 MockOutputApi())
   self.assertEqual(0, len(warnings))
示例#9
0
 def _runChecks(self, files, exists=lambda f: True):
   input_api = MockInputApi()
   input_api.os_path.exists = exists
   input_api.files = [MockFile(f, '') for f in files]
   output_api = MockOutputApi()
   checker = ExternsChecker(input_api, output_api, self.API_PAIRS)
   return checker.RunChecks()
示例#10
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)
示例#11
0
 def testValidReference(self):
   lines = ['<TextView',
            'android:textColor="@color/color1" />']
   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))
示例#12
0
    def testUserMetricsActionInActions(self):
        input_api = MockInputApi()
        file_with_user_action = "file_with_user_action.cc"
        contents_with_user_action = ['base::UserMetricsAction("AboutChrome")']

        input_api.files = [MockFile(file_with_user_action, contents_with_user_action)]

        self.assertEqual([], PRESUBMIT._CheckUserActionUpdate(input_api, MockOutputApi()))
示例#13
0
 def testGoodFiles(self):
   mock_input_api = MockInputApi()
   mock_input_api.files = [
     MockFile('other/path/qux.h', ''),
     MockFile('other/path/qux.cc', ''),
   ]
   results = PRESUBMIT._CheckPatchFiles(mock_input_api, MockOutputApi())
   self.assertEqual(0, len(results))
示例#14
0
 def testArrowsAllowedInChromeCode(self):
   mock_input_api = MockInputApi()
   mock_input_api.files = [
     MockAffectedFile('chrome/browser/resources/blah.js', 'arrow => OK here'),
   ]
   warnings = PRESUBMIT._CheckForRiskyJsFeatures(
       mock_input_api, MockOutputApi())
   self.assertEqual(0, len(warnings))
示例#15
0
  def _testChange(self, lines):
    mock_input_api = MockInputApi()
    mock_input_api.files = [MockFile('path/test.html', lines)]

    action_xml_path = self._createActionXMLFile()
    return PRESUBMIT.CheckUserActionUpdate(mock_input_api,
                                           MockOutputApi(),
                                           action_xml_path)
示例#16
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))
示例#17
0
   def testCheckWamMintTriggerRule(self):
     COMMON_SRC_FILE_PATH = (
         'libs/common/src/org/chromium/webapk/lib/common/A.java')
     COMMON_JUNIT_FILE_PATH = (
         'libs/common/junit/src/org/chromium/webapk/lib/common/B.java')
     SHELL_APK_SRC_FILE_PATH = (
         'shell_apk/src/org/chromium/webapk/shell_apk/C.java')
     SHELL_APK_JUNIT_FILE_PATH = (
         'shell_apk/junit/src/org/chromium/webapk/shell_apk/D.java')
     changed_java_file_paths = [
         COMMON_SRC_FILE_PATH, COMMON_JUNIT_FILE_PATH, SHELL_APK_SRC_FILE_PATH,
         SHELL_APK_JUNIT_FILE_PATH
     ]

     SHELL_APK_RES_FILE_PATH = 'shell_apk/res/mipmap-xxxxxxhdpi/app_icon.png'
     CURRENT_VERSION_FILE_PATH = 'shell_apk/current_version/current_version.gni'

     # template_shell_apk_version not updated. There should be a warning about
     # template_shell_apk_version needing to be updated.
     input_api = MockInputApi()
     input_api.files = self.makeMockAffectedFiles(
         changed_java_file_paths + [SHELL_APK_RES_FILE_PATH])
     input_api.files += [
         MockAffectedFile(CURRENT_VERSION_FILE_PATH, 'variable=O',
                          'variable=N', action='M')
     ]
     warnings = PRESUBMIT._CheckCurrentVersionIncreaseRule(input_api,
                                                           MockOutputApi())
     self.assertEqual(1, len(warnings))
     self.assertEqual(self.UPDATE_CURRENT_VERSION_MESSAGE, warnings[0].message)
     self.assertEqual([COMMON_SRC_FILE_PATH, SHELL_APK_SRC_FILE_PATH,
                       SHELL_APK_RES_FILE_PATH],
                      warnings[0].items)

     # template_shell_apk_version updated. There should be no warnings.
     input_api.files = self.makeMockAffectedFiles(
         changed_java_file_paths + [SHELL_APK_RES_FILE_PATH])
     input_api.files += [
         MockAffectedFile(CURRENT_VERSION_FILE_PATH,
                          ['current_shell_apk_version=1'],
                          ['current_shell_apk_version=2'], action='M')
     ]
     warnings = PRESUBMIT._CheckCurrentVersionIncreaseRule(input_api,
                                                           MockOutputApi())
     self.assertEqual([], warnings)
示例#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 testFailure(self):
   lines = ['xmlns:chrome="http://schemas.android.com/apk/res-auto"']
   mock_input_api = MockInputApi()
   mock_input_api.files = [MockFile('chrome/path/file.xml', lines)]
   errors = PRESUBMIT._CheckXmlNamespacePrefixes(
       mock_input_api, MockOutputApi())
   self.assertEqual(1, len(errors))
   self.assertEqual(1, len(errors[0].items))
   self.assertEqual('  chrome/path/file.xml:1',
                    errors[0].items[0].splitlines()[0])
示例#20
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])
示例#21
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))
示例#22
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))
 def testCheckHeadersOnly(self):
   mock_input_api = MockInputApi()
   mock_input_api.files = [
     MockAffectedFile('somewhere/file.cc', [
       'class DummyClass;'
     ])
   ]
   warnings = PRESUBMIT._CheckUselessForwardDeclarations(mock_input_api,
     MockOutputApi())
   self.assertEqual(0, len(warnings))
示例#24
0
 def testTypicalCorrectlyMatchedChange(self):
     diff_cc = ['UMA_HISTOGRAM_BOOL("Bla.Foo.Dummy", true)']
     diff_xml = ['<histogram name="Bla.Foo.Dummy"> </histogram>']
     mock_input_api = MockInputApi()
     mock_input_api.files = [
         MockFile("some/path/foo.cc", diff_cc),
         MockFile("tools/metrics/histograms/histograms.xml", diff_xml),
     ]
     warnings = PRESUBMIT._CheckUmaHistogramChanges(mock_input_api, MockOutputApi())
     self.assertEqual(0, len(warnings))
示例#25
0
  def testRelativeIncludeNonWebKitProducesError(self):
    mock_input_api = MockInputApi()
    mock_input_api.files = [
      MockAffectedFile('test.cpp', ['#include "../header.h"']),
    ]

    mock_output_api = MockOutputApi()

    errors = PRESUBMIT._CheckForRelativeIncludes(
        mock_input_api, mock_output_api)
    self.assertEqual(1, len(errors))
示例#26
0
  def testNonCppFileIgnored(self):
    mock_input_api = MockInputApi()
    mock_input_api.files = [
      MockAffectedFile('test.py', '#include "../header.h"'),
    ]

    mock_output_api = MockOutputApi()

    errors = PRESUBMIT._CheckForRelativeIncludes(
        mock_input_api, mock_output_api)
    self.assertEqual(0, len(errors))
示例#27
0
  def testCheckAndroidTestAnnotationUsage(self):
    mock_input_api = MockInputApi()
    mock_output_api = MockOutputApi()

    mock_input_api.files = [
        MockAffectedFile('LalaLand.java', [
          'random stuff'
        ]),
        MockAffectedFile('CorrectTest.java', [
          '@RunWith(ABC.class);'
          'public class CorrectTest {',
          '}',
        ]),
        MockAffectedFile('HistoricallyIncorrectTest.java', [
          'public class Test extends BaseCaseA {',
          '}',
          ], old_contents=[
          'public class Test extends BaseCaseB {',
          '}',
        ]),
        MockAffectedFile('CorrectTestWithInterface.java', [
          '@RunWith(ABC.class);'
          'public class CorrectTest implement Interface {',
          '}',
        ]),
        MockAffectedFile('IncorrectTest.java', [
          'public class IncorrectTest extends TestCase {',
          '}',
        ]),
        MockAffectedFile('IncorrectTestWithInterface.java', [
          'public class Test implements X extends BaseClass {',
          '}',
        ]),
        MockAffectedFile('IncorrectTestMultiLine.java', [
          'public class Test implements X, Y, Z',
          '        extends TestBase {',
          '}',
        ]),
    ]
    msgs = PRESUBMIT._CheckAndroidTestJUnitInheritance(
        mock_input_api, mock_output_api)
    self.assertEqual(1, len(msgs),
                     'Expected %d items, found %d: %s'
                     % (1, len(msgs), msgs))
    self.assertEqual(3, len(msgs[0].items),
                     'Expected %d items, found %d: %s'
                     % (3, len(msgs[0].items), msgs[0].items))
    self.assertTrue('IncorrectTest.java:1' in msgs[0].items,
                    'IncorrectTest not found in errors')
    self.assertTrue('IncorrectTestWithInterface.java:1'
                    in msgs[0].items,
                    'IncorrectTestWithInterface not found in errors')
    self.assertTrue('IncorrectTestMultiLine.java:2' in msgs[0].items,
                    'IncorrectTestMultiLine not found in errors')
示例#28
0
 def testBaseMacrosInHeadersBad(self):
     mock_input_api = MockInputApi()
     mock_input_api.files = [
         MockAffectedFile("foo.h", self._make_h("not_macros", "ASSIGN")),
         MockAffectedFile("bar.h", self._make_h("not_macros", "COPY")),
         MockAffectedFile("baz.h", self._make_h("not_macros", "COPY_AND_ASSIGN")),
         MockAffectedFile("qux.h", self._make_h("not_macros", "EVIL")),
     ]
     warnings = PRESUBMIT._CheckBaseMacrosInHeaders(mock_input_api, MockOutputApi())
     self.assertEqual(1, len(warnings))
     self.assertEqual(4, len(warnings[0].items))
示例#29
0
    def testWarnOnAssignedLiterals(self):
        input_api = MockInputApi()
        input_api.files = [
            MockFile("content/file.cc", ['char* host = "https://www.google.com";']),
            MockFile("content/file.cc", ['char* host = "https://www.googleapis.com";']),
            MockFile("content/file.cc", ['char* host = "https://clients1.google.com";']),
        ]

        warnings = PRESUBMIT._CheckHardcodedGoogleHostsInLowerLayers(input_api, MockOutputApi())
        self.assertEqual(1, len(warnings))
        self.assertEqual(3, len(warnings[0].items))
示例#30
0
  def testAllowAnswerUrlParam(self):
    input_api = MockInputApi()
    input_api.files = [
      MockFile('somewhere/file.cc',
               ['char* host = '
                '  "https://support.google.com/chrome/?p=cpn_crash_reports";']),
    ]

    warnings = PRESUBMIT._CheckGoogleSupportAnswerUrl(
      input_api, MockOutputApi())
    self.assertEqual(0, len(warnings))
示例#31
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/java/res_test/test.java', lines)
     ]
     errors = checkxmlstyle._CheckColorFormat(mock_input_api,
                                              MockOutputApi())
     self.assertEqual(0, len(errors))
示例#32
0
 def testCheckChangeOnUploadWithEmptyAffectedFileList(self, _):
     """This verifies that CheckChangeOnUpload will skip calling
     check_blink_style.py if the affected file list is empty.
     """
     diff_file_chromium1_h = ['some diff']
     diff_file_chromium2_h = ['another diff']
     diff_file_layout_test_html = ['more diff']
     mock_input_api = MockInputApi()
     mock_input_api.files = []
     # Access to a protected member _CheckStyle
     # pylint: disable=W0212
     PRESUBMIT._CheckStyle(mock_input_api, MockOutputApi())
     self.assertEqual(0, subprocess.Popen.call_count)
示例#33
0
 def testSuccess(self):
   lines = [
       '<resource>',
       '<style name="TextAppearanceTest">',
       '<item name="android:textColor">@color/default_text_color_link</item>',
       '<item name="android:textSize">14sp</item>',
       '</style>',
       '</resource>']
   mock_input_api = MockInputApi()
   mock_input_api.files = [MockFile('chrome/java/res_test/test.xml', lines)]
   errors = checkxmlstyle._CheckNewTextAppearance(
       mock_input_api, MockOutputApi())
   self.assertEqual(0, len(errors))
示例#34
0
  def testBadRejFile(self):
    mock_input_api = MockInputApi()
    mock_input_api.files = [
      MockFile('some/path/foo.cc', ''),
      MockFile('some/path/foo.cc.rej', ''),
      MockFile('some/path2/bar.h.rej', ''),
    ]

    results = PRESUBMIT._CheckPatchFiles(mock_input_api, MockOutputApi())
    self.assertEqual(1, len(results))
    self.assertEqual(2, len(results[0].items))
    self.assertTrue('foo.cc.rej' in results[0].items[0])
    self.assertTrue('bar.h.rej' in results[0].items[1])
示例#35
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/path/test.xml', lines)]
     errors = PRESUBMIT._CheckColorFormat(mock_input_api, MockOutputApi())
     self.assertEqual(1, len(errors))
     self.assertEqual(1, len(errors[0].items))
     self.assertEqual('  chrome/path/test.xml:3',
                      errors[0].items[0].splitlines()[0])
示例#36
0
 def testTruePositives(self):
     """Examples of when Notification.Builder use is correctly flagged."""
     mock_input = MockInputApi()
     mock_input.files = [
         MockFile('path/One.java', ['new Notification.Builder()']),
         MockFile('path/Two.java', ['new NotificationCompat.Builder()']),
     ]
     errors = PRESUBMIT._CheckNotificationConstructors(
         mock_input, MockOutputApi())
     self.assertEqual(1, len(errors))
     self.assertEqual(2, len(errors[0].items))
     self.assertTrue('One.java' in errors[0].items[0])
     self.assertTrue('Two.java' in errors[0].items[1])
示例#37
0
 def testNoNestedDeclaration(self):
     mock_input_api = MockInputApi()
     mock_input_api.files = [
         MockAffectedFile(
             'somewhere/header.h',
             ['class SomeClass {'
              ' protected:'
              '  class NotAMatch;'
              '};'])
     ]
     warnings = PRESUBMIT._CheckUselessForwardDeclarations(
         mock_input_api, MockOutputApi())
     self.assertEqual(0, len(warnings))
示例#38
0
 def testCheckOnlyCFiles(self):
   mock_input_api = MockInputApi()
   mock_output_api = MockOutputApi()
   contents = ['#include <b.h>',
               '#include <a.h>']
   mock_file_cc = MockFile('something.cc', contents)
   mock_file_h = MockFile('something.h', contents)
   mock_file_other = MockFile('something.py', contents)
   mock_input_api.files = [mock_file_cc, mock_file_h, mock_file_other]
   warnings = PRESUBMIT._CheckIncludeOrder(mock_input_api, mock_output_api)
   self.assertEqual(1, len(warnings))
   self.assertEqual(2, len(warnings[0].items))
   self.assertEqual('promptOrNotify', warnings[0].type)
示例#39
0
 def testNonManifestChangesDoNotRequireSecurityOwner(self):
     mock_input_api = MockInputApi()
     mock_input_api.files = [
         MockAffectedFile('services/goat/species.json', [
             '[',
             '  "anglo-nubian",',
             '  "angora"',
             ']',
         ])
     ]
     mock_output_api = MockOutputApi()
     errors = PRESUBMIT._CheckIpcOwners(mock_input_api, mock_output_api)
     self.assertEqual([], errors)
示例#40
0
 def testBaseMacrosInHeadersGood(self):
   mock_input_api = MockInputApi()
   mock_input_api.files = [
     MockAffectedFile('foo.h', self._make_h('macros', 'ASSIGN')),
     MockAffectedFile('bar.h', self._make_h('macros', 'COPY')),
     MockAffectedFile('baz.h', self._make_h('macros', 'COPY_AND_ASSIGN')),
     MockAffectedFile('qux.h', self._make_h('macros', 'EVIL')),
     MockAffectedFile('foz.h', self._make_h('not_macros', 'ASSIGN', '//')),
     MockAffectedFile('foz.h', self._make_h('not_macros', 'ASSIGN', '  //')),
   ]
   warnings = PRESUBMIT._CheckBaseMacrosInHeaders(mock_input_api,
                                                  MockOutputApi())
   self.assertEqual(0, len(warnings))
 def testFileExcluded(self):
     lines = []
     mock_input_api = MockInputApi()
     mock_input_api.files = [
         MockFile('chrome/res_test/test.xml', lines),
         MockFile('ui/test/test.xml', lines),
         MockFile('ui/java/res/test.java', lines),
         MockFile('content/java/res.xml', lines),
         MockFile('components/java/test.xml', lines),
         MockFile('test/java/res/test.xml', lines)
     ]
     self.assertEqual(
         0, len(list(checkxmlstyle.IncludedFiles(mock_input_api))))
示例#42
0
 def testTruePositives(self):
     """Examples of when AlertDialog.Builder use is correctly flagged."""
     mock_input = MockInputApi()
     mock_input.files = [
         MockFile('path/One.java', ['new AlertDialog.Builder()']),
         MockFile('path/Two.java', ['new AlertDialog.Builder(context);']),
     ]
     errors = PRESUBMIT._CheckAlertDialogBuilder(mock_input,
                                                 MockOutputApi())
     self.assertEqual(1, len(errors))
     self.assertEqual(2, len(errors[0].items))
     self.assertTrue('One.java' in errors[0].items[0])
     self.assertTrue('Two.java' in errors[0].items[1])
示例#43
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')
示例#44
0
    def testThirdPartyNotWebKitIgnored(self):
        mock_input_api = MockInputApi()
        mock_input_api.files = [
            MockAffectedFile('third_party/test.cpp', '#include "../header.h"'),
            MockAffectedFile('third_party/test/test.cpp',
                             '#include "../header.h"'),
        ]

        mock_output_api = MockOutputApi()

        errors = PRESUBMIT._CheckForRelativeIncludes(mock_input_api,
                                                     mock_output_api)
        self.assertEqual(0, len(errors))
示例#45
0
 def testSuccess_Widget(self):
     lines = [
         '<RelativeLayout',
         'xmlns:android="http://schemas.android.com/apk/res/android"',
         'android:layout_width="match_parent"',
         'android:layout_height="wrap_content">', '<View',
         'android:background="@drawable/infobar_shadow_top"',
         'android:visibility="gone" />', '</RelativeLayout>'
     ]
     mock_input_api = MockInputApi()
     mock_input_api.files = [MockFile('chrome/path/test.xml', lines)]
     errors = PRESUBMIT._CheckTextAppearance(mock_input_api,
                                             MockOutputApi())
     self.assertEqual(0, len(errors))
 def testTypicalCorrectlyMatchedChangeViaSuffixesWithSeparator(self):
   diff_cc = ['UMA_HISTOGRAM_BOOL("Snafu_Dummy", true)']
   diff_xml = ['<histogram_suffixes name="SuperHistogram" separator="_">',
               '  <suffix name="Dummy"/>',
               '  <affected-histogram name="Snafu"/>',
               '</histogram>']
   mock_input_api = MockInputApi()
   mock_input_api.files = [
     MockFile('some/path/foo.cc', diff_cc),
     MockFile('tools/metrics/histograms/histograms.xml', diff_xml),
   ]
   warnings = PRESUBMIT._CheckUmaHistogramChanges(mock_input_api,
                                                  MockOutputApi())
   self.assertEqual(0, len(warnings))
示例#47
0
    def check_contents(self, file_contents):
        tmp_args = {'suffix': '.svg', 'dir': _HERE_PATH, 'delete': False}
        with tempfile.NamedTemporaryFile(**tmp_args) as f:
            self._tmp_file = f.name
            f.write(file_contents)

        input_api = MockInputApi()
        input_api.files = [
            MockFile(os.path.abspath(self._tmp_file),
                     file_contents.splitlines())
        ]
        input_api.presubmit_local_path = _HERE_PATH

        return svgo_presubmit.CheckOptimized(input_api, MockOutputApi())
示例#48
0
 def testFailure(self):
   lines = ['<color name="color1">#61000000</color>',
            '<color name="color2">#61000000</color>']
   mock_input_api = MockInputApi()
   mock_input_api.files = [
       MockFile(helpers.COLOR_PALETTE_RELATIVE_PATH, lines)]
   errors = checkxmlstyle._CheckDuplicateColors(
       mock_input_api, MockOutputApi())
   self.assertEqual(1, len(errors))
   self.assertEqual(2, len(errors[0].items))
   self.assertEqual('  %s:1' % helpers.COLOR_PALETTE_RELATIVE_PATH,
                    errors[0].items[0].splitlines()[0])
   self.assertEqual('  %s:2' % helpers.COLOR_PALETTE_RELATIVE_PATH,
                    errors[0].items[1].splitlines()[0])
示例#49
0
    def testAndroidChangeMissing(self):
        mock_input_api = MockInputApi()

        mock_input_api.files = [
            MockAffectedFile('content/test/data/accessibility/event/foo.html',
                             [''],
                             action='A'),
        ]

        msgs = PRESUBMIT.CheckAccessibilityEventsTestIncludesAndroid(
            mock_input_api, MockOutputApi())
        self.assertEqual(
            1, len(msgs),
            'Expected %d messages, found %d: %s' % (1, len(msgs), msgs))
    def testExcludedFiles(self):
        """ Only .html and .css files should be processed. """
        mock_input_api = MockInputApi()
        lines = [
            'color: var(--google-grey-500);',
        ]
        mock_input_api.files = [
            MockAffectedFile('chrome/test.js', lines),
        ]

        mock_output_api = MockOutputApi()

        errors = SemanticCssChecker.RunChecks(mock_input_api, mock_output_api)
        self.assertEqual(0, len(errors))
示例#51
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.xml', [
             '<color name="b">@color/hello<color>',
             '<color name="c">@color/a<color>'
         ])
     ]
     errors = checkxmlstyle._CheckSemanticColorsReferences(
         mock_input_api, MockOutputApi())
     self.assertEqual(1, len(errors))
 def testTypicalNotMatchedChangeViaSuffixes(self):
   diff_cc = ['UMA_HISTOGRAM_BOOL("Bla.Foo.Dummy", true)']
   diff_xml = ['<histogram_suffixes name="SuperHistogram">',
               '  <suffix name="Dummy"/>',
               '  <affected-histogram name="Snafu.Dummy"/>',
               '</histogram>']
   mock_input_api = MockInputApi()
   mock_input_api.files = [
     MockFile('some/path/foo.cc', diff_cc),
     MockFile('tools/metrics/histograms/histograms.xml', diff_xml),
   ]
   warnings = PRESUBMIT._CheckUmaHistogramChanges(mock_input_api,
                                                  MockOutputApi())
   self.assertEqual(1, len(warnings))
   self.assertEqual('warning', warnings[0].type)
示例#53
0
    def testWarnOnAssignedLiterals(self):
        input_api = MockInputApi()
        input_api.files = [
            MockFile('content/file.cc',
                     ['char* host = "https://www.google.com";']),
            MockFile('content/file.cc',
                     ['char* host = "https://www.googleapis.com";']),
            MockFile('content/file.cc',
                     ['char* host = "https://clients1.google.com";']),
        ]

        warnings = PRESUBMIT._CheckHardcodedGoogleHostsInLowerLayers(
            input_api, MockOutputApi())
        self.assertEqual(1, len(warnings))
        self.assertEqual(3, len(warnings[0].items))
示例#54
0
    def testArrowWarnInIos9Code(self):
        mock_input_api = MockInputApi()
        mock_output_api = MockOutputApi()

        mock_input_api.files = [
            MockAffectedFile('components/blah.js', ["shouldn't use => here"]),
        ]
        warnings = PRESUBMIT._CheckForRiskyJsFeatures(mock_input_api,
                                                      mock_output_api)
        self.assertEqual(1, len(warnings))

        mock_input_api.files = [
            MockAffectedFile('ios/blee.js', ['might => break folks']),
        ]
        warnings = PRESUBMIT._CheckForRiskyJsFeatures(mock_input_api,
                                                      mock_output_api)
        self.assertEqual(1, len(warnings))

        mock_input_api.files = [
            MockAffectedFile('ui/webui/resources/blarg.js', ['on => iOS9']),
        ]
        warnings = PRESUBMIT._CheckForRiskyJsFeatures(mock_input_api,
                                                      mock_output_api)
        self.assertEqual(1, len(warnings))
示例#55
0
 def testFailure(self):
     lines = [
         '<resource>', '<style name="TextAppearance.Test">',
         '<item name="android:textColor">@color/default_text_color_link</item>',
         '<item name="android:textSize">14sp</item>', '</style>',
         '</resource>'
     ]
     mock_input_api = MockInputApi()
     mock_input_api.files = [MockFile('chrome/path/test.xml', lines)]
     errors = PRESUBMIT._CheckNewTextAppearance(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])
示例#56
0
 def testFailure(self):
     lines = [
         '<color name="color1">#61000000</color>',
         '<color name="color2">#61000000</color>'
     ]
     mock_input_api = MockInputApi()
     mock_input_api.files = [MockFile('chrome/path/colors.xml', lines)]
     errors = PRESUBMIT._CheckDuplicateColors(mock_input_api,
                                              MockOutputApi())
     self.assertEqual(1, len(errors))
     self.assertEqual(2, len(errors[0].items))
     self.assertEqual('  chrome/path/colors.xml:1',
                      errors[0].items[0].splitlines()[0])
     self.assertEqual('  chrome/path/colors.xml:2',
                      errors[0].items[1].splitlines()[0])
示例#57
0
 def testBlinkHeaders(self):
     mock_input_api = MockInputApi()
     mock_input_api.files = [
         MockAffectedFile('third_party/WebKit/header.h', [
             'class DummyClass;',
             'struct DummyStruct;',
         ]),
         MockAffectedFile('third_party\\WebKit\\header.h', [
             'class DummyClass;',
             'struct DummyStruct;',
         ])
     ]
     warnings = PRESUBMIT._CheckUselessForwardDeclarations(
         mock_input_api, MockOutputApi())
     self.assertEqual(4, len(warnings))
示例#58
0
 def testCheckChangeOnUploadWithEmptyAffectedFileList(self, _):
     """This verifies that CheckChangeOnUpload will skip calling
     check_blink_style.py if the affected file list is empty.
     """
     diff_file_layout_test_html = ['more diff']
     mock_input_api = MockInputApi()
     mock_input_api.files = [
         MockAffectedFile('LayoutTests/some_tests.html',
                          diff_file_layout_test_html)
     ]
     # Access to a protected member _CheckStyle
     # pylint: disable=W0212
     PRESUBMIT._CheckStyle(mock_input_api, MockOutputApi())
     # pylint: disable=E1101
     subprocess.Popen.assert_not_called()
示例#59
0
    def testCheckInternalHeaderWithBlinkMojo(self):
        """This verifies that _CheckForWrongMojomIncludes accepts -blink mojo
        headers in blink internal files.
        """

        mock_input_api = MockInputApi()
        potentially_bad_content = '#include "public/platform/modules/cache_storage.mojom-blink.h"'
        mock_input_api.files = [
            MockAffectedFile('third_party/blink/renderer/core/a_header.h',
                             [potentially_bad_content], None)
        ]
        # Access to a protected member _CheckForWrongMojomIncludes
        # pylint: disable=W0212
        errors = PRESUBMIT._CheckForWrongMojomIncludes(mock_input_api,
                                                       MockOutputApi())
        self.assertEquals([], errors)
 def testSingletonInArbitraryHeader(self):
   diff_singleton_h = ['base::subtle::AtomicWord '
                       'Singleton<Type, Traits, DifferentiatingType>::']
   diff_foo_h = ['// Singleton<Foo> in comment.',
                 'friend class Singleton<Foo>']
   diff_bad_h = ['Foo* foo = Singleton<Foo>::get();']
   mock_input_api = MockInputApi()
   mock_input_api.files = [MockAffectedFile('base/memory/singleton.h',
                                    diff_singleton_h),
                           MockAffectedFile('foo.h', diff_foo_h),
                           MockAffectedFile('bad.h', diff_bad_h)]
   warnings = PRESUBMIT._CheckSingletonInHeaders(mock_input_api,
                                                 MockOutputApi())
   self.assertEqual(1, len(warnings))
   self.assertEqual('error', warnings[0].type)
   self.assertTrue('Found Singleton<T>' in warnings[0].message)