X-Git-Url: https://review.fuel-infra.org/gitweb?a=blobdiff_plain;f=spec%2Funit%2Fmatcher%2Fscanner_spec.rb;fp=spec%2Funit%2Fmatcher%2Fscanner_spec.rb;h=a0bdd149ab84aa28a28f09da4602fa1502803cf9;hb=b87d2f4e68281062df1913440ca5753ae63314a9;hp=0000000000000000000000000000000000000000;hpb=ab0ea530b8ac956091f17b104ab2311336cfc250;p=packages%2Fprecise%2Fmcollective.git diff --git a/spec/unit/matcher/scanner_spec.rb b/spec/unit/matcher/scanner_spec.rb new file mode 100755 index 0000000..a0bdd14 --- /dev/null +++ b/spec/unit/matcher/scanner_spec.rb @@ -0,0 +1,174 @@ +#! /usr/bin/env rspec + +require 'spec_helper' + +module MCollective + module Matcher + describe 'scanner' do + it "should identify a '(' token" do + scanner = Scanner.new("(") + token = scanner.get_token + token.should == ["(", "("] + end + + it "should identify a ')' token" do + scanner = Scanner.new(")") + token = scanner.get_token + token.should == [")", ")"] + end + + it "should identify a 'and' token" do + scanner = Scanner.new("and ") + token = scanner.get_token + token.should == ["and", "and"] + end + + it "should identify a 'or' token" do + scanner = Scanner.new("or ") + token = scanner.get_token + token.should == ["or", "or"] + end + + it "should identify a 'not' token" do + scanner = Scanner.new("not ") + token = scanner.get_token + token.should == ["not", "not"] + end + + it "should identify a '!' token" do + scanner = Scanner.new("!") + token = scanner.get_token + token.should == ["not", "not"] + end + + it "should identify a fact statement token" do + scanner = Scanner.new("foo=bar") + token = scanner.get_token + token.should == ["statement", "foo=bar"] + end + + it "should identify a fact statement token" do + scanner = Scanner.new("foo=bar") + token = scanner.get_token + token.should == ["statement", "foo=bar"] + end + + it "should identify a class statement token" do + scanner = Scanner.new("/class/") + token = scanner.get_token + token.should == ["statement", "/class/"] + end + + it "should identify a function statement token with a dot value" do + scanner = Scanner.new("foo('bar').baz") + token = scanner.get_token + token.should == ["fstatement", "foo('bar').baz"] + end + + it "should identify a function statement token without a dot value" do + scanner = Scanner.new("foo('bar')") + token = scanner.get_token + token.should == ["fstatement", "foo('bar')"] + end + + it "should identify a function statement with multiple parameters" do + scanner = Scanner.new("foo('bar','baz')") + token = scanner.get_token + token.should == ["fstatement", "foo('bar','baz')"] + end + + it "should identify a bad token when a function is missing its end bracket" do + scanner = Scanner.new("foo(") + token = scanner.get_token + token.should == ["bad_token", [0,3]] + end + + it "should identify a bad token when there is a regex before a comparison operator" do + scanner = Scanner.new("/foo/=bar") + token = scanner.get_token + token.should == ["bad_token", [0,8]] + end + + it "should identify a bad token where there is a forward slash before a comparison operator" do + scanner = Scanner.new("/foo=bar") + token = scanner.get_token + token.should == ["bad_token", [0,7]] + end + + it "should identify a bad token where there is only one forward slash after a comparison operator" do + scanner = Scanner.new("foo=/bar") + token = scanner.get_token + token.should == ["bad_token", [0,7]] + end + + it "should identify a bad token where function parameters are not in single quotes" do + scanner = Scanner.new("foo(bar)") + token = scanner.get_token + token.should == ["bad_token", [0,7]] + end + + it "should identify a bad token where there are non alphanumerical or underscore chars in the dot value" do + scanner = Scanner.new("foo('bar').val-ue") + token = scanner.get_token + token.should == ["bad_token", [0,16]] + end + + it "should identify a bad token where there are chained dot values" do + scanner = Scanner.new("foo('bar').a.b") + token = scanner.get_token + token.should == ["bad_token", [0,13]] + end + + it "should identify bad tokens where function parameters are not comma seperated" do + scanner = Scanner.new("foo('a' 'b')") + token = scanner.get_token + token.should == ["bad_token", [0,11]] + + scanner = Scanner.new("foo(\"a\" \"b\")") + token = scanner.get_token + token.should == ["bad_token", [0,11]] + + end + + it "should identify fstatement tokens where the values and the comparison operator are seperated by whitespaces" do + scanner = Scanner.new("foo('a').bar = 1") + token = scanner.get_token + token.should == ["fstatement", "foo('a').bar=1"] + end + + it "should identify statement tokens where the values and the comparison operator are seperated by whitespaces" do + scanner = Scanner.new("a = c") + token = scanner.get_token + token.should == ["statement", "a=c"] + end + + it "should idenify a function statement where a parameter is an empty string" do + scanner = Scanner.new("foo('')") + token = scanner.get_token + token.should == ["fstatement", "foo('')"] + end + + it "should correctly tokenize a statement with escaped qoutes in parameters" do + scanner = Scanner.new("foo('\"bar\"')") + token = scanner.get_token + token.should == ["fstatement", "foo('\"bar\"')"] + + scanner = Scanner.new('foo("\'bar\'")') + token =scanner.get_token + token.should == ["fstatement", "foo(\"'bar'\")"] + end + + it "should correctly tokenize a statement where a regular expression contains parentheses" do + scanner = Scanner.new("foo=/bar(1|2)/") + token = scanner.get_token + token.should == ["statement", "foo=/bar(1|2)/"] + end + + it "should correctly tokenize a statement with a comparison operator in a parameter" do + scanner = Scanner.new("foo('bar=baz')") + token = scanner.get_token + token.should == ["fstatement", "foo('bar=baz')"] + end + end + end +end