53 lines
1.5 KiB
Ruby
53 lines
1.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
require 'namarara'
|
|
|
|
describe Namarara::Parser do
|
|
let(:parser) do
|
|
Namarara::Parser.new(Namarara::Lexer.new)
|
|
end
|
|
|
|
it 'has to report var which is not defined' do
|
|
line = 'character = true'
|
|
parser.names = {}
|
|
token = parser.parse(line)
|
|
errors = token.errors.select do |el|
|
|
el.is_a? Namarara::Errors::VarNotDefined
|
|
end
|
|
_(errors.size).must_equal 1
|
|
_(errors[0].var).must_equal 'character'
|
|
end
|
|
|
|
it 'has to report vars which are not defined' do
|
|
line = 'a_girl_has_no_name AND character'
|
|
parser.names = {}
|
|
token = parser.parse(line)
|
|
errors = token.errors.select do |el|
|
|
el.is_a? Namarara::Errors::VarNotDefined
|
|
end
|
|
_(errors.size).must_equal 2
|
|
_(errors[0].var).must_equal 'a_girl_has_no_name'
|
|
_(errors[1].var).must_equal 'character'
|
|
end
|
|
|
|
it 'has to report invalid_grammar' do
|
|
line = '( a_girl_has_no_name = true ) ' \
|
|
'ANDAND ( character = "Arya Stark" ) OR false AND true'
|
|
parser.names = { 'a_girl_has_no_name' => true, 'character' => 'Arya Stark' }
|
|
token = parser.parse(line)
|
|
parser.check_grammar line, token
|
|
_(token.errors.select do |elem|
|
|
elem.is_a? Namarara::Errors::InvalidGrammar
|
|
end.size).must_equal 1
|
|
end
|
|
|
|
it 'has to be nil when grammar is completely invalid' do
|
|
line = 'false / "Arya"'
|
|
parser.names = {}
|
|
token = parser.parse(line)
|
|
parser.check_grammar line, token
|
|
assert_nil token
|
|
end
|
|
end
|