test.py revision 6423cf5ef0ddf82722a6ed77ad3908fc8802d8cf
12c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil# Copyright (C) 2014 The Android Open Source Project 22c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil# 32c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil# Licensed under the Apache License, Version 2.0 (the "License"); 42c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil# you may not use this file except in compliance with the License. 52c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil# You may obtain a copy of the License at 62c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil# 72c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil# http://www.apache.org/licenses/LICENSE-2.0 82c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil# 92c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil# Unless required by applicable law or agreed to in writing, software 102c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil# distributed under the License is distributed on an "AS IS" BASIS, 112c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 122c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil# See the License for the specific language governing permissions and 132c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil# limitations under the License. 142c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 15c4de9436bbfe3a9c9adf48085b9344ad9a37c14bDavid Brazdilfrom common.immutables import ImmutableDict 162c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdilfrom common.testing import ToUnicode 172c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdilfrom file_format.c1visualizer.parser import ParseC1visualizerStream 182c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdilfrom file_format.c1visualizer.struct import C1visualizerFile, C1visualizerPass 192c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdilfrom file_format.checker.parser import ParseCheckerStream, ParseCheckerAssertion 202c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdilfrom file_format.checker.struct import CheckerFile, TestCase, TestAssertion, RegexExpression 216423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdilfrom match.file import MatchTestCase, MatchFailedException 222c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdilfrom match.line import MatchLines 232c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 242c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdilimport io 252c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdilimport unittest 262c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 272c27f2ccf316aebf96cf365d33d2834a8206444dDavid BrazdilCheckerException = SystemExit 282c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 292c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdilclass MatchLines_Test(unittest.TestCase): 302c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 312c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def createTestAssertion(self, checkerString): 322c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil checkerFile = CheckerFile("<checker-file>") 332c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil testCase = TestCase(checkerFile, "TestMethod TestPass", 0) 342c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil return ParseCheckerAssertion(testCase, checkerString, TestAssertion.Variant.InOrder, 0) 352c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 362c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def tryMatch(self, checkerString, c1String, varState={}): 37c4de9436bbfe3a9c9adf48085b9344ad9a37c14bDavid Brazdil return MatchLines(self.createTestAssertion(checkerString), 38c4de9436bbfe3a9c9adf48085b9344ad9a37c14bDavid Brazdil ToUnicode(c1String), 39c4de9436bbfe3a9c9adf48085b9344ad9a37c14bDavid Brazdil ImmutableDict(varState)) 402c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 416423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil def assertMatches(self, checkerString, c1String, varState={}): 426423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertIsNotNone(self.tryMatch(checkerString, c1String, varState)) 436423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil 446423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil def assertDoesNotMatch(self, checkerString, c1String, varState={}): 456423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertIsNone(self.tryMatch(checkerString, c1String, varState)) 462c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 472c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def test_TextAndWhitespace(self): 486423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches("foo", "foo") 496423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches("foo", " foo ") 506423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches("foo", "foo bar") 516423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertDoesNotMatch("foo", "XfooX") 526423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertDoesNotMatch("foo", "zoo") 532c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 546423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches("foo bar", "foo bar") 556423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches("foo bar", "abc foo bar def") 566423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches("foo bar", "foo foo bar bar") 572c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 586423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches("foo bar", "foo X bar") 596423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertDoesNotMatch("foo bar", "foo Xbar") 602c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 612c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def test_Pattern(self): 626423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches("foo{{A|B}}bar", "fooAbar") 636423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches("foo{{A|B}}bar", "fooBbar") 646423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertDoesNotMatch("foo{{A|B}}bar", "fooCbar") 652c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 662c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def test_VariableReference(self): 676423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches("foo<<X>>bar", "foobar", {"X": ""}) 686423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches("foo<<X>>bar", "fooAbar", {"X": "A"}) 696423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches("foo<<X>>bar", "fooBbar", {"X": "B"}) 706423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertDoesNotMatch("foo<<X>>bar", "foobar", {"X": "A"}) 716423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertDoesNotMatch("foo<<X>>bar", "foo bar", {"X": "A"}) 722c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil with self.assertRaises(CheckerException): 736423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.tryMatch("foo<<X>>bar", "foobar", {}) 742c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 752c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def test_VariableDefinition(self): 766423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches("foo<<X:A|B>>bar", "fooAbar") 776423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches("foo<<X:A|B>>bar", "fooBbar") 786423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertDoesNotMatch("foo<<X:A|B>>bar", "fooCbar") 792c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 80c2c48ffdd623b4e58b34115d1521b0988a42b217David Brazdil env = self.tryMatch("foo<<X:A.*B>>bar", "fooABbar", {}) 812c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil self.assertEqual(env, {"X": "AB"}) 82c2c48ffdd623b4e58b34115d1521b0988a42b217David Brazdil env = self.tryMatch("foo<<X:A.*B>>bar", "fooAxxBbar", {}) 832c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil self.assertEqual(env, {"X": "AxxB"}) 842c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 856423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches("foo<<X:A|B>>bar<<X>>baz", "fooAbarAbaz") 866423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches("foo<<X:A|B>>bar<<X>>baz", "fooBbarBbaz") 876423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertDoesNotMatch("foo<<X:A|B>>bar<<X>>baz", "fooAbarBbaz") 882c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 892c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def test_NoVariableRedefinition(self): 902c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil with self.assertRaises(CheckerException): 916423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.tryMatch("<<X:...>><<X>><<X:...>><<X>>", "foofoobarbar") 922c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 932c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def test_EnvNotChangedOnPartialMatch(self): 942c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil env = {"Y": "foo"} 956423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertDoesNotMatch("<<X:A>>bar", "Abaz", env) 962c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil self.assertFalse("X" in env.keys()) 972c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 982c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def test_VariableContentEscaped(self): 996423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches("<<X:..>>foo<<X>>", ".*foo.*") 1006423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertDoesNotMatch("<<X:..>>foo<<X>>", ".*fooAAAA") 1012c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 1022c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 1032c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdilclass MatchFiles_Test(unittest.TestCase): 1042c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 1056423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil def assertMatches(self, checkerString, c1String): 1062c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil checkerString = \ 1072c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 1082c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK-START: MyMethod MyPass 1092c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ + checkerString 1102c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil c1String = \ 1112c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 1122c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil begin_compilation 1132c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil name "MyMethod" 1142c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil method "MyMethod" 1152c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil date 1234 1162c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil end_compilation 1172c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil begin_cfg 1182c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil name "MyPass" 1192c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ + c1String + \ 1202c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 1212c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil end_cfg 1222c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 1232c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil checkerFile = ParseCheckerStream("<test-file>", "CHECK", io.StringIO(ToUnicode(checkerString))) 1242c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil c1File = ParseC1visualizerStream("<c1-file>", io.StringIO(ToUnicode(c1String))) 1256423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil assert len(checkerFile.testCases) == 1 1266423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil assert len(c1File.passes) == 1 1276423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil MatchTestCase(checkerFile.testCases[0], c1File.passes[0]) 1286423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil 1296423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil def assertDoesNotMatch(self, checkerString, c1String): 1306423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil with self.assertRaises(MatchFailedException): 1316423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches(checkerString, c1String) 1322c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 1332c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def test_Text(self): 1346423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches("// CHECK: foo bar", "foo bar") 1356423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertDoesNotMatch("// CHECK: foo bar", "abc def") 1362c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 1372c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def test_Pattern(self): 1386423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches("// CHECK: abc {{de.}}", "abc de#") 1396423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertDoesNotMatch("// CHECK: abc {{de.}}", "abc d#f") 1402c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 1412c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def test_Variables(self): 1426423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches( 1432c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 144c2c48ffdd623b4e58b34115d1521b0988a42b217David Brazdil // CHECK: foo<<X:.>>bar 145c2c48ffdd623b4e58b34115d1521b0988a42b217David Brazdil // CHECK: abc<<X>>def 1462c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """, 1472c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 1484e9aac12cf5f88d565d0856a6f842f6c9280056dDavid Brazdil foo0bar 1494e9aac12cf5f88d565d0856a6f842f6c9280056dDavid Brazdil abc0def 1506423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil """) 1516423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches( 1522c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 153c2c48ffdd623b4e58b34115d1521b0988a42b217David Brazdil // CHECK: foo<<X:([0-9]+)>>bar 154c2c48ffdd623b4e58b34115d1521b0988a42b217David Brazdil // CHECK: abc<<X>>def 155c2c48ffdd623b4e58b34115d1521b0988a42b217David Brazdil // CHECK: ### <<X>> ### 1562c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """, 1572c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 1582c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil foo1234bar 1592c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil abc1234def 1602c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil ### 1234 ### 1616423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil """) 1626423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertDoesNotMatch( 1632c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 164c2c48ffdd623b4e58b34115d1521b0988a42b217David Brazdil // CHECK: foo<<X:([0-9]+)>>bar 165c2c48ffdd623b4e58b34115d1521b0988a42b217David Brazdil // CHECK: abc<<X>>def 1662c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """, 1672c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 1682c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil foo1234bar 1692c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil abc1235def 1706423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil """) 1712c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 1724e9aac12cf5f88d565d0856a6f842f6c9280056dDavid Brazdil def test_WholeWordMustMatch(self): 1736423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches("// CHECK: b{{.}}r", "abc bar def") 1746423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertDoesNotMatch("// CHECK: b{{.}}r", "abc Xbar def") 1756423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertDoesNotMatch("// CHECK: b{{.}}r", "abc barX def") 1766423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertDoesNotMatch("// CHECK: b{{.}}r", "abc b r def") 1774e9aac12cf5f88d565d0856a6f842f6c9280056dDavid Brazdil 1782c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def test_InOrderAssertions(self): 1796423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches( 1802c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 1812c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK: foo 1822c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK: bar 1832c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """, 1842c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 1852c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil foo 1862c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil bar 1876423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil """) 1886423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertDoesNotMatch( 1892c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 1902c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK: foo 1912c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK: bar 1922c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """, 1932c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 1942c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil bar 1952c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil foo 1966423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil """) 1972c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 1982c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def test_DagAssertions(self): 1996423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches( 2002c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 2012c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK-DAG: foo 2022c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK-DAG: bar 2032c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """, 2042c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 2052c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil foo 2062c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil bar 2076423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil """) 2086423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches( 2092c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 2102c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK-DAG: foo 2112c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK-DAG: bar 2122c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """, 2132c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 2142c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil bar 2152c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil foo 2166423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil """) 2172c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 2182c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def test_DagAssertionsScope(self): 2196423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches( 2202c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 2212c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK: foo 2222c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK-DAG: abc 2232c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK-DAG: def 2242c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK: bar 2252c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """, 2262c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 2272c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil foo 2282c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def 2292c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil abc 2302c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil bar 2316423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil """) 2326423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertDoesNotMatch( 2332c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 2342c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK: foo 2352c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK-DAG: abc 2362c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK-DAG: def 2372c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK: bar 2382c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """, 2392c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 2402c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil foo 2412c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil abc 2422c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil bar 2432c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def 2446423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil """) 2456423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertDoesNotMatch( 2462c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 2472c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK: foo 2482c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK-DAG: abc 2492c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK-DAG: def 2502c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK: bar 2512c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """, 2522c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 2532c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil foo 2542c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def 2552c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil bar 2562c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil abc 2576423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil """) 2582c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 2592c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def test_NotAssertions(self): 2606423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches( 2612c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 2622c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK-NOT: foo 2632c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """, 2642c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 2652c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil abc 2662c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def 2676423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil """) 2686423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertDoesNotMatch( 2692c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 2702c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK-NOT: foo 2712c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """, 2722c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 2732c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil abc foo 2742c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def 2756423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil """) 2766423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertDoesNotMatch( 2772c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 2782c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK-NOT: foo 2792c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK-NOT: bar 2802c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """, 2812c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 2822c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil abc 2832c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def bar 2846423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil """) 2852c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 2862c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def test_NotAssertionsScope(self): 2876423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches( 2882c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 2892c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK: abc 2902c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK-NOT: foo 2912c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK: def 2922c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """, 2932c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 2942c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil abc 2952c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def 2966423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil """) 2976423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches( 2982c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 2992c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK: abc 3002c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK-NOT: foo 3012c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK: def 3022c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """, 3032c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 3042c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil abc 3052c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def 3062c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil foo 3076423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil """) 3086423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertDoesNotMatch( 3092c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 3102c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK: abc 3112c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK-NOT: foo 3122c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK: def 3132c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """, 3142c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 3152c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil abc 3162c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil foo 3172c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def 3186423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil """) 3192c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 3202c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def test_LineOnlyMatchesOnce(self): 3216423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches( 3222c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 3232c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK-DAG: foo 3242c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK-DAG: foo 3252c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """, 3262c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 3272c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil foo 3282c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil abc 3292c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil foo 3306423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil """) 3316423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertDoesNotMatch( 3322c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 3332c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK-DAG: foo 3342c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil // CHECK-DAG: foo 3352c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """, 3362c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 3372c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil foo 3382c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil abc 3392c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil bar 3406423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil """) 341