class Confire::Parser
Parses the google test case
Attributes
filename[RW]
lines_per_test_case[RW]
Public Class Methods
new(options = {})
click to toggle source
Remember to set:
filename to read (will blow a ArgumentError if not set) lines_per_test_case
# File lib/confire/parser.rb, line 9 def initialize(options = {}) @filename = options[:filename] @lines_per_test_case = options[:lines_per_test_case] || 1 @logger = options[:logger] end
Public Instance Methods
parse(test_case_processor, line_processor = nil)
click to toggle source
This will read a given test case and pass that into the test_case_processor.
A test case is defined as the number of lines_per_test_case Can optionally pass in a line_processor that will process a line before adding it to the buffer. Will stop reading after we hit the number of test cases defined in the file
Assumption: Number of test cases is defined in the first line
# File lib/confire/parser.rb, line 20 def parse(test_case_processor, line_processor = nil) (raise ArgumentError.new('Missing input filename to parse')) unless @filename line_counter = -1 test_cases_read = 0 test_cases = 0 line_buffer = [] IO.foreach(@filename) do |line| line.strip! # read number of cases if line_counter == -1 test_cases = line.to_i # if unable to parse or we get 0, blow up raise ArgumentError.new('Missing number of test cases on first line') if test_cases == 0 line_counter = 0 # process the test case elsif line_counter == (lines_per_test_case - 1) line = line_processor.call(line) if line_processor line_buffer << line test_cases_read += 1 test_case_processor.call(line_buffer, test_cases_read) line_buffer = [] line_counter = 0 return if test_cases_read == test_cases # keep reading else line = line_processor.call(line) if line_processor line_buffer << line line_counter += 1 end end end