def testTestCaseConditionIsInsertedIntoList(self): obj = TestCaseApprovedParser() lines = [ "-------------------------------------------------------------------------------", "./failing/TestClass/failingCase", "-------------------------------------------------------------------------------", "ClassTests.cpp:<line number>", "...............................................................................", "", "ClassTests.cpp:<line number>: FAILED:", " REQUIRE( s == \"world\" )", "with expansion:", " \"hello\" == \"world\"", "", "-------------------------------------------------------------------------------"] for line in lines: result = obj.parseApprovedLine(line) self.assertTrue(isinstance(result, TestCaseData)) self.assertTrue(len(result.conditions) > 0) self.assertTrue(result.conditions[0].filename == "ClassTests.cpp" ) self.assertTrue(result.conditions[0].lineNumber == "line number" ) self.assertTrue(result.conditions[0].reason == "FAILED" ) newLines = result.generateApprovedLines() newLines.append("-------------------------------------------------------------------------------") self.assertTrue( len(lines) == len(newLines) ) self.assertTrue( lines == newLines )
def testOneSection(self): obj = TestCaseApprovedParser() lines = [ "-------------------------------------------------------------------------------", "Comparisons between unsigned ints and negative signed ints match c++ standard", "behaviour", "-------------------------------------------------------------------------------", "ConditionTests.cpp:<line number>", "...............................................................................", "", "ConditionTests.cpp:<line number>:", "PASSED:", " CHECK( ( -1 > 2u ) )", "with expansion:", " true", "", "ConditionTests.cpp:<line number>:", "PASSED:", " CHECK( -1 > 2u )", "with expansion:", " -1 > 2", "", "===============================================================================" ] newLines = [] for line in lines: result = obj.parseApprovedLine(line) if isinstance(result, TestCaseData): newLines += result.generateApprovedLines() newLines.append("===============================================================================") #for line in newLines: # print line self.assertTrue( len(lines) == len(newLines) ) self.assertTrue( lines == newLines )
def testOneSection(self): obj = TestCaseApprovedParser() lines = [ "-------------------------------------------------------------------------------", "./failing/message/sections", " one", "-------------------------------------------------------------------------------", "MessageTests.cpp:<line number>", "...............................................................................", "", "MessageTests.cpp:<line number>: FAILED:", "explicitly with message:", " Message from section one", "", "===============================================================================" ] newLines = [] for line in lines: result = obj.parseApprovedLine(line) if isinstance(result, TestCaseData): newLines += result.generateApprovedLines() newLines.append("===============================================================================") #for line in newLines: # print line self.assertTrue( len(lines) == len(newLines) ) self.assertTrue( lines == newLines )
def testTestCaseNameIsFound(self): obj = TestCaseApprovedParser() lines = [ "-------------------------------------------------------------------------------", "./failing/TestClass/failingCase", "-------------------------------------------------------------------------------" ] for line in lines: result = obj.parseApprovedLine(line) self.assertTrue(result == None) self.assertTrue(obj.current.name == "./failing/TestClass/failingCase") self.assertTrue( not(obj.current.empty()) )
def testPartialConditionRequiresMoreData(self): obj = TestCaseApprovedParser() lines = [ "-------------------------------------------------------------------------------", "./failing/TestClass/failingCase", "-------------------------------------------------------------------------------", "ClassTests.cpp:<line number>", "...............................................................................", "ClassTests.cpp:<line number>: FAILED:" ] for line in lines: result = obj.parseApprovedLine(line) self.assertTrue(result == None) self.assertTrue(len(obj.current.conditions) == 0)
def testTestCaseClassIsFound(self): obj = TestCaseApprovedParser() lines = [ "-------------------------------------------------------------------------------", "./failing/TestClass/failingCase", "-------------------------------------------------------------------------------", "ClassTests.cpp:<line number>", "..............................................................................." ] for line in lines: result = obj.parseApprovedLine(line) self.assertTrue(result == None) self.assertTrue(obj.current.filename == "ClassTests.cpp") self.assertTrue(obj.current.lineNumber == "line number")
def testTestCaseConditionIsFound(self): obj = TestCaseApprovedParser() lines = [ "-------------------------------------------------------------------------------", "./failing/TestClass/failingCase", "-------------------------------------------------------------------------------", "ClassTests.cpp:<line number>", "...............................................................................", "", "ClassTests.cpp:<line number>: FAILED:", " REQUIRE( s == \"world\" )", "with expansion:", " \"hello\" == \"world\""] for line in lines: result = obj.parseApprovedLine(line) self.assertTrue(result == None) self.assertTrue(not(obj.conditionParser.current.empty())) self.assertTrue(obj.conditionParser.current.reason == "FAILED")
class TestRunApprovedParser: NONE = 0 VERSION_EXPECTED = 1 TEST_CASE_EXPECTED = 2 END_RUN_INFO = 3 versionParser = re.compile(r'(.*)is a (<version>*).*') def __init__(self): self.state = self.NONE self.current = TestRunData() self.testcaseParser = TestCaseApprovedParser() self.lineNumber = 0 def parseApprovedLine(self, line): result = None if self.state == self.NONE: if line.startswith( "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" ): self.state = self.VERSION_EXPECTED elif len(line): raise Exception("Unknown parse line: '" + line + "'") elif self.state == self.VERSION_EXPECTED: m = self.versionParser.match(line) if m: self.current.appname = m.group(1).strip() self.current.version = m.group(2).strip() self.state = self.TEST_CASE_EXPECTED elif len(line): raise Exception("Unknown parse line: '" + line + "'") elif self.state == self.TEST_CASE_EXPECTED: if line == "Run with -? for options": pass else: testcase = None try: testcase = self.testcaseParser.parseApprovedLine(line) except RandomOutput as e: #print "E:", self.lineNumber, ", ",e.output self.current.output = e.output self.current.outputLine = self.lineNumber - 10 if isinstance(testcase, TestCaseData): self.current.testcases.append(testcase) if line.startswith( "===============================================================================" ): self.state = self.END_RUN_INFO elif self.state == self.END_RUN_INFO: if len(line): self.current.results = line.strip() result = self.current self.lineNumber += 1 return result
class TestRunApprovedParser: NONE = 0 VERSION_EXPECTED = 1 TEST_CASE_EXPECTED = 2 END_RUN_INFO = 3 versionParser = re.compile( r'(.*)is a (<version>*).*' ) def __init__(self): self.state = self.NONE self.current = TestRunData() self.testcaseParser = TestCaseApprovedParser() self.lineNumber = 0 def parseApprovedLine(self,line): result = None if self.state == self.NONE: if line.startswith("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"): self.state = self.VERSION_EXPECTED elif len(line): raise Exception("Unknown parse line: '" + line + "'") elif self.state == self.VERSION_EXPECTED: m = self.versionParser.match(line) if m: self.current.appname = m.group(1).strip() self.current.version = m.group(2).strip() self.state = self.TEST_CASE_EXPECTED elif len(line): raise Exception("Unknown parse line: '" + line + "'") elif self.state == self.TEST_CASE_EXPECTED: if line == "Run with -? for options": pass else: testcase = None try: testcase = self.testcaseParser.parseApprovedLine(line) except RandomOutput as e: #print "E:", self.lineNumber, ", ",e.output self.current.output = e.output self.current.outputLine = self.lineNumber - 10 if isinstance(testcase, TestCaseData): self.current.testcases.append(testcase) if line.startswith("==============================================================================="): self.state = self.END_RUN_INFO elif self.state == self.END_RUN_INFO: if len(line): self.current.results = line.strip() result = self.current self.lineNumber += 1 return result
def testTwoTestCases(self): obj = TestCaseApprovedParser() lines = [ "-------------------------------------------------------------------------------", "./failing/TestClass/failingCase", "-------------------------------------------------------------------------------", "ClassTests.cpp:<line number>", "...............................................................................", "", "ClassTests.cpp:<line number>: FAILED:", " REQUIRE( s == \"world\" )", "with expansion:", " \"hello\" == \"world\"", "", "-------------------------------------------------------------------------------", "./failing/Fixture/failingCase", "-------------------------------------------------------------------------------", "ClassTests.cpp:<line number>", "...............................................................................", "", "ClassTests.cpp:<line number>: FAILED:", " REQUIRE( m_a == 2 )", "with expansion:", " 1 == 2", "", "===============================================================================" ] newLines = [] for line in lines: result = obj.parseApprovedLine(line) if isinstance(result, TestCaseData): newLines += result.generateApprovedLines() newLines.append("===============================================================================") #for line in newLines: # print line self.assertTrue( len(lines) == len(newLines) ) self.assertTrue( lines == newLines )
def testEndOfTestCaseIsFound(self): obj = TestCaseApprovedParser() line = "-------------------------------------------------------------------------------" result = obj.parseApprovedLine(line) self.assertTrue(result == None) self.assertTrue(obj.current.empty())
def testTestCaseMultiConditionMatches(self): obj = TestCaseApprovedParser() lines = [ "-------------------------------------------------------------------------------", "./failing/conditions/equality", "-------------------------------------------------------------------------------", "ConditionTests.cpp:<line number>", "...............................................................................", "", "ConditionTests.cpp:<line number>: FAILED:", " CHECK( data.int_seven == 6 )", "with expansion:", " 7 == 6", "", "ConditionTests.cpp:<line number>: FAILED:", " CHECK( data.int_seven == 8 )", "with expansion:", " 7 == 8", "", "ConditionTests.cpp:<line number>: FAILED:", " CHECK( data.int_seven == 0 )", "with expansion:", " 7 == 0", "", "ConditionTests.cpp:<line number>: FAILED:", " CHECK( data.float_nine_point_one == Approx( 9.11f ) )", "with expansion:", " 9.1 == Approx( 9.11 )", "", "ConditionTests.cpp:<line number>: FAILED:", " CHECK( data.float_nine_point_one == Approx( 9.0f ) )", "with expansion:", " 9.1 == Approx( 9 )", "", "ConditionTests.cpp:<line number>: FAILED:", " CHECK( data.float_nine_point_one == Approx( 1 ) )", "with expansion:", " 9.1 == Approx( 1 )", "", "ConditionTests.cpp:<line number>: FAILED:", " CHECK( data.float_nine_point_one == Approx( 0 ) )", "with expansion:", " 9.1 == Approx( 0 )", "", "ConditionTests.cpp:<line number>: FAILED:", " CHECK( data.double_pi == Approx( 3.1415 ) )", "with expansion:", " 3.1415926535 == Approx( 3.1415 )", "", "ConditionTests.cpp:<line number>: FAILED:", " CHECK( data.str_hello == \"goodbye\" )", "with expansion:", " \"hello\" == \"goodbye\"", "", "ConditionTests.cpp:<line number>: FAILED:", " CHECK( data.str_hello == \"hell\" )", "with expansion:", " \"hello\" == \"hell\"", "", "ConditionTests.cpp:<line number>: FAILED:", " CHECK( data.str_hello == \"hello1\" )", "with expansion:", " \"hello\" == \"hello1\"", "", "ConditionTests.cpp:<line number>: FAILED:", " CHECK( data.str_hello.size() == 6 )", "with expansion:", " 5 == 6", "", "ConditionTests.cpp:<line number>: FAILED:", " CHECK( x == Approx( 1.301 ) )", "with expansion:", " 1.3 == Approx( 1.301 )", "", "===============================================================================" ] for line in lines: result = obj.parseApprovedLine(line) self.assertTrue(isinstance(result, TestCaseData)) newLines = result.generateApprovedLines() newLines.append("===============================================================================") #for line in newLines: # print line self.assertTrue( len(lines) == len(newLines) ) self.assertTrue( lines == newLines )
def __init__(self): self.state = self.NONE self.current = TestRunData() self.testcaseParser = TestCaseApprovedParser() self.lineNumber = 0