mirror of
https://github.com/zhigang1992/RubyMotion.git
synced 2026-04-13 22:45:27 +08:00
104 lines
3.6 KiB
Ruby
104 lines
3.6 KiB
Ruby
describe "Regexps with modifers" do
|
|
it 'supports /i (case-insensitive)' do
|
|
/foo/i.match("FOO").to_a.should == ["FOO"]
|
|
end
|
|
|
|
it 'supports /m (multiline)' do
|
|
/foo.bar/m.match("foo\nbar").to_a.should == ["foo\nbar"]
|
|
/foo.bar/.match("foo\nbar").should be_nil
|
|
end
|
|
|
|
it 'supports /x (extended syntax)' do
|
|
/\d +/x.match("abc123").to_a.should == ["123"] # Quantifiers can be separated from the expression they apply to
|
|
end
|
|
|
|
=begin
|
|
it 'supports /o (once)' do
|
|
2.times do |i|
|
|
/#{i}/o.should == /0/
|
|
end
|
|
end
|
|
|
|
# RubyMotion does not support /o
|
|
it 'invokes substitutions for /o only once' do
|
|
ScratchPad.record []
|
|
to_s_callback = Proc.new do
|
|
ScratchPad << :to_s_callback
|
|
"class_with_to_s"
|
|
end
|
|
o = LanguageSpecs::ClassWith_to_s.new(to_s_callback)
|
|
2.times { /#{o}/o }
|
|
ScratchPad.recorded.should == [:to_s_callback]
|
|
end
|
|
=end
|
|
|
|
it 'supports modifier combinations' do
|
|
/foo/imox.match("foo").to_a.should == ["foo"]
|
|
/foo/imoximox.match("foo").to_a.should == ["foo"]
|
|
|
|
#lambda { eval('/foo/a') }.should raise_error(SyntaxError)
|
|
end
|
|
|
|
it 'supports (?imx-imx) (inline modifiers)' do
|
|
/(?i)foo/.match("FOO").to_a.should == ["FOO"]
|
|
/foo(?i)/.match("FOO").should be_nil
|
|
# Interaction with /i
|
|
/(?-i)foo/i.match("FOO").should be_nil
|
|
/foo(?-i)/i.match("FOO").to_a.should == ["FOO"]
|
|
# Multiple uses
|
|
/foo (?i)bar (?-i)baz/.match("foo BAR baz").to_a.should == ["foo BAR baz"]
|
|
/foo (?i)bar (?-i)baz/.match("foo BAR BAZ").should be_nil
|
|
|
|
/(?m)./.match("\n").to_a.should == ["\n"]
|
|
/.(?m)/.match("\n").should be_nil
|
|
# Interaction with /m
|
|
/(?-m)./m.match("\n").should be_nil
|
|
/.(?-m)/m.match("\n").to_a.should == ["\n"]
|
|
# Multiple uses
|
|
/. (?m). (?-m)./.match(". \n .").to_a.should == [". \n ."]
|
|
/. (?m). (?-m)./.match(". \n \n").should be_nil
|
|
|
|
/(?x) foo /.match("foo").to_a.should == ["foo"]
|
|
/ foo (?x)/.match("foo").should be_nil
|
|
# Interaction with /x
|
|
/(?-x) foo /x.match("foo").should be_nil
|
|
/ foo (?-x)/x.match("foo").to_a.should == ["foo"]
|
|
# Multiple uses
|
|
/( foo )(?x)( bar )(?-x)( baz )/.match(" foo bar baz ").to_a.should == [" foo bar baz ", " foo ", "bar", " baz "]
|
|
/( foo )(?x)( bar )(?-x)( baz )/.match(" foo barbaz").should be_nil
|
|
|
|
# Parsing
|
|
/(?i-i)foo/.match("FOO").should be_nil
|
|
/(?ii)foo/.match("FOO").to_a.should == ["FOO"]
|
|
/(?-)foo/.match("foo").to_a.should == ["foo"]
|
|
#lambda { eval('/(?a)/') }.should raise_error(SyntaxError)
|
|
#lambda { eval('/(?o)/') }.should raise_error(SyntaxError)
|
|
end
|
|
|
|
it 'supports (?imx-imx:expr) (scoped inline modifiers)' do
|
|
/foo (?i:bar) baz/.match("foo BAR baz").to_a.should == ["foo BAR baz"]
|
|
/foo (?i:bar) baz/.match("foo BAR BAZ").should be_nil
|
|
/foo (?-i:bar) baz/i.match("foo BAR BAZ").should be_nil
|
|
|
|
/. (?m:.) ./.match(". \n .").to_a.should == [". \n ."]
|
|
/. (?m:.) ./.match(". \n \n").should be_nil
|
|
/. (?-m:.) ./m.match("\n \n \n").should be_nil
|
|
|
|
/( foo )(?x: bar )( baz )/.match(" foo bar baz ").to_a.should == [" foo bar baz ", " foo ", " baz "]
|
|
/( foo )(?x: bar )( baz )/.match(" foo barbaz").should be_nil
|
|
/( foo )(?-x: bar )( baz )/x.match("foo bar baz").to_a.should == ["foo bar baz", "foo", "baz"]
|
|
|
|
# Parsing
|
|
/(?i-i:foo)/.match("FOO").should be_nil
|
|
/(?ii:foo)/.match("FOO").to_a.should == ["FOO"]
|
|
/(?-:)foo/.match("foo").to_a.should == ["foo"]
|
|
#lambda { eval('/(?a:)/') }.should raise_error(SyntaxError)
|
|
#lambda { eval('/(?o:)/') }.should raise_error(SyntaxError)
|
|
end
|
|
|
|
it 'supports . with /m' do
|
|
# Basic matching
|
|
/./m.match("\n").to_a.should == ["\n"]
|
|
end
|
|
end
|