module ANTLR3::Test::GrammarManager
Constants
- ANTLR_JAR
- DEFAULT_COMPILE_OPTIONS
Public Class Methods
add_default_compile_option( name, value )
click to toggle source
# File lib/antlr3/test/functional.rb, line 63 def add_default_compile_option( name, value ) DEFAULT_COMPILE_OPTIONS[ name ] = value end
Public Instance Methods
compile( grammar, options = {} )
click to toggle source
# File lib/antlr3/test/functional.rb, line 134 def compile( grammar, options = {} ) grammar.compile( compile_options.merge( options ) ) import_grammar_targets( grammar ) return grammar end
compile_options( defaults = nil )
click to toggle source
# File lib/antlr3/test/functional.rb, line 128 def compile_options( defaults = nil ) @compile_options ||= DEFAULT_COMPILE_OPTIONS.clone @compile_options.update( defaults ) if defaults return @compile_options end
const_missing( name )
click to toggle source
Compile and load inline grammars on demand when their constant name is referenced in the code. This makes it easier to catch big errors quickly as test cases are run, instead of waiting a few minutes for all grammars to compile, and then discovering there’s a big dumb error ruining most of the grammars.
Calls superclass method
# File lib/antlr3/test/functional.rb, line 81 def const_missing( name ) if g = grammars[ name.to_s ] compile( g ) grammars.delete( name.to_s ) const_get( name ) elsif superclass.respond_to?( :grammars ) superclass.const_missing( name ) # ^-- for some reason, in ruby 1.9, rspec runs examples as instances of # anonymous subclasses, of the actual test class, which messes up the # assumptions made in the test code. Grammars are stored in @grammars belonging # to the test class, so in 1.9, this method is called with @grammars = {} # since it's a subclass else super end end
grammar_count()
click to toggle source
# File lib/antlr3/test/functional.rb, line 106 def grammar_count grammars.length end
grammars()
click to toggle source
An index of grammar file objects created in the test class (defined inline or loaded from a file)
# File lib/antlr3/test/functional.rb, line 102 def grammars @grammars ||= {} end
inline_grammar( source, options = {} )
click to toggle source
# File lib/antlr3/test/functional.rb, line 118 def inline_grammar( source, options = {} ) call = call_stack.find { |call| call.file != __FILE__ } grammar = Grammar.inline source, :output_directory => output_directory, :file => ( call.file rescue nil ), :line => ( call.line rescue nil ) register_grammar( grammar ) return grammar end
load_grammar( name )
click to toggle source
# File lib/antlr3/test/functional.rb, line 110 def load_grammar( name ) path = local_path( name.to_s ) path =~ /\.g$/ or path << '.g' grammar = Grammar.new( path, :output_directory => output_directory ) register_grammar( grammar ) return grammar end
Private Instance Methods
add_default_compile_option( name, value )
click to toggle source
# File lib/antlr3/test/functional.rb, line 63 def add_default_compile_option( name, value ) DEFAULT_COMPILE_OPTIONS[ name ] = value end
register_grammar( grammar )
click to toggle source
# File lib/antlr3/test/functional.rb, line 142 def register_grammar( grammar ) name = grammar.name @grammars ||= {} if conflict = @grammars[ name ] and conflict.source != grammar.source message = "Multiple grammars exist with the name ``#{ name }''" raise NameError, message else @grammars[ name ] = grammar end end