Ejemplo n.º 1
0
	def _do_file_test(self, fname):
		# Parse input file
		lexer, parser, tokens, presult = pyless.parse(fname)
		if lexer.getNumberOfSyntaxErrors() > 0:
			self.fail("Lexer errors:\n" + '\n'.join(lexer.errormsgcache))
		if parser.getNumberOfSyntaxErrors() > 0:
			self.fail("Parser errors:\n" + '\n'.join(parser.errormsgcache))

		r = presult.tree.toStringTree()
		self.assertIsNotNone(r, "Parsing silently failed!")

		# Save graph to dot
		dotout.save_result(presult, fname+".dot")

		# Tree walk
		output = StringIO.StringIO()
		twalker, tresult = pyless.twalk(presult, tokens, output=output)
		if twalker.getNumberOfSyntaxErrors() > 0:
			self.fail("Tree walker errors:\n" + '\n'.join(twalker.errormsgcache))

		output.seek(0)
		output2nd = self._reparse(output)

		# Compare outputs - must be the same
		output.seek(0)
		self.assertEqual(output.getvalue(), output2nd.getvalue())
Ejemplo n.º 2
0
	def _reparse(self, output):
		# Reparse output CSS again
		lexer, parser, tokens, presult = pyless.parse(output)
		if lexer.getNumberOfSyntaxErrors() > 0:
			self.fail("Lexer (reparse) errors:\n" + '\n'.join(lexer.errormsgcache))
		if parser.getNumberOfSyntaxErrors() > 0:
			self.fail("Parser (reparse) errors:\n" + '\n'.join(parser.errormsgcache))

		r = presult.tree.toStringTree()
		self.assertIsNotNone(r, "Parsing (reparse) silently failed!")

		# Tree walk
		output = StringIO.StringIO()
		twalker, tresult = pyless.twalk(presult, tokens, output=output)
		if twalker.getNumberOfSyntaxErrors() > 0:
			self.fail("Tree walker errors:\n" + '\n'.join(twalker.errormsgcache))

		output.seek(0)
		return output
Ejemplo n.º 3
0
	def _do_file_test(self, fname):
		lexer, parser, result = pyless.parse(fname)
		if lexer.getNumberOfSyntaxErrors() > 0:
			self.fail("Lexer errors:\n" + '\n'.join(lexer.errormsgcache))
		if parser.getNumberOfSyntaxErrors() > 0:
			self.fail("Parser errors:\n" + '\n'.join(parser.errormsgcache))

		r = result.tree.toStringTree()
		self.assertIsNotNone(r, "Parsing silently failed!")

		###

		fout = open(fname+'.dot', "w")
		fout.write('digraph {0} {{\nratio="fill";\npackMode="graph";\n'.format(os.path.basename(fname)[:-4].replace('-','_')))
		fout.write('node [style="filled",fontname=Arial];\n')
		def twalker(t):
			tname = tokenNames[t.getType()]
			if tname == str(t):
				fout.write('"{0}" [shape=ellipse,label="{1}",fillcolor=paleturquoise];\n'.format(
					id(t),
					self._escape_dot_label(t)
					)
				)
			else:
				fout.write('"{0}" [shape=record,label="{{{2}|{1}}}",fillcolor=palegreen];\n'.format(
					id(t),
					self._escape_dot_label(t),
					self._escape_dot_label(tname)
					)
				)

			if t.parent is not None:
				fout.write('"{0}" -> "{1}";\n'.format(id(t.parent), id(t)))

			for ch in t.children:
				twalker(ch)

		twalker(result.tree)

		fout.write("}\n")