spec/zscan_spec.rb in zscan-1.0 vs spec/zscan_spec.rb in zscan-1.0.1
- old
+ new
@@ -62,6 +62,35 @@
assert_equal ' ', z.scan(/\s*(\#.*$\s*)*/)
z.pos = 1
assert_equal '', z.scan(/(?<=a)/)
assert_equal nil, z.scan(/^/)
end
+
+ it "stack doesn't underflow" do
+ @z.push
+ @z.pop
+ @z.pop
+ @z.pos = 3
+ @z.push
+ @z.pos = 4
+ @z.pop
+ assert_equal 3, @z.pos
+ end
+
+ it "#try restores pos" do
+ z = ZScan.new "hello"
+ return1 = z.try do
+ z.scan 'h'
+ z.scan 'e'
+ end
+ assert_equal 'e', return1
+ assert_equal 2, z.pos
+
+ return2 = z.try do
+ z.scan 'l'
+ z.scan 'l'
+ z.scan 'p' # fails
+ end
+ assert_equal nil, return2
+ assert_equal 2, z.pos
+ end
end