Ejemplo n.º 1
0
    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 )
Ejemplo n.º 2
0
    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 )
Ejemplo n.º 3
0
    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 )
Ejemplo n.º 4
0
    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()) )
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
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")
Ejemplo n.º 7
0
    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")
Ejemplo n.º 8
0
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
Ejemplo n.º 9
0
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
Ejemplo n.º 10
0
    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 )
Ejemplo n.º 11
0
    def testEndOfTestCaseIsFound(self):
		obj = TestCaseApprovedParser()
		line = "-------------------------------------------------------------------------------"
		result = obj.parseApprovedLine(line)
		self.assertTrue(result == None)
		self.assertTrue(obj.current.empty())
Ejemplo n.º 12
0
    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 )
Ejemplo n.º 13
0
	def __init__(self):
		self.state = self.NONE
		self.current = TestRunData()
		self.testcaseParser = TestCaseApprovedParser()
		self.lineNumber = 0
Ejemplo n.º 14
0
 def __init__(self):
     self.state = self.NONE
     self.current = TestRunData()
     self.testcaseParser = TestCaseApprovedParser()
     self.lineNumber = 0