blob: eb3881bcfa70d5629715a09f3102d27a4c0cbcc6 [file] [log] [blame]
# Copyright 2018 The Bazel Authors. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import unittest
from src.test.py.bazel import test_base
class TestRulesTest(test_base.TestBase):
def _FailWithOutput(self, output):
self.fail('FAIL:\n | %s\n---' % '\n | '.join(output))
def _AssertPasses(self, target):
exit_code, stdout, stderr = self.RunBazel(
['test', target, '--test_output=errors'])
if exit_code != 0:
self._FailWithOutput(stdout + stderr)
def _AssertFails(self, target):
exit_code, stdout, stderr = self.RunBazel(['test', target])
if exit_code == 0:
self._FailWithOutput(stdout + stderr)
def testContent(self):
self.ScratchFile('WORKSPACE')
self.CopyFile(
self.Rlocation('io_bazel/tools/build_rules/test_rules.bzl'),
'foo/test_rules.bzl')
self.CopyFile(
self.Rlocation('io_bazel/tools/build_rules/test_rules_private.bzl'),
'foo/test_rules_private.bzl')
self.ScratchFile('foo/tested_file.txt',
['The quick brown', 'fox jumps over', 'the lazy dog.'])
self.ScratchFile('foo/BUILD', [
'load(":test_rules.bzl", "file_test")',
'',
'file_test(',
' name = "pos",',
' content = "The quick brown\\nfox jumps over\\nthe lazy dog.\\n",',
' file = "tested_file.txt",',
')',
'',
'file_test(',
' name = "neg",',
' content = "quick",',
' file = "tested_file.txt",',
')',
])
self._AssertPasses('//foo:pos')
self._AssertFails('//foo:neg')
def testRegexpWithoutMatches(self):
self.ScratchFile('WORKSPACE')
self.CopyFile(
self.Rlocation('io_bazel/tools/build_rules/test_rules.bzl'),
'foo/test_rules.bzl')
self.ScratchFile('foo/tested_file.txt',
['The quick brown', 'fox jumps over', 'the lazy dog.'])
self.ScratchFile('foo/BUILD', [
'load(":test_rules.bzl", "file_test")',
'',
'file_test(',
' name = "pos",',
' file = "tested_file.txt",',
' regexp = "o[vwx]",',
')',
'',
'file_test(',
' name = "neg",',
' file = "tested_file.txt",',
' regexp = "o[abc]",',
')',
])
self._AssertPasses('//foo:pos')
self._AssertFails('//foo:neg')
def testRegexpWithMatches(self):
self.ScratchFile('WORKSPACE')
self.CopyFile(
self.Rlocation('io_bazel/tools/build_rules/test_rules.bzl'),
'foo/test_rules.bzl')
self.ScratchFile('foo/tested_file.txt',
['The quick brown', 'fox jumps over', 'the lazy dog.'])
self.ScratchFile(
'foo/BUILD',
[
'load(":test_rules.bzl", "file_test")',
'',
'file_test(',
' name = "pos",',
' file = "tested_file.txt",',
# grep -c returns the number of matching lines, not the number of
# matches
' matches = 2,',
' regexp = "o[vwx]",',
')',
'',
'file_test(',
' name = "neg",',
' file = "tested_file.txt",',
' matches = 3,',
' regexp = "o[vwx]",',
')',
])
self._AssertPasses('//foo:pos')
self._AssertFails('//foo:neg')
def testBadArgs(self):
self.ScratchFile('WORKSPACE')
self.CopyFile(
self.Rlocation('io_bazel/tools/build_rules/test_rules.bzl'),
'foo/test_rules.bzl')
self.ScratchFile('foo/tested_file.txt',
['The quick brown', 'fox jumps over', 'the lazy dog.'])
self.ScratchFile('foo/BUILD', [
'load(":test_rules.bzl", "file_test")',
'',
'file_test(',
' name = "neither_content_nor_regex",',
' file = "tested_file.txt",',
')',
'',
'file_test(',
' name = "both_content_and_regex",',
' file = "tested_file.txt",',
' content = "x",',
' regexp = "x",',
')',
'',
'file_test(',
' name = "content_with_matches",',
' file = "tested_file.txt",',
' content = "hello",',
' matches = 1,',
')',
])
self._AssertFails('//foo:neither_content_nor_regex')
self._AssertFails('//foo:both_content_and_regex')
self._AssertFails('//foo:content_with_matches')
if __name__ == '__main__':
unittest.main()