some explanation for the parser tests
This commit is contained in:
parent
874f080ba2
commit
9c16d81ad6
@ -1,5 +1,5 @@
|
|||||||
require_relative "test_crystal"
|
require_relative "test_crystal"
|
||||||
require_relative "test_nodes"
|
require_relative "test_ast"
|
||||||
require_relative "test_parser"
|
require_relative "test_parser"
|
||||||
require_relative "test_small_program"
|
require_relative "test_small_program"
|
||||||
require_relative "test_transform"
|
require_relative "test_transform"
|
||||||
|
@ -1,12 +1,10 @@
|
|||||||
require_relative "helper"
|
require_relative "helper"
|
||||||
|
|
||||||
|
# Please read note in test_parser
|
||||||
# testing that parsing strings that we know to be correct returns the nodes we expect
|
|
||||||
# in a way the combination of test_parser and test_transform
|
|
||||||
|
|
||||||
require_relative 'helper'
|
require_relative 'helper'
|
||||||
|
|
||||||
class TestNodes < MiniTest::Test
|
class TestAst < MiniTest::Test
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
@parser = Parser::Composed.new
|
@parser = Parser::Composed.new
|
@ -1,5 +1,25 @@
|
|||||||
require_relative 'helper'
|
require_relative 'helper'
|
||||||
|
|
||||||
|
# Some sanity is emerging in the testing of parsers
|
||||||
|
# (Parsers are fiddly in respect to space and order, small changes may and do have unexpected effects)
|
||||||
|
|
||||||
|
# For any functionality that we want to work (ie test), there are actually three tests, with the _same_ name
|
||||||
|
# One in each of the parser/transform/ast classes
|
||||||
|
# Parser test that the parser parses and thet the output is correct. Rules are named and and boil down to
|
||||||
|
# hashes and arrays with lots of symbols for the names the rules (actually the reults) were given
|
||||||
|
# Transform test really just test the tranformation. They basically take the output of the parse
|
||||||
|
# and check that correct Ast classes are produced
|
||||||
|
# Ast tests both steps in one. Ie string input to ast classes output
|
||||||
|
|
||||||
|
# All threee classes are layed out quite similarly in that they use a check method and
|
||||||
|
# each test assigns @input and @expected which the check methods then checks
|
||||||
|
# The check methods have a pust in it (to be left) which is very handy for checking
|
||||||
|
# also the output of parser.check can actually be used as the input of transform
|
||||||
|
|
||||||
|
# Repeat: For every test in parser, there should beone in transform and ast
|
||||||
|
# The test in transform should use the output of parser as input
|
||||||
|
# The test in ast should expect the same result as transform
|
||||||
|
|
||||||
class ParserTest < MiniTest::Test
|
class ParserTest < MiniTest::Test
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
@ -8,7 +28,7 @@ class ParserTest < MiniTest::Test
|
|||||||
|
|
||||||
def check
|
def check
|
||||||
is = @parser.parse(@input)
|
is = @parser.parse(@input)
|
||||||
assert is
|
#puts is.inspect
|
||||||
assert_equal @expected , is
|
assert_equal @expected , is
|
||||||
end
|
end
|
||||||
def test_number
|
def test_number
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
require_relative 'helper'
|
require_relative 'helper'
|
||||||
|
|
||||||
|
# Please read note in test_parser
|
||||||
|
|
||||||
class TransformTest < MiniTest::Test
|
class TransformTest < MiniTest::Test
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
@ -8,6 +10,7 @@ class TransformTest < MiniTest::Test
|
|||||||
|
|
||||||
def check
|
def check
|
||||||
is = @transform.apply @input
|
is = @transform.apply @input
|
||||||
|
#puts is.transform
|
||||||
assert_equal @expected , is
|
assert_equal @expected , is
|
||||||
end
|
end
|
||||||
def test_number
|
def test_number
|
||||||
|
Loading…
Reference in New Issue
Block a user