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 20b34c35ee8fe1516118d1d172a5e05b263ccbd93dDavid Brazdilfrom file_format.checker.struct import CheckerFile, TestCase, TestAssertion 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 """ 108a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid 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): 134a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil self.assertMatches("/// CHECK: foo bar", "foo bar") 135a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil self.assertDoesNotMatch("/// CHECK: foo bar", "abc def") 1362c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 1372c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def test_Pattern(self): 138a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil self.assertMatches("/// CHECK: abc {{de.}}", "abc de#") 139a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil self.assertDoesNotMatch("/// CHECK: abc {{de.}}", "abc d#f") 1402c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 1412c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def test_Variables(self): 1426423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches( 1432c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 144a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK: foo<<X:.>>bar 145a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK: abc<<X>>def 1462c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """, 1472c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 1484e9aac12cf5f88d565d0856a6f842f6c9280056dDavid Brazdil foo0bar 1494e9aac12cf5f88d565d0856a6f842f6c9280056dDavid Brazdil abc0def 1506423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil """) 1516423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches( 1522c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 153a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK: foo<<X:([0-9]+)>>bar 154a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK: abc<<X>>def 155a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK: ### <<X>> ### 1562c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """, 1572c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 1582c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil foo1234bar 1592c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil abc1234def 1602c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil ### 1234 ### 1616423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil """) 1626423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertDoesNotMatch( 1632c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 164a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK: foo<<X:([0-9]+)>>bar 165a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid 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): 173a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil self.assertMatches("/// CHECK: b{{.}}r", "abc bar def") 174a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil self.assertDoesNotMatch("/// CHECK: b{{.}}r", "abc Xbar def") 175a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil self.assertDoesNotMatch("/// CHECK: b{{.}}r", "abc barX def") 176a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil self.assertDoesNotMatch("/// CHECK: b{{.}}r", "abc b r def") 1774e9aac12cf5f88d565d0856a6f842f6c9280056dDavid Brazdil 1782c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def test_InOrderAssertions(self): 1796423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches( 1802c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 181a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK: foo 182a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK: bar 1832c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """, 1842c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 1852c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil foo 1862c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil bar 1876423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil """) 1886423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertDoesNotMatch( 1892c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 190a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK: foo 191a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK: bar 1922c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """, 1932c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 1942c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil bar 1952c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil foo 1966423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil """) 1972c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 198711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil def test_NextLineAssertions(self): 199711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil self.assertMatches( 200711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil """ 201a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK: foo 202a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK-NEXT: bar 203a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK-NEXT: abc 204a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK: def 205711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil """, 206711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil """ 207711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil foo 208711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil bar 209711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil abc 210711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil def 211711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil """) 212711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil self.assertMatches( 213711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil """ 214a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK: foo 215a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK-NEXT: bar 216a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK: def 217711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil """, 218711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil """ 219711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil foo 220711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil bar 221711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil abc 222711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil def 223711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil """) 224711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil self.assertDoesNotMatch( 225711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil """ 226a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK: foo 227a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK-NEXT: bar 228711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil """, 229711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil """ 230711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil foo 231711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil abc 232711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil bar 233711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil """) 234711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil 235711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil self.assertDoesNotMatch( 236711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil """ 237a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK: foo 238a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK-NEXT: bar 239711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil """, 240711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil """ 241711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil bar 242711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil foo 243711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil abc 244711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil """) 245711411957a433555eda4bcf8d1f05aabf04425e8David Brazdil 2462c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def test_DagAssertions(self): 2476423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches( 2482c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 249a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK-DAG: foo 250a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK-DAG: bar 2512c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """, 2522c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 2532c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil foo 2542c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil bar 2556423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil """) 2566423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches( 2572c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 258a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK-DAG: foo 259a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK-DAG: bar 2602c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """, 2612c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 2622c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil bar 2632c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil foo 2646423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil """) 2652c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 2662c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def test_DagAssertionsScope(self): 2676423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches( 2682c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 269a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK: foo 270a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK-DAG: abc 271a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK-DAG: def 272a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK: bar 2732c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """, 2742c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 2752c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil foo 2762c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def 2772c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil abc 2782c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil bar 2796423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil """) 2806423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertDoesNotMatch( 2812c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 282a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK: foo 283a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK-DAG: abc 284a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK-DAG: def 285a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK: bar 2862c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """, 2872c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 2882c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil foo 2892c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil abc 2902c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil bar 2912c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def 2926423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil """) 2936423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertDoesNotMatch( 2942c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 295a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK: foo 296a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK-DAG: abc 297a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK-DAG: def 298a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK: bar 2992c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """, 3002c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 3012c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil foo 3022c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def 3032c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil bar 3042c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil abc 3056423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil """) 3062c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 3072c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def test_NotAssertions(self): 3086423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches( 3092c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 310a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK-NOT: foo 3112c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """, 3122c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 3132c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil abc 3142c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def 3156423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil """) 3166423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertDoesNotMatch( 3172c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 318a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK-NOT: foo 3192c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """, 3202c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 3212c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil abc foo 3222c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def 3236423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil """) 3246423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertDoesNotMatch( 3252c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 326a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK-NOT: foo 327a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK-NOT: bar 3282c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """, 3292c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 3302c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil abc 3312c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def bar 3326423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil """) 3332c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 3342c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def test_NotAssertionsScope(self): 3356423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches( 3362c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 337a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK: abc 338a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK-NOT: foo 339a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK: def 3402c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """, 3412c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 3422c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil abc 3432c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def 3446423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil """) 3456423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches( 3462c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 347a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK: abc 348a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK-NOT: foo 349a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK: def 3502c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """, 3512c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 3522c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil abc 3532c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def 3542c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil foo 3556423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil """) 3566423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertDoesNotMatch( 3572c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 358a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK: abc 359a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK-NOT: foo 360a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK: def 3612c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """, 3622c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 3632c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil abc 3642c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil foo 3652c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def 3666423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil """) 3672c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil 3682c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil def test_LineOnlyMatchesOnce(self): 3696423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertMatches( 3702c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 371a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK-DAG: foo 372a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK-DAG: foo 3732c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """, 3742c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 3752c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil foo 3762c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil abc 3772c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil foo 3786423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil """) 3796423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil self.assertDoesNotMatch( 3802c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 381a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK-DAG: foo 382a06d66a4ee60926127b9498b7ff0b3e37a24fccfDavid Brazdil /// CHECK-DAG: foo 3832c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """, 3842c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil """ 3852c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil foo 3862c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil abc 3872c27f2ccf316aebf96cf365d33d2834a8206444dDavid Brazdil bar 3886423cf5ef0ddf82722a6ed77ad3908fc8802d8cfDavid Brazdil """) 389b34c35ee8fe1516118d1d172a5e05b263ccbd93dDavid Brazdil 390b34c35ee8fe1516118d1d172a5e05b263ccbd93dDavid Brazdil def test_EvalAssertions(self): 391b34c35ee8fe1516118d1d172a5e05b263ccbd93dDavid Brazdil self.assertMatches("/// CHECK-EVAL: True", "foo") 392b34c35ee8fe1516118d1d172a5e05b263ccbd93dDavid Brazdil self.assertDoesNotMatch("/// CHECK-EVAL: False", "foo") 393b34c35ee8fe1516118d1d172a5e05b263ccbd93dDavid Brazdil 394b34c35ee8fe1516118d1d172a5e05b263ccbd93dDavid Brazdil self.assertMatches("/// CHECK-EVAL: 1 + 2 == 3", "foo") 395b34c35ee8fe1516118d1d172a5e05b263ccbd93dDavid Brazdil self.assertDoesNotMatch("/// CHECK-EVAL: 1 + 2 == 4", "foo") 396b34c35ee8fe1516118d1d172a5e05b263ccbd93dDavid Brazdil 397b34c35ee8fe1516118d1d172a5e05b263ccbd93dDavid Brazdil twoVarTestCase = """ 398b34c35ee8fe1516118d1d172a5e05b263ccbd93dDavid Brazdil /// CHECK-DAG: <<X:\d+>> <<Y:\d+>> 399b34c35ee8fe1516118d1d172a5e05b263ccbd93dDavid Brazdil /// CHECK-EVAL: <<X>> > <<Y>> 400b34c35ee8fe1516118d1d172a5e05b263ccbd93dDavid Brazdil """ 401b34c35ee8fe1516118d1d172a5e05b263ccbd93dDavid Brazdil self.assertMatches(twoVarTestCase, "42 41"); 402b34c35ee8fe1516118d1d172a5e05b263ccbd93dDavid Brazdil self.assertDoesNotMatch(twoVarTestCase, "42 43") 403