Пример #1
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))
Пример #2
0
  def testUncheckableIncludes(self):
    mock_input_api = MockInputApi()
    contents = ['#include <windows.h>',
                '#include "b.h"',
                '#include "a.h"']
    mock_file = MockFile('', contents)
    warnings = PRESUBMIT._CheckIncludeOrderInFile(
        mock_input_api, mock_file, range(1, len(contents) + 1))
    self.assertEqual(1, len(warnings))

    contents = ['#include "gpu/command_buffer/gles_autogen.h"',
                '#include "b.h"',
                '#include "a.h"']
    mock_file = MockFile('', contents)
    warnings = PRESUBMIT._CheckIncludeOrderInFile(
        mock_input_api, mock_file, range(1, len(contents) + 1))
    self.assertEqual(1, len(warnings))

    contents = ['#include "gl_mock_autogen.h"',
                '#include "b.h"',
                '#include "a.h"']
    mock_file = MockFile('', contents)
    warnings = PRESUBMIT._CheckIncludeOrderInFile(
        mock_input_api, mock_file, range(1, len(contents) + 1))
    self.assertEqual(1, len(warnings))

    contents = ['#include "ipc/some_macros.h"',
                '#include "b.h"',
                '#include "a.h"']
    mock_file = MockFile('', contents)
    warnings = PRESUBMIT._CheckIncludeOrderInFile(
        mock_input_api, mock_file, range(1, len(contents) + 1))
    self.assertEqual(1, len(warnings))
 def testChangesMatch_LineIsSubstring(self):
   af = FakeAffectedFile(changed_contents=[(1, 'foo'), (2, 'bar')])
   af_plus = FakeAffectedFile(changed_contents=[(6, 'foo'), (9, '<b>bar</b>')])
   # The generated file (first arg) can have extra formatting.
   self.assertTrue(PRESUBMIT._ChangesMatch(af_plus, af))
   # But not the static file (second arg).
   self.assertFalse(PRESUBMIT._ChangesMatch(af, af_plus))
 def testChangesMatch_DifferentLength(self):
   af = FakeAffectedFile(changed_contents=[(14, 'bar'), (15, 'qxxy')])
   af_extra = FakeAffectedFile(changed_contents=[(1, 'foo'), (14, 'bar'),
                                                 (23, 'baz'), (25, 'qxxy')])
   # The generated file (first arg) may have extra lines.
   self.assertTrue(PRESUBMIT._ChangesMatch(af_extra, af))
   # But not the static file (second arg).
   self.assertFalse(PRESUBMIT._ChangesMatch(af, af_extra))
Пример #5
0
    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))
 def testChangesMatch_DuplicateLines(self):
   af = FakeAffectedFile(changed_contents=[(1, 'foo'), (2, 'bar')])
   af_dups = FakeAffectedFile(changed_contents=[(7, 'foo'), (8, 'foo'),
                                                (9, 'bar')])
   # Duplciate lines in the generated file (first arg) will be ignored
   # like extra lines.
   self.assertTrue(PRESUBMIT._ChangesMatch(af_dups, af))
   # Duplicate lines in static file (second arg) must each have a matching
   # line in the generated file.
   self.assertFalse(PRESUBMIT._ChangesMatch(af, af_dups))
 def testAlternateFilePath(self):
   path = os.path.normpath('foo/bar/baz.html')
   alt_dir = os.path.normpath('woop/dee/doo')
   self.assertPathsEqual('woop/dee/doo/baz.html',
                         PRESUBMIT._AlternateFilePath(path, alt_dir,
                                                      self.input_api))
   alt_dir = 'foo'
   self.assertPathsEqual('foo/baz.html',
                         PRESUBMIT._AlternateFilePath(path, alt_dir,
                                                      self.input_api))
   alt_dir = ''
   self.assertPathsEqual('baz.html',
                         PRESUBMIT._AlternateFilePath(path, alt_dir,
                                                      self.input_api))
Пример #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 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)
Пример #10
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')
Пример #11
0
  def testExcludedIncludes(self):
    # #include <sys/...>'s can appear in any order.
    mock_input_api = MockInputApi()
    contents = ['#include <sys/b.h>',
                '#include <sys/a.h>']
    mock_file = MockFile('', contents)
    warnings = PRESUBMIT._CheckIncludeOrderInFile(
        mock_input_api, mock_file, range(1, len(contents) + 1))
    self.assertEqual(0, len(warnings))

    contents = ['#include "build/build_config.h"',
                '#include "aaa.h"']
    mock_file = MockFile('', contents)
    warnings = PRESUBMIT._CheckIncludeOrderInFile(
        mock_input_api, mock_file, range(1, len(contents) + 1))
    self.assertEqual(0, len(warnings))
Пример #12
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))
Пример #13
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))
Пример #14
0
 def testExternalReferenceInEDKBuildFile(self):
   """Tests that an external path in an EDK buildfile is not flagged."""
   mock_input_api = self.inputApiContainingFileWithPaths(
       _EDK_BUILD_FILE,
       [ self.non_whitelisted_external_path, self.whitelisted_external_path ])
   warnings = PRESUBMIT._BuildFileChecks(mock_input_api, MockOutputApi())
   self.assertEqual(0, len(warnings))
Пример #15
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])
Пример #16
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))
Пример #17
0
 def testFilesToCheckForIncomingDeps(self):
   changed_lines = [
     '"+breakpad",',
     '"+chrome/installer",',
     '"+chrome/plugin/chrome_content_plugin_client.h",',
     '"+chrome/utility/chrome_content_utility_client.h",',
     '"+chromeos/chromeos_paths.h",',
     '"+components/crash",',
     '"+components/nacl/common",',
     '"+content/public/browser/render_process_host.h",',
     '"+jni/fooblat.h",',
     '"+grit",  # For generated headers',
     '"+grit/generated_resources.h",',
     '"+grit/",',
     '"+policy",  # For generated headers and source',
     '"+sandbox",',
     '"+tools/memory_watcher",',
     '"+third_party/lss/linux_syscall_support.h",',
   ]
   files_to_check = PRESUBMIT._FilesToCheckForIncomingDeps(re, changed_lines)
   expected = set([
     'breakpad/DEPS',
     'chrome/installer/DEPS',
     'chrome/plugin/chrome_content_plugin_client.h',
     'chrome/utility/chrome_content_utility_client.h',
     'chromeos/chromeos_paths.h',
     'components/crash/DEPS',
     'components/nacl/common/DEPS',
     'content/public/browser/render_process_host.h',
     'policy/DEPS',
     'sandbox/DEPS',
     'tools/memory_watcher/DEPS',
     'third_party/lss/linux_syscall_support.h',
   ])
   self.assertEqual(expected, files_to_check);
Пример #18
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))
Пример #19
0
 def calculate(self, old_include_rules, old_specific_include_rules,
               new_include_rules, new_specific_include_rules):
   return PRESUBMIT._CalculateAddedDeps(
       os.path, 'include_rules = %r\nspecific_include_rules = %r' % (
           old_include_rules, old_specific_include_rules),
       'include_rules = %r\nspecific_include_rules = %r' % (
           new_include_rules, new_specific_include_rules))
Пример #20
0
 def testSystemHeaderOrderMismatch2(self):
     scope = [(10, "#include <cppsystem>"), (20, '#include "acustom.h"'), (30, "#include <csystem.h>")]
     all_linenums = [linenum for (linenum, _) in scope]
     mock_input_api = MockInputApi()
     warnings = PRESUBMIT._CheckIncludeOrderForScope(scope, mock_input_api, "", all_linenums)
     self.assertEqual(1, len(warnings))
     self.assertTrue("30" in warnings[0])
Пример #21
0
 def testSpecialFirstInclude4(self):
     mock_input_api = MockInputApi()
     contents = ['#include "some/path/bar.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(1, len(warnings))
     self.assertTrue("2" in warnings[0])
Пример #22
0
 def testIrrelevantBuildFile(self):
   """Tests that a source_set in a non-SDK/EDK buildfile isn't flagged."""
   mock_input_api = self.inputApiContainingFileWithSourceSets(
       _IRRELEVANT_BUILD_FILE,
       [ 'source_set(' ])
   warnings = PRESUBMIT._BuildFileChecks(mock_input_api, MockOutputApi())
   self.assertEqual(0, len(warnings))
Пример #23
0
 def testChangesMatch_SkipEmptyLinesInStaticFile(self):
   generated_file = FakeAffectedFile(changed_contents=[(1, 'foo'),
                                                       (14, 'bar')])
   static_file = FakeAffectedFile(changed_contents=[(1, 'foo'),
                                                    (2, ''),
                                                    (14, 'bar')])
   self.assertTrue(PRESUBMIT._ChangesMatch(generated_file, static_file))
Пример #24
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))
Пример #25
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))
Пример #26
0
 def testOrderAlreadyWrong(self):
   scope = [(1, '#include "b.h"'),
            (2, '#include "a.h"'),
            (3, '#include "c.h"')]
   mock_input_api = MockInputApi()
   warnings = PRESUBMIT._CheckIncludeOrderForScope(scope, mock_input_api,
                                                   '', [3])
   self.assertEqual(0, len(warnings))
Пример #27
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))
Пример #28
0
 def testChromeDoesNotUseOSIOS(self):
   lines = ['#if defined(OS_IOS)',
            '#error OS_IOS not allowed',
            '#endif']
   errors = PRESUBMIT._CheckNoOSIOSMacrosInChromeFile(
       MockInputApi(), MockFile('chrome/path/foo_platform.cc', lines))
   self.assertEqual(1, len(errors))
   self.assertEqual('    chrome/path/foo_platform.cc:1', errors[0])
Пример #29
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()))
Пример #30
0
 def testSpecialFirstInclude2(self):
   mock_input_api = MockInputApi()
   contents = ['#include "some/other/path/foo.h"',
               '#include "a/header.h"']
   mock_file = MockFile('some/path/foo.cc', contents)
   warnings = PRESUBMIT._CheckIncludeOrderInFile(
       mock_input_api, mock_file, range(1, len(contents) + 1))
   self.assertEqual(0, len(warnings))
Пример #31
0
 def testTryServerMasters(self):
     bots = {
         'master.tryserver.chromium.android': [
             'android_archive_rel_ng',
             'android_arm64_dbg_recipe',
             'android_blink_rel',
             'android_chromium_variable',
             'android_chromium_variable_archive',
             'android_chromium_variable_arm64',
             'android_chromium_variable_cast_shell',
             'android_chromium_variable_clang',
             'android_chromium_variable_gn',
             'android_chromium_variable_nexus4',
             'android_clang_dbg_recipe',
             'android_compile_dbg',
             'android_compile_mips_dbg',
             'android_compile_x64_dbg',
             'android_compile_x86_dbg',
             'android_coverage',
             'android_cronet_tester'
             'android_swarming_rel',
             'cast_shell_android',
             'linux_android_dbg_ng',
             'linux_android_rel_ng',
         ],
         'master.tryserver.chromium.mac': [
             'ios_dbg_simulator',
             'ios_rel_device',
             'ios_rel_device_ninja',
             'mac_asan',
             'mac_asan_64',
             'mac_chromium_compile_dbg',
             'mac_chromium_compile_rel',
             'mac_chromium_dbg',
             'mac_chromium_rel',
             'mac_nacl_sdk',
             'mac_nacl_sdk_build',
             'mac_rel_naclmore',
             'mac_x64_rel',
             'mac_xcodebuild',
         ],
         'master.tryserver.chromium.linux': [
             'chromium_presubmit',
             'linux_arm_cross_compile',
             'linux_arm_tester',
             'linux_chromeos_asan',
             'linux_chromeos_browser_asan',
             'linux_chromeos_valgrind',
             'linux_chromium_chromeos_dbg',
             'linux_chromium_chromeos_rel',
             'linux_chromium_compile_dbg',
             'linux_chromium_compile_rel',
             'linux_chromium_dbg',
             'linux_chromium_gn_dbg',
             'linux_chromium_gn_rel',
             'linux_chromium_rel',
             'linux_chromium_trusty32_dbg',
             'linux_chromium_trusty32_rel',
             'linux_chromium_trusty_dbg',
             'linux_chromium_trusty_rel',
             'linux_clang_tsan',
             'linux_ecs_ozone',
             'linux_layout',
             'linux_layout_asan',
             'linux_layout_rel',
             'linux_layout_rel_32',
             'linux_nacl_sdk',
             'linux_nacl_sdk_bionic',
             'linux_nacl_sdk_bionic_build',
             'linux_nacl_sdk_build',
             'linux_redux',
             'linux_rel_naclmore',
             'linux_rel_precise32',
             'linux_valgrind',
             'tools_build_presubmit',
         ],
         'master.tryserver.chromium.win': [
             'win8_aura',
             'win8_chromium_dbg',
             'win8_chromium_rel',
             'win_chromium_compile_dbg',
             'win_chromium_compile_rel',
             'win_chromium_dbg',
             'win_chromium_rel',
             'win_chromium_rel',
             'win_chromium_x64_dbg',
             'win_chromium_x64_rel',
             'win_nacl_sdk',
             'win_nacl_sdk_build',
             'win_rel_naclmore',
         ],
     }
     for master, bots in bots.iteritems():
         for bot in bots:
             self.assertEqual(
                 master, PRESUBMIT.GetTryServerMasterForBot(bot),
                 'bot=%s: expected %s, computed %s' %
                 (bot, master, PRESUBMIT.GetTryServerMasterForBot(bot)))
Пример #32
0
 def testValidOSMacroNames(self):
   lines = ['#if defined(%s)' % m for m in PRESUBMIT._VALID_OS_MACROS]
   errors = PRESUBMIT._CheckForInvalidOSMacrosInFile(
       MockInputApi(), MockFile('some/path/foo_platform.cc', lines))
   self.assertEqual(0, len(errors))
Пример #33
0
    def testCheckAndroidCrLogUsage(self):
        mock_input_api = MockInputApi()
        mock_output_api = MockOutputApi()

        mock_input_api.files = [
            MockAffectedFile('RandomStuff.java', ['random stuff']),
            MockAffectedFile('HasAndroidLog.java', [
                'import android.util.Log;',
                'some random stuff',
                'Log.d("TAG", "foo");',
            ]),
            MockAffectedFile('HasExplicitUtilLog.java', [
                'some random stuff',
                'android.util.Log.d("TAG", "foo");',
            ]),
            MockAffectedFile('IsInBasePackage.java', [
                'package org.chromium.base;',
                'private static final String TAG = "cr_Foo";',
                'Log.d(TAG, "foo");',
            ]),
            MockAffectedFile('IsInBasePackageButImportsLog.java', [
                'package org.chromium.base;',
                'import android.util.Log;',
                'private static final String TAG = "cr_Foo";',
                'Log.d(TAG, "foo");',
            ]),
            MockAffectedFile('HasBothLog.java', [
                'import org.chromium.base.Log;',
                'some random stuff',
                'private static final String TAG = "cr_Foo";',
                'Log.d(TAG, "foo");',
                'android.util.Log.d("TAG", "foo");',
            ]),
            MockAffectedFile('HasCorrectTag.java', [
                'import org.chromium.base.Log;',
                'some random stuff',
                'private static final String TAG = "cr_Foo";',
                'Log.d(TAG, "foo");',
            ]),
            MockAffectedFile('HasOldTag.java', [
                'import org.chromium.base.Log;',
                'some random stuff',
                'private static final String TAG = "cr.Foo";',
                'Log.d(TAG, "foo");',
            ]),
            MockAffectedFile('HasDottedTag.java', [
                'import org.chromium.base.Log;',
                'some random stuff',
                'private static final String TAG = "cr_foo.bar";',
                'Log.d(TAG, "foo");',
            ]),
            MockAffectedFile('HasNoTagDecl.java', [
                'import org.chromium.base.Log;',
                'some random stuff',
                'Log.d(TAG, "foo");',
            ]),
            MockAffectedFile('HasIncorrectTagDecl.java', [
                'import org.chromium.base.Log;',
                'private static final String TAHG = "cr_Foo";',
                'some random stuff',
                'Log.d(TAG, "foo");',
            ]),
            MockAffectedFile('HasInlineTag.java', [
                'import org.chromium.base.Log;',
                'some random stuff',
                'private static final String TAG = "cr_Foo";',
                'Log.d("TAG", "foo");',
            ]),
            MockAffectedFile('HasUnprefixedTag.java', [
                'import org.chromium.base.Log;',
                'some random stuff',
                'private static final String TAG = "rubbish";',
                'Log.d(TAG, "foo");',
            ]),
            MockAffectedFile('HasTooLongTag.java', [
                'import org.chromium.base.Log;',
                'some random stuff',
                'private static final String TAG = "21_charachers_long___";',
                'Log.d(TAG, "foo");',
            ]),
        ]

        msgs = PRESUBMIT._CheckAndroidCrLogUsage(mock_input_api,
                                                 mock_output_api)

        self.assertEqual(
            5, len(msgs),
            'Expected %d items, found %d: %s' % (5, len(msgs), msgs))

        # Declaration format
        nb = len(msgs[0].items)
        self.assertEqual(
            2, nb, 'Expected %d items, found %d: %s' % (2, nb, msgs[0].items))
        self.assertTrue('HasNoTagDecl.java' in msgs[0].items)
        self.assertTrue('HasIncorrectTagDecl.java' in msgs[0].items)

        # Tag length
        nb = len(msgs[1].items)
        self.assertEqual(
            1, nb, 'Expected %d items, found %d: %s' % (1, nb, msgs[1].items))
        self.assertTrue('HasTooLongTag.java' in msgs[1].items)

        # Tag must be a variable named TAG
        nb = len(msgs[2].items)
        self.assertEqual(
            1, nb, 'Expected %d items, found %d: %s' % (1, nb, msgs[2].items))
        self.assertTrue('HasInlineTag.java:4' in msgs[2].items)

        # Util Log usage
        nb = len(msgs[3].items)
        self.assertEqual(
            2, nb, 'Expected %d items, found %d: %s' % (2, nb, msgs[3].items))
        self.assertTrue('HasAndroidLog.java:3' in msgs[3].items)
        self.assertTrue('IsInBasePackageButImportsLog.java:4' in msgs[3].items)

        # Tag must not contain
        nb = len(msgs[4].items)
        self.assertEqual(
            2, nb, 'Expected %d items, found %d: %s' % (2, nb, msgs[4].items))
        self.assertTrue('HasDottedTag.java' in msgs[4].items)
        self.assertTrue('HasOldTag.java' in msgs[4].items)
Пример #34
0
 def _RunCheck(self):
     return PRESUBMIT._CheckPydepsNeedsUpdating(
         self.mock_input_api,
         self.mock_output_api,
         checker_for_tests=self.checker)