spec/parser_spec.rb in nydp-0.0.2 vs spec/parser_spec.rb in nydp-0.0.3
- old
+ new
@@ -1,10 +1,8 @@
require 'spec_helper'
describe Nydp::Parser do
-
- let(:ns) { { } }
let(:aa) { Nydp::Symbol.mk :aa, ns }
let(:a) { Nydp::Symbol.mk :a, ns }
let(:b) { Nydp::Symbol.mk :b, ns }
let(:c) { Nydp::Symbol.mk :c, ns }
let(:d) { Nydp::Symbol.mk :d, ns }
@@ -19,22 +17,10 @@
let(:comment) { Nydp::Symbol.mk :comment, ns }
let(:dotsyn) { Nydp::Symbol.mk :"dot-syntax", ns }
let(:cocosyn) { Nydp::Symbol.mk :"colon-colon-syntax", ns }
let(:colosyn) { Nydp::Symbol.mk :"colon-syntax", ns }
- def sym name
- Nydp::Symbol.mk name.to_sym, ns
- end
-
- def parse txt
- Nydp::Parser.new(ns).expression(Nydp::Tokeniser.new txt)
- end
-
- def pair_list xs, last=Nydp.NIL
- Nydp::Pair.from_list xs, last
- end
-
it "should return a stream of tokens" do
t = Nydp::Tokeniser.new ""
expect(t.next_token).to eq nil
end
@@ -118,15 +104,29 @@
expected = pair_list [x1, x2, x3]
expect(parse '(1 "hello there \"jimmy\"" 3)').to eq expected
end
+ it "should handle escaped tabs and newlines inside a string" do
+ expected = Nydp::StringAtom.new "hello\tworld\nnice day"
+ parsed = parse "\"hello\\tworld\\nnice day\""
+ expect(parsed).to eq expected
+ end
+
+ it "should parse a brace list" do
+ expect(parse "{a b c d}").to eq pair_list [sym("brace-list"), a, b, c, d]
+ end
+
it "should parse a plain symbol" do
expect(parse "foo").to eq foo
end
it "should parse a dotted symbol" do
expect(parse "foo.bar").to eq pair_list([dotsyn, foo, bar])
+ end
+
+ it "should parse a dotted symbol" do
+ expect(parse "(list a b foo.bar c)").to eq pair_list([sym(:list), a, b, pair_list([dotsyn, foo, bar]), c])
end
it "should parse a colon-colon symbol" do
expect(parse "foo::bar").to eq pair_list([cocosyn, foo, bar])
end