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))
def _testChange(self, modeltype_literal): mock_input_api = MockInputApi() mock_input_api.files = [ MockFile(os.path.abspath('./protocol/sync.proto'), MOCK_PROTOFILE_CONTENTS), MockFile(os.path.abspath('./base/model_type.cc'), MOCK_MODELTYPE_CONTENTS % (modeltype_literal)) ] return PRESUBMIT.CheckChangeOnCommit(mock_input_api, MockOutputApi())
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))
def testSubStrings(self): mock_input_api = MockInputApi() mock_input_api.files = [ MockAffectedFile('somewhere/header.h', [ 'class NotUsefulClass;', 'struct SomeStruct;', 'UsefulClass *p1;', 'SomeStructPtr *p2;' ]) ] warnings = PRESUBMIT._CheckUselessForwardDeclarations( mock_input_api, MockOutputApi()) self.assertEqual(2, len(warnings))
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')
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))
def _testAbsoluteSDKReferenceInPackage(self, package): """Tests that an absolute SDK path within |package| is flagged.""" buildfile = _PACKAGE_BUILDFILES[package] mock_input_api = self.inputApiContainingFileWithPaths( buildfile, [self.sdk_relative_path, self.sdk_absolute_path]) warnings = PRESUBMIT._BuildFileChecks(mock_input_api, MockOutputApi()) self.assertEqual(1, len(warnings)) self.checkSDKAbsolutePathWarningWithSingleItem(warnings[0], package, buildfile, 2, self.sdk_absolute_path)
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))
def testAbsoluteEDKReferenceInEDKBuildFile(self): """Tests that an absolute EDK path in an EDK buildfile is flagged.""" mock_input_api = self.inputApiContainingFileWithPaths( _EDK_BUILD_FILE, [self.edk_absolute_path, self.edk_relative_path]) warnings = PRESUBMIT._BuildFileChecks(mock_input_api, MockOutputApi()) self.assertEqual(1, len(warnings)) expected_message = PRESUBMIT._ILLEGAL_EDK_ABSOLUTE_PATH_WARNING_MESSAGE self.checkWarningWithSingleItem(warnings[0], expected_message, _EDK_BUILD_FILE, 1, self.edk_absolute_path)
def testIrrelevantBuildFile(self): """Tests that nothing is flagged in a non SDK/EDK buildfile.""" mock_input_api = self.inputApiContainingFileWithPaths( _IRRELEVANT_BUILD_FILE, [ self.sdk_absolute_path, self.sdk_relative_path, self.edk_absolute_path, self.edk_relative_path, self.non_whitelisted_external_path, self.whitelisted_external_path ]) warnings = PRESUBMIT._BuildFileChecks(mock_input_api, MockOutputApi()) self.assertEqual(0, len(warnings))
def testInvalidReference(self): lines = ['<TextView', 'android:textColor="#FFFFFF" />'] 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(1, len(errors)) self.assertEqual(1, len(errors[0].items)) self.assertEqual(' chrome/java/res_test/test.xml:2', errors[0].items[0].splitlines()[0])
def testConstLetWarningIos9Code(self): mock_input_api = MockInputApi() mock_output_api = MockOutputApi() mock_input_api.files = [ MockAffectedFile('components/blah.js', [" const foo = 'bar';"]), MockAffectedFile('ui/webui/resources/blah.js', [" let foo = 3;"]), ] warnings = PRESUBMIT._CheckForRiskyJsFeatures(mock_input_api, mock_output_api) self.assertEqual(2, len(warnings))
def testUselessForwardDeclaration(self): mock_input_api = MockInputApi() mock_input_api.files = [ MockAffectedFile('somewhere/header.h', [ 'class DummyClass;', 'struct DummyStruct;', 'class UsefulClass;', 'std::unique_ptr<UsefulClass> p;' ]) ] warnings = PRESUBMIT._CheckUselessForwardDeclarations( mock_input_api, MockOutputApi()) self.assertEqual(2, len(warnings))
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))
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])
def _runChecks(self, file_contents): tmp_args = {'suffix': '.js', '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), '')] input_api.presubmit_local_path = _HERE_PATH checker = js_checker.JSChecker(input_api, MockOutputApi()) return checker.RunEsLintChecks(input_api.AffectedFiles(), format='json')
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/path/test.xml', lines)] errors = PRESUBMIT._CheckNewTextAppearance(mock_input_api, MockOutputApi()) self.assertEqual(0, len(errors))
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))
def setUp(self): mock_all_pydeps = ['A.pydeps', 'B.pydeps'] self.old_ALL_PYDEPS_FILES = PRESUBMIT._ALL_PYDEPS_FILES PRESUBMIT._ALL_PYDEPS_FILES = mock_all_pydeps self.mock_input_api = MockInputApi() self.mock_output_api = MockOutputApi() self.mock_input_api.subprocess = PydepsNeedsUpdatingTest.MockSubprocess() self.checker = PRESUBMIT.PydepsChecker(self.mock_input_api, mock_all_pydeps) self.checker._file_cache = { 'A.pydeps': '# Generated by:\n# CMD A\nA.py\nC.py\n', 'B.pydeps': '# Generated by:\n# CMD B\nB.py\nC.py\n', }
def testAddFileSameNameWithinResDirectory(self): # Files within a res/ directory can have same file name. MOCK_FILE_SYSTEM_FILES = ['shell_apk/res/values/colors.xml', 'libs/common/res_splash/values/dimens.xml'] input_api = CustomMockInputApi() input_api.os_walk = MockOsWalkFileSystem(MOCK_FILE_SYSTEM_FILES).walk input_api.files = input_api.makeMockAffectedFiles([ 'shell_apk/res/values-v22/values.xml']) errors = PRESUBMIT._CheckNoOverlappingFileNamesInResourceDirsRule( input_api, MockOutputApi()) self.assertEqual(0, len(errors))
def testInnocuousChangesAllowed(self): mock_input_api = MockInputApi() mock_input_api.files = [ MockAffectedFile('test.cpp', '#include "header.h"'), MockAffectedFile('test2.cpp', '../'), ] mock_output_api = MockOutputApi() errors = PRESUBMIT._CheckForRelativeIncludes(mock_input_api, mock_output_api) self.assertEqual(0, len(errors))
def testSemanticColors(self): mock_input_api = MockInputApi() mock_input_api.files = [ MockAffectedFile('chrome/test.html', [ 'color: var(--cros-icon-color-prominent);', ]), ] mock_output_api = MockOutputApi() errors = SemanticCssChecker.RunChecks(mock_input_api, mock_output_api) self.assertEqual(0, len(errors))
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))
def testSucess(self): lines = [ '<color name="color1">#61000000</color>', '<color name="color1">#FFFFFF</color>' ] mock_input_api = MockInputApi() mock_input_api.files = [ MockFile('chrome/java/res_test/colors.xml', lines) ] errors = checkxmlstyle._CheckDuplicateColors(mock_input_api, MockOutputApi()) self.assertEqual(0, len(errors))
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 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()))
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])
def testBadOrigFile(self): mock_input_api = MockInputApi() mock_input_api.files = [ MockFile('other/path/qux.h.orig', ''), MockFile('other/path/qux.h', ''), MockFile('other/path/qux.cc', ''), ] results = PRESUBMIT._CheckPatchFiles(mock_input_api, MockOutputApi()) self.assertEqual(1, len(results)) self.assertEqual(1, len(results[0].items)) self.assertTrue('qux.h.orig' in results[0].items[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')
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])