blob: 18a0e62380cf8b17eca824b6c2135e4bcd536b0c [file] [log] [blame]
# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import unittest
from catapult_build import html_checks
class MockAffectedFile(object):
def __init__(self, path, lines):
self.path = path
self.lines = lines
def NewContents(self):
return (l for l in self.lines)
def LocalPath(self):
return self.path
class MockInputApi(object):
def __init__(self, affected_files):
self.affected_files = affected_files
def AffectedFiles(self, file_filter=None, **_):
if file_filter:
return [f for f in self.affected_files if file_filter(f)]
return self.affected_files
class MockOutputApi(object):
def PresubmitError(self, error_text):
return error_text
class HtmlChecksTest(unittest.TestCase):
def testRunChecksShowsErrorForWrongDoctype(self):
f = MockAffectedFile('foo/x.html', ['<!DOCTYPE XHTML1.0>'])
errors = html_checks.RunChecks(MockInputApi([f]), MockOutputApi())
self.assertEqual(1, len(errors))
def testRunChecksReturnsErrorForEmptyFile(self):
f = MockAffectedFile('foo/x.html', [])
errors = html_checks.RunChecks(MockInputApi([f]), MockOutputApi())
self.assertEqual(1, len(errors))
def testRunChecksNoErrorsForFileWithCorrectDocstring(self):
f = MockAffectedFile('foo/x.html', ['<!DOCTYPE html> '])
errors = html_checks.RunChecks(MockInputApi([f]), MockOutputApi())
self.assertEqual([], errors)
def testRunChecksAcceptsDifferentCapitalization(self):
f = MockAffectedFile('foo/x.html', ['<!doctype HtMl> '])
errors = html_checks.RunChecks(MockInputApi([f]), MockOutputApi())
self.assertEqual([], errors)
def testRunChecksAcceptsCommentsBeforeDoctype(self):
f = MockAffectedFile('foo/x.html', ['<!-- asdf -->\n<!doctype html> '])
errors = html_checks.RunChecks(MockInputApi([f]), MockOutputApi())
self.assertEqual([], errors)
def testRunChecksSkipsFilesInExcludedPaths(self):
f = MockAffectedFile('foo/x.html', ['<!DOCTYPE html XHTML1.0>'])
errors = html_checks.RunChecks(
MockInputApi([f]), MockOutputApi(), excluded_paths=['^foo/.*'])
self.assertEqual([], errors)
def testRunChecksSkipsNonHtmlFiles(self):
f = MockAffectedFile('foo/bar.py', ['#!/usr/bin/python', 'print 10'])
errors = html_checks.RunChecks(MockInputApi([f]), MockOutputApi())
self.assertEqual([], errors)
def testRunChecksShowsErrorForOutOfOrderImports(self):
f = MockAffectedFile('foo/x.html', [
'<!DOCTYPE html>',
'<link rel="import" href="b.html">',
'<link rel="import" href="a.html">',
])
errors = html_checks.RunChecks(MockInputApi([f]), MockOutputApi())
self.assertEqual(1, len(errors))
def testRunChecksSkipsSuppressedOutOfOrderImports(self):
f = MockAffectedFile('foo/x.html', [
'<!DOCTYPE html>',
'<link rel="import" href="b.html" data-suppress-import-order>',
'<link rel="import" href="a.html">',
])
errors = html_checks.RunChecks(MockInputApi([f]), MockOutputApi())
self.assertEqual([], errors)