1*16467b97STreehugger Robot#!/usr/bin/ruby 2*16467b97STreehugger Robot# encoding: utf-8 3*16467b97STreehugger Robotrequire 'antlr3' 4*16467b97STreehugger Robotrequire 'test/unit' 5*16467b97STreehugger Robotrequire 'spec' 6*16467b97STreehugger Robot 7*16467b97STreehugger Robotinclude ANTLR3 8*16467b97STreehugger Robot 9*16467b97STreehugger Robotdescribe TokenScheme do 10*16467b97STreehugger Robot before do 11*16467b97STreehugger Robot @ts = TokenScheme.new do 12*16467b97STreehugger Robot define_tokens(:A => 4, :B => 5, :T__6 => 6) 13*16467b97STreehugger Robot register_names('A', 'B', "'+'") 14*16467b97STreehugger Robot end 15*16467b97STreehugger Robot @a_class = Class.new do 16*16467b97STreehugger Robot class << self 17*16467b97STreehugger Robot attr_accessor :token_scheme 18*16467b97STreehugger Robot end 19*16467b97STreehugger Robot end 20*16467b97STreehugger Robot @a_class.send(:include, @ts) 21*16467b97STreehugger Robot 22*16467b97STreehugger Robot @an_instance = @a_class.new 23*16467b97STreehugger Robot end 24*16467b97STreehugger Robot 25*16467b97STreehugger Robot example "token schemes define tokens as constants" do 26*16467b97STreehugger Robot @ts::A.should == 4 27*16467b97STreehugger Robot @ts::B.should == 5 28*16467b97STreehugger Robot @ts::T__6.should == 6 29*16467b97STreehugger Robot @ts::EOF.should == -1 30*16467b97STreehugger Robot end 31*16467b97STreehugger Robot 32*16467b97STreehugger Robot example "token schemes track human-friendly token names" do 33*16467b97STreehugger Robot @ts::TOKEN_NAMES.should == { 34*16467b97STreehugger Robot 0 => "<invalid>", -1 => "<EOF>", 1 => "<EOR>", 35*16467b97STreehugger Robot 2 => "<DOWN>", 3 => "<UP>", 4 => "A", 36*16467b97STreehugger Robot 5 => "B", 6 => "'+'" 37*16467b97STreehugger Robot } 38*16467b97STreehugger Robot @ts.token_name(5).should == 'B' 39*16467b97STreehugger Robot @ts.token_name(6).should == "'+'" 40*16467b97STreehugger Robot @ts.token_name(-1).should == '<EOF>' 41*16467b97STreehugger Robot @ts.token_name(7).should == '<UNKNOWN: 7>' 42*16467b97STreehugger Robot end 43*16467b97STreehugger Robot 44*16467b97STreehugger Robot 45*16467b97STreehugger Robot example 'class-level results of including a token scheme' do 46*16467b97STreehugger Robot #@a_class.token_scheme.should == @ts 47*16467b97STreehugger Robot 48*16467b97STreehugger Robot @a_class::A.should == 4 49*16467b97STreehugger Robot @a_class::B.should == 5 50*16467b97STreehugger Robot @a_class::T__6.should == 6 51*16467b97STreehugger Robot @a_class::EOF.should == -1 52*16467b97STreehugger Robot 53*16467b97STreehugger Robot @a_class.send(:token_names).should == { 54*16467b97STreehugger Robot 0 => "<invalid>", -1 => "<EOF>", 1 => "<EOR>", 55*16467b97STreehugger Robot 2 => "<DOWN>", 3 => "<UP>", 4 => "A", 56*16467b97STreehugger Robot 5 => "B", 6 => "'+'" 57*16467b97STreehugger Robot } 58*16467b97STreehugger Robot end 59*16467b97STreehugger Robot 60*16467b97STreehugger Robot example 'instance-level results of including a token scheme' do 61*16467b97STreehugger Robot end 62*16467b97STreehugger Robotend 63