test-tree-wizard.rb revision 324c4644fee44b9898524c09511bd33c3f12e2df
1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#!/usr/bin/ruby 2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# encoding: utf-8 3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverrequire 'antlr3' 5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverrequire 'antlr3/tree/wizard' 6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverrequire 'test/unit' 7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverrequire 'spec' 8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverinclude ANTLR3 10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverinclude ANTLR3::AST 11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass TestPatternLexer < Test::Unit::TestCase 13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # vvvvvvvv tests vvvvvvvvv 15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_open 17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = Wizard::PatternLexer.new( '(' ) 18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver type = lexer.next_token 19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal( type, :open ) 20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal( lexer.text, '' ) 21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal( lexer.error, false ) 22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_close 25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = Wizard::PatternLexer.new(')') 26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver type = lexer.next_token 27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(type, :close) 28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(lexer.text, '') 29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(lexer.error, false) 30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_percent 33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = Wizard::PatternLexer.new('%') 34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver type = lexer.next_token 35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(type, :percent) 36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(lexer.text, '') 37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(lexer.error, false) 38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_dot 41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = Wizard::PatternLexer.new('.') 42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver type = lexer.next_token 43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(type, :dot) 44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(lexer.text, '') 45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(lexer.error, false) 46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_eof 49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = Wizard::PatternLexer.new(" \n \r \t ") 50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver type = lexer.next_token 51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(type, EOF) 52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(lexer.text, '') 53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(lexer.error, false) 54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_id 57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = Wizard::PatternLexer.new('__whatever_1__') 58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver type = lexer.next_token 59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(:identifier, type) 60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal('__whatever_1__', lexer.text) 61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert( !(lexer.error) ) 62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_arg 65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = Wizard::PatternLexer.new('[ \]bla\n]') 66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver type = lexer.next_token 67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(type, :argument) 68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(' ]bla\n', lexer.text) 69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert( !(lexer.error) ) 70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_error 73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = Wizard::PatternLexer.new("1") 74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver type = lexer.next_token 75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(type, EOF) 76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(lexer.text, '') 77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(lexer.error, true) 78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend 81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass TestPatternParser < Test::Unit::TestCase 84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Tokens = TokenScheme.build %w(A B C D E ID VAR) 85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver include Tokens 86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def setup 88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @adaptor = CommonTreeAdaptor.new( Tokens.token_class ) 89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @pattern_adaptor = Wizard::PatternAdaptor.new( Tokens.token_class ) 90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @wizard = Wizard.new( :adaptor => @adaptor, :token_scheme => Tokens ) 91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # vvvvvvvv tests vvvvvvvvv 94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_single_node 95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = Wizard::PatternParser.parse( 'ID', Tokens, @adaptor ) 96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 97324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_instance_of(CommonTree, tree) 98324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal( ID, tree.type ) 99324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal( 'ID', tree.text ) 100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_single_node_with_arg 103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = Wizard::PatternParser.parse( 'ID[foo]', Tokens, @adaptor ) 104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_instance_of( CommonTree, tree ) 106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal( ID, tree.type ) 107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal( 'foo', tree.text ) 108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_single_level_tree 111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = Wizard::PatternParser.parse( '(A B)', Tokens, @adaptor ) 112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_instance_of( CommonTree, tree ) 114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(A, tree.type) 115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal('A', tree.text) 116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(tree.child_count, 1) 117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(tree.child(0).type, B) 118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(tree.child(0).text, 'B') 119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_nil 122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = Wizard::PatternParser.parse( 'nil', Tokens, @adaptor ) 123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_instance_of(CommonTree, tree) 125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(0, tree.type) 126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_nil tree.text 127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_wildcard 130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = Wizard::PatternParser.parse( '(.)', Tokens, @adaptor ) 131324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_instance_of( Wizard::WildcardPattern, tree ) 132324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 133324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 134324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_label 135324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = Wizard::PatternParser.parse( '(%a:A)', Tokens, @pattern_adaptor ) 136324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_instance_of(Wizard::Pattern, tree) 137324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal('a', tree.label) 138324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 139324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 140324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_error_1 141324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = Wizard::PatternParser.parse( ')', Tokens, @adaptor ) 142324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_nil tree 143324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 144324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 145324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_error_2 146324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = Wizard::PatternParser.parse( '()', Tokens, @adaptor ) 147324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_nil tree 148324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 149324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 150324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_error_3 151324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = Wizard::PatternParser.parse( '(A ])', Tokens, @adaptor ) 152324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_nil tree 153324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 154324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 155324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend 156324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 157324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 158324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass TestTreeWizard < Test::Unit::TestCase 159324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Tokens = TokenScheme.build %w(A B C D E ID VAR) 160324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver include Tokens 161324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 162324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def setup 163324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @adaptor = CommonTreeAdaptor.new( Tokens.token_class ) 164324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @wizard = Wizard.new( :adaptor => @adaptor, :token_scheme => Tokens ) 165324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 166324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 167324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def create_wizard( tokens ) 168324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Wizard.new( :tokens => tokens ) 169324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 170324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 171324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # vvvvvvvv tests vvvvvvvvv 172324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_init 173324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @wizard = Wizard.new( :tokens => %w(A B), :adaptor => @adaptor ) 174324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 175324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal( @wizard.adaptor, @adaptor ) 176324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_kind_of( ANTLR3::TokenScheme, @wizard.token_scheme ) 177324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 178324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 179324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_single_node 180324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = @wizard.create("ID") 181324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(t.inspect, 'ID') 182324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 183324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 184324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_single_node_with_arg 185324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = @wizard.create("ID[foo]") 186324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 187324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(t.inspect, 'foo') 188324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 189324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 190324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_single_node_tree 191324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = @wizard.create("(A)") 192324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(t.inspect, 'A') 193324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 194324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 195324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_single_level_tree 196324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = @wizard.create("(A B C D)") 197324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(t.inspect, '(A B C D)') 198324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 199324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 200324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_list_tree 201324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = @wizard.create("(nil A B C)") 202324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(t.inspect, 'A B C') 203324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 204324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 205324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_invalid_list_tree 206324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = @wizard.create("A B C") 207324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_nil t 208324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 209324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 210324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_double_level_tree 211324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver t = @wizard.create("(A (B C) (B D) E)") 212324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(t.inspect, "(A (B C) (B D) E)") 213324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 214324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 215324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver SIMPLIFY_MAP = lambda do |imap| 216324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver Hash[ 217324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver imap.map { |type, nodes| [type, nodes.map { |n| n.to_s }] } 218324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ] 219324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 220324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 221324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_single_node_index 222324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = @wizard.create("ID") 223324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver index_map = SIMPLIFY_MAP[@wizard.index(tree)] 224324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 225324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(index_map, ID => %w(ID)) 226324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 227324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 228324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 229324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_no_repeats_index 230324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = @wizard.create("(A B C D)") 231324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver index_map = SIMPLIFY_MAP[@wizard.index(tree)] 232324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 233324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(index_map, 234324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver D => %w(D), B => %w(B), 235324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver C => %w(C), A => %w(A) 236324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ) 237324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 238324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 239324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_repeats_index 240324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = @wizard.create("(A B (A C B) B D D)") 241324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver index_map = SIMPLIFY_MAP[@wizard.index(tree)] 242324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 243324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(index_map, 244324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver D => %w(D D), B => %w(B B B), 245324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver C => %w(C), A => %w(A A) 246324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ) 247324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 248324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 249324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 250324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_no_repeats_visit 251324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = @wizard.create("(A B C D)") 252324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 253324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements = [] 254324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @wizard.visit( tree, B ) do |node, parent, child_index, labels| 255324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements << node.to_s 256324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 257324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 258324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal( %w(B), elements ) 259324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 260324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 261324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 262324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_no_repeats_visit2 263324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = @wizard.create("(A B (A C B) B D D)") 264324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 265324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements = [] 266324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @wizard.visit( tree, C ) do |node, parent, child_index, labels| 267324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements << node.to_s 268324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 269324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 270324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(%w(C), elements) 271324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 272324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 273324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 274324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_repeats_visit 275324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = @wizard.create("(A B (A C B) B D D)") 276324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 277324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements = [] 278324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @wizard.visit( tree, B ) do |node, parent, child_index, labels| 279324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements << node.to_s 280324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 281324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 282324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(%w(B B B), elements) 283324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 284324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 285324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 286324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_repeats_visit2 287324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = @wizard.create("(A B (A C B) B D D)") 288324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 289324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements = [] 290324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @wizard.visit( tree, A ) do |node, parent, child_index, labels| 291324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements << node.to_s 292324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 293324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 294324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(%w(A A), elements) 295324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 296324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 297324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def context(node, parent, index) 298324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver '%s@%s[%d]' % [node.to_s, (parent || 'nil').to_s, index] 299324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 300324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 301324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_repeats_visit_with_context 302324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = @wizard.create("(A B (A C B) B D D)") 303324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 304324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements = [] 305324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @wizard.visit( tree, B ) do |node, parent, child_index, labels| 306324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements << context(node, parent, child_index) 307324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 308324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 309324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(['B@A[0]', 'B@A[1]', 'B@A[2]'], elements) 310324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 311324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 312324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 313324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_repeats_visit_with_null_parent_and_context 314324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = @wizard.create("(A B (A C B) B D D)") 315324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 316324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements = [] 317324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @wizard.visit( tree, A ) do |node, parent, child_index, labels| 318324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements << context(node, parent, child_index) 319324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 320324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 321324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(['A@nil[-1]', 'A@A[1]'], elements) 322324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 323324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 324324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_visit_pattern 325324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = @wizard.create("(A B C (A B) D)") 326324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 327324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements = [] 328324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @wizard.visit(tree, '(A B)') do |node, parent, child_index, labels| 329324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements << node.to_s 330324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 331324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 332324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(%w(A), elements) 333324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 334324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 335324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 336324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_visit_pattern_multiple 337324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = @wizard.create("(A B C (A B) (D (A B)))") 338324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 339324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements = [] 340324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @wizard.visit(tree, '(A B)') do |node, parent, child_index, labels| 341324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements << context(node, parent, child_index) 342324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 343324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 344324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal( %w(A@A[2] A@D[0]) , elements ) 345324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 346324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 347324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def labeled_context(node, parent, index, labels, *names) 348324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver suffix = names.map { |n| labels[n].to_s }.join('&') 349324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver '%s@%s[%d]%s' % [node.to_s, (parent || 'nil').to_s, index, suffix] 350324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 351324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 352324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_visit_pattern_multiple_with_labels 353324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = @wizard.create("(A B C (A[foo] B[bar]) (D (A[big] B[dog])))") 354324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 355324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements = [] 356324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @wizard.visit(tree, '(%a:A %b:B)') do |node, parent, child_index, labels| 357324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elements << labeled_context(node, parent, child_index, labels, 'a', 'b') 358324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 359324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 360324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal( ['foo@A[2]foo&bar', 'big@D[0]big&dog'] , elements ) 361324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 362324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 363324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 364324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_match 365324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = @wizard.create("(A B C)") 366324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert @wizard.match(tree, "(A B C)") 367324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 368324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 369324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_match_single_node 370324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = @wizard.create('A') 371324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert @wizard.match(tree, 'A') 372324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 373324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 374324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_match_single_node_fails 375324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = @wizard.create('A') 376324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert( !(@wizard.match(tree, 'B')) ) 377324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 378324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 379324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 380324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_match_flat_tree 381324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = @wizard.create('(nil A B C)') 382324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert @wizard.match(tree, '(nil A B C)') 383324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 384324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 385324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_match_flat_tree_fails 386324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = @wizard.create('(nil A B C)') 387324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert( !(@wizard.match(tree, '(nil A B)')) ) 388324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 389324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 390324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_match_flat_tree_fails2 391324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = @wizard.create('(nil A B C)') 392324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert( !(@wizard.match(tree, '(nil A B A)')) ) 393324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 394324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 395324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_wildcard 396324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = @wizard.create('(A B C)') 397324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert @wizard.match(tree, '(A . .)') 398324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 399324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 400324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_match_with_text 401324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = @wizard.create('(A B[foo] C[bar])') 402324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert @wizard.match(tree, '(A B[foo] C)') 403324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 404324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 405324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_match_with_text_fails 406324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = @wizard.create('(A B C)') 407324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert( !(@wizard.match(tree, '(A[foo] B C)')) ) 408324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 409324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 410324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_match_labels 411324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = @wizard.create('(A B C)') 412324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels = @wizard.match( tree, '(%a:A %b:B %c:C)' ) 413324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 414324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal('A', labels['a'].to_s) 415324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal('B', labels['b'].to_s) 416324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal('C', labels['c'].to_s) 417324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 418324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 419324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_match_with_wildcard_labels 420324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = @wizard.create('(A B C)') 421324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels = @wizard.match(tree, '(A %b:. %c:.)') 422324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_kind_of( Hash, labels ) 423324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal('B', labels['b'].to_s) 424324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal('C', labels['c'].to_s) 425324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 426324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 427324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 428324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_match_labels_and_test_text 429324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = @wizard.create('(A B[foo] C)') 430324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels = @wizard.match( tree, '(%a:A %b:B[foo] %c:C)' ) 431324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_kind_of( Hash, labels ) 432324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal('A', labels['a'].to_s) 433324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal('foo', labels['b'].to_s) 434324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal('C', labels['c'].to_s) 435324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 436324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 437324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_match_labels_in_nested_tree 438324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = @wizard.create('(A (B C) (D E))') 439324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver labels = @wizard.match( tree, '(%a:A (%b:B %c:C) (%d:D %e:E))' ) 440324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_kind_of( Hash, labels ) 441324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal('A', labels['a'].to_s) 442324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal('B', labels['b'].to_s) 443324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal('C', labels['c'].to_s) 444324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal('D', labels['d'].to_s) 445324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal('E', labels['e'].to_s) 446324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 447324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 448324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 449324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_equals 450324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree1 = @wizard.create("(A B C)") 451324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree2 = @wizard.create("(A B C)") 452324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert @wizard.equals(tree1, tree2) 453324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 454324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 455324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 456324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_equals_with_text 457324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree1 = @wizard.create("(A B[foo] C)") 458324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree2 = @wizard.create("(A B[foo] C)") 459324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert @wizard.equals(tree1, tree2) 460324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 461324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 462324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 463324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_equals_with_mismatched_text 464324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree1 = @wizard.create("(A B[foo] C)") 465324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree2 = @wizard.create("(A B C)") 466324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert( !(@wizard.equals(tree1, tree2)) ) 467324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 468324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 469324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 470324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_equals_with_mismatched_list 471324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree1 = @wizard.create("(A B C)") 472324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree2 = @wizard.create("(A B A)") 473324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert( !(@wizard.equals(tree1, tree2)) ) 474324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 475324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 476324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_equals_with_mismatched_list_length 477324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree1 = @wizard.create("(A B C)") 478324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree2 = @wizard.create("(A B)") 479324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert( !(@wizard.equals(tree1, tree2)) ) 480324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 481324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 482324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_find_pattern 483324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = @wizard.create("(A B C (A[foo] B[bar]) (D (A[big] B[dog])))") 484324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver subtrees = @wizard.find(tree, "(A B)").map { |t| t.to_s } 485324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(%w(foo big), subtrees) 486324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 487324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 488324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def test_find_token_type 489324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tree = @wizard.create("(A B C (A[foo] B[bar]) (D (A[big] B[dog])))") 490324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver subtrees = @wizard.find( tree, A ).map { |t| t.to_s } 491324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver assert_equal(%w(A foo big), subtrees) 492324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 493324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend 494324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 495