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 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])
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))
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))
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))
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')
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))
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))
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()
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)
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))
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 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))
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))
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)
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))
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)
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))
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])
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])
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 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))
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 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 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 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 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 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))
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 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))
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)
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))
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])
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])
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])
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 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)
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)
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))))
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])
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 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))
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))
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())
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])
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))
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)
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))
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))
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])
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])
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))
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()
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)