-
Notifications
You must be signed in to change notification settings - Fork 3
/
hstore_serializer_spec.rb
81 lines (66 loc) · 2.84 KB
/
hstore_serializer_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
describe HstoreSerializer do
it "should recognize a valid hstore string" do
"".valid_hstore?.should be_true
"a=>b".valid_hstore?.should be_true
'"a"=>"b"'.valid_hstore?.should be_true
'"a" => "b"'.valid_hstore?.should be_true
'"a"=>"b","c"=>"d"'.valid_hstore?.should be_true
'"a"=>"b", "c"=>"d"'.valid_hstore?.should be_true
'"a" => "b", "c"=>"d"'.valid_hstore?.should be_true
'"a"=>"b","c" => "d"'.valid_hstore?.should be_true
'k => v'.valid_hstore?.should be_true
'foo => bar, baz => whatever'.valid_hstore?.should be_true
'"1-a" => "anything at all"'.valid_hstore?.should be_true
'key => NULL'.valid_hstore?.should be_true
%q(c=>"}", "\"a\""=>"b \"a b").valid_hstore?.should be_true
end
it "should not recognize an invalid hstore string" do
'"a"=>"b",Hello?'.valid_hstore?.should be_false
end
it "should convert hash to hstore string and back (sort of)" do
{:a => 1, :b => 2}.to_hstore.from_hstore.should eq({"a" => "1", "b" => "2"})
end
it "should convert hstore string to hash" do
'"a"=>"1", "b"=>"2"'.from_hstore.should eq({'a' => '1', 'b' => '2'})
end
it "should quote correctly" do
{:a => "'a'"}.to_hstore.should eq(%q(a=>'a'))
end
it "should quote keys correctly" do
{"'a'" => "a"}.to_hstore.should eq(%q('a'=>a))
end
it "should preserve null values on store" do
# NULL=>b will be interpreted as the string pair "NULL"=>"b"
{'a' => nil, nil=>'b'}.to_hstore.should eq(%q(a=>NULL,NULL=>b))
end
it "should preserve null values on load" do
'a=>null,b=>NuLl,c=>"NuLl",null=>c'.from_hstore.should eq({'a'=>nil,'b'=>nil,'c'=>'NuLl','null'=>'c'})
end
it "should quote tokens with nothing space comma equals or greaterthan" do
{' '=>''}.to_hstore.should eq(%q(" "=>""))
{','=>''}.to_hstore.should eq(%q(","=>""))
{'='=>''}.to_hstore.should eq(%q("="=>""))
{'>'=>''}.to_hstore.should eq(%q(">"=>""))
end
it "should unquote keys correctly with single quotes" do
"\"'a'\"=>\"a\"".from_hstore.should eq({"'a'" => "a"})
'\=a=>q=w'.from_hstore.should eq({"=a"=>"q=w"})
'"=a"=>q\=w'.from_hstore.should eq({"=a"=>"q=w"});
'"\"a"=>q>w'.from_hstore.should eq({"\"a"=>"q>w"});
'\"a=>q"w'.from_hstore.should eq({"\"a"=>"q\"w"})
end
it "should quote keys and values correctly with combinations of single and double quotes" do
{ %q("a') => %q(b "a' b) }.to_hstore.should eq(%q(\"a'=>"b \"a' b"))
end
it "should unquote keys and values correctly with combinations of single and double quotes" do
%q("\"a'"=>"b \"a' b").from_hstore.should eq({%q("a') => %q(b "a' b)})
end
it "should convert empty hash" do
{}.to_hstore.should eq("")
end
it "should convert empty string" do
''.from_hstore.should eq({})
' '.from_hstore.should eq({})
end
end