| # 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() |