mongo 1.0.9 → 1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,190 @@
1
+ # encoding: binary
2
+ require './test/test_helper'
3
+
4
+ class ByteBufferTest < Test::Unit::TestCase
5
+ include BSON
6
+
7
+ def setup
8
+ @buf = ByteBuffer.new
9
+ end
10
+
11
+ def test_initial_state
12
+ assert_equal 0, @buf.position
13
+ assert_equal [], @buf.to_a
14
+ assert_equal "", @buf.to_s
15
+ assert_equal 0, @buf.length
16
+ end
17
+
18
+ def test_nil_get_returns_one_byte
19
+ @buf.put_array([1, 2, 3, 4])
20
+ @buf.rewind
21
+ assert_equal 1, @buf.get
22
+ end
23
+
24
+ def test_one_get_returns_array_length_one
25
+ @buf.put_array([1, 2, 3, 4])
26
+ @buf.rewind
27
+ assert_equal [1], @buf.get(1)
28
+ end
29
+
30
+ def test_zero_get_returns_empty_array
31
+ @buf.put_array([1, 2, 3, 4])
32
+ @buf.rewind
33
+ assert_equal [], @buf.get(0)
34
+ end
35
+
36
+ def test_length
37
+ @buf.put_int 3
38
+ assert_equal 4, @buf.length
39
+ end
40
+
41
+ def test_default_order
42
+ assert_equal :little_endian, @buf.order
43
+ end
44
+
45
+ def test_long_length
46
+ @buf.put_long 1027
47
+ assert_equal 8, @buf.length
48
+ end
49
+
50
+ def test_get_long
51
+ @buf.put_long 1027
52
+ @buf.rewind
53
+ assert_equal 1027, @buf.get_long
54
+ end
55
+
56
+ def test_get_double
57
+ @buf.put_double 41.2
58
+ @buf.rewind
59
+ assert_equal 41.2, @buf.get_double
60
+ end
61
+
62
+ if defined?(Encoding)
63
+ def test_serialize_cstr_converts_encoding_to_utf8
64
+ theta = "hello \xC8".force_encoding("ISO-8859-7")
65
+ ByteBuffer.serialize_cstr(@buf, theta)
66
+ assert_equal "hello \xCE\x98\0", @buf.to_s
67
+ assert_equal Encoding.find('binary'), @buf.to_s.encoding
68
+ end
69
+
70
+ def test_serialize_cstr_validates_data_as_utf8
71
+ assert_raises(Encoding::UndefinedConversionError) do
72
+ ByteBuffer.serialize_cstr(@buf, "hello \xFF")
73
+ end
74
+ end
75
+ else
76
+ def test_serialize_cstr_forces_encoding_to_utf8
77
+ # Unicode snowman (\u2603)
78
+ ByteBuffer.serialize_cstr(@buf, "hello \342\230\203")
79
+ assert_equal "hello \342\230\203\0", @buf.to_s
80
+ end
81
+
82
+ def test_serialize_cstr_validates_data_as_utf8
83
+ assert_raises(BSON::InvalidStringEncoding) do
84
+ ByteBuffer.serialize_cstr(@buf, "hello \xFF")
85
+ end
86
+ end
87
+ end
88
+
89
+ def test_put_negative_byte
90
+ @buf.put(-1)
91
+ @buf.rewind
92
+ assert_equal 255, @buf.get
93
+ assert_equal "\xFF", @buf.to_s
94
+ end
95
+
96
+ def test_put_with_offset
97
+ @buf.put(1)
98
+ @buf.put(2, 0)
99
+ @buf.put(3, 3)
100
+ assert_equal "\x02\x00\x00\x03", @buf.to_s
101
+ end
102
+
103
+ def test_put_array_with_offset
104
+ @buf.put(1)
105
+ @buf.put_array([2, 3], 0)
106
+ @buf.put_array([4, 5], 4)
107
+ assert_equal "\x02\x03\x00\x00\x04\x05", @buf.to_s
108
+ end
109
+
110
+ def test_put_int_with_offset
111
+ @buf.put(1)
112
+ @buf.put_int(2, 0)
113
+ @buf.put_int(3, 5)
114
+ assert_equal "\x02\x00\x00\x00\x00\x03\x00\x00\x00", @buf.to_s
115
+ end
116
+
117
+ def test_put_long_with_offset
118
+ @buf.put(1)
119
+ @buf.put_long(2, 0)
120
+ @buf.put_long(3, 9)
121
+ assert_equal(
122
+ "\x02\x00\x00\x00\x00\x00\x00\x00" +
123
+ "\x00" +
124
+ "\x03\x00\x00\x00\x00\x00\x00\x00",
125
+ @buf.to_s)
126
+ end
127
+
128
+ def test_put_binary
129
+ @buf.put(1)
130
+ @buf.put_binary("\x02\x03", 0)
131
+ @buf.put_binary("\x04\x05", 4)
132
+ assert_equal "\x02\x03\x00\x00\x04\x05", @buf.to_s
133
+ end
134
+
135
+ def test_rewrite
136
+ @buf.put_int(0)
137
+ @buf.rewind
138
+ @buf.put_int(1027)
139
+ assert_equal 4, @buf.length
140
+ @buf.rewind
141
+ assert_equal 1027, @buf.get_int
142
+ assert_equal 4, @buf.position
143
+ end
144
+
145
+ def test_prepend_byte_buffer
146
+ @buf.put_int(4)
147
+ new_buf = ByteBuffer.new([5, 0, 0, 0])
148
+ @buf.prepend!(new_buf)
149
+ assert_equal [5, 0, 0, 0, 4, 0, 0, 0], @buf.to_a
150
+ end
151
+
152
+ def test_append_byte_buffer
153
+ @buf.put_int(4)
154
+ new_buf = ByteBuffer.new([5, 0, 0, 0])
155
+ @buf.append!(new_buf)
156
+ assert_equal [4, 0, 0, 0, 5, 0, 0, 0], @buf.to_a
157
+ end
158
+
159
+ def test_array_as_initial_input
160
+ @buf = ByteBuffer.new([5, 0, 0, 0])
161
+ assert_equal 4, @buf.size
162
+ assert_equal "\x05\x00\x00\x00", @buf.to_s
163
+ assert_equal [5, 0, 0, 0], @buf.to_a
164
+ @buf.put_int(32)
165
+ @buf.rewind
166
+ assert_equal 5, @buf.get_int
167
+ assert_equal 32, @buf.get_int
168
+ end
169
+
170
+ def test_binary_string_as_initial_input
171
+ str = "abcd"
172
+ str.force_encoding('binary') if str.respond_to?(:force_encoding)
173
+ @buf = ByteBuffer.new(str)
174
+ assert_equal "abcd", @buf.to_s
175
+ assert_equal [97, 98, 99, 100], @buf.to_a
176
+ @buf.put_int(0)
177
+ assert_equal [97, 98, 99, 100, 0, 0, 0, 0], @buf.to_a
178
+ end
179
+
180
+ def test_more
181
+ assert !@buf.more?
182
+ @buf.put_int(5)
183
+ assert !@buf.more?
184
+ @buf.rewind
185
+ assert @buf.more?
186
+ @buf.get_int
187
+ assert !@buf.more?
188
+ end
189
+
190
+ end
@@ -0,0 +1,51 @@
1
+ # encoding:utf-8
2
+ require 'test/test_helper'
3
+ require 'complex'
4
+ require 'bigdecimal'
5
+ require 'rational'
6
+ require 'benchmark'
7
+
8
+ MEDIUM = {
9
+ 'integer' => 5,
10
+ 'number' => 5.05,
11
+ 'boolean' => false,
12
+ 'array' => ['test', 'benchmark']
13
+ }
14
+
15
+
16
+ LARGE = {
17
+ 'base_url' => 'http://www.example.com/test-me',
18
+ 'total_word_count' => 6743,
19
+ 'access_time' => 123, #Time.now,
20
+ 'meta_tags' => {
21
+ 'description' => 'i am a long description string',
22
+ 'author' => 'Holly Man',
23
+ 'dynamically_created_meta_tag' => 'who know\n what'
24
+ },
25
+ 'page_structure' => {
26
+ 'counted_tags' => 3450,
27
+ 'no_of_js_attached' => 10,
28
+ 'no_of_images' => 6
29
+ },
30
+ 'harvested_words' => ['10gen','web','open','source','application','paas',
31
+ 'platform-as-a-service','technology','helps',
32
+ 'developers','focus','building','mongodb','mongo'] * 20
33
+ }
34
+
35
+ class CBSONTest < Test::Unit::TestCase
36
+ include BSON
37
+
38
+ def setup
39
+ @encoder = BSON::BSON_CODER
40
+ end
41
+
42
+ def test_nested_string
43
+ t0 = Time.now
44
+ 50000.times do
45
+ @encoder.serialize({'doc' => MEDIUM})
46
+ end
47
+ t1 = Time.now
48
+ puts t1 - t0
49
+ end
50
+
51
+ end
@@ -0,0 +1,146 @@
1
+ # encoding:utf-8
2
+ require './test/test_helper'
3
+ require 'complex'
4
+ require 'bigdecimal'
5
+ require 'rational'
6
+ require 'benchmark'
7
+
8
+ MEDIUM = {
9
+ 'integer' => 5,
10
+ 'number' => 5.05,
11
+ 'boolean' => false,
12
+ 'array' => ['test', 'benchmark']
13
+ }
14
+
15
+
16
+ LARGE = {
17
+ 'base_url' => 'http://www.example.com/test-me',
18
+ 'total_word_count' => 6743,
19
+ 'access_time' => 1,# Time.now,
20
+ 'meta_tags' => {
21
+ 'description' => 'i am a long description string',
22
+ 'author' => 'Holly Man',
23
+ 'dynamically_created_meta_tag' => 'who know\n what'
24
+ },
25
+ 'page_structure' => {
26
+ 'counted_tags' => 3450,
27
+ 'no_of_js_attached' => 10,
28
+ 'no_of_images' => 6
29
+ },
30
+ 'harvested_words' => ['10gen','web','open','source','application','paas',
31
+ 'platform-as-a-service','technology','helps',
32
+ 'developers','focus','building','mongodb','mongo'] * 20
33
+ }
34
+
35
+ # Tests and benchmarks specific to the JRuby BSON serializer
36
+ if RUBY_PLATFORM =~ /java/
37
+ class BSONTest < Test::Unit::TestCase
38
+ include BSON
39
+
40
+ def setup
41
+ @encoder = BSON::BSON_RUBY
42
+ @decoder = BSON::BSON_RUBY
43
+ @con = Mongo::Connection.new
44
+ end
45
+
46
+ def assert_doc_pass(doc, options={})
47
+ bson = @encoder.serialize(doc)
48
+ if options[:debug]
49
+ puts "DEBUGGIN DOC:"
50
+ p bson.to_a
51
+ puts "DESERIALIZES TO:"
52
+ p @decoder.deserialize(bson)
53
+ end
54
+ assert_equal @decoder.serialize(doc).to_a, bson.to_a
55
+ assert_equal doc, @decoder.deserialize(bson)
56
+ end
57
+
58
+ # def test_bench_big_string
59
+ # t0 = Time.now
60
+ # @con['foo']['bar'].remove
61
+ # doc = {'doc' => 'f' * 2_000_000}
62
+ # 10.times do
63
+ # @con['foo']['bar'].save({'d' => doc})
64
+ # @con['foo']['bar'].find.to_a
65
+ # end
66
+ # puts "Big String"
67
+ # puts Time.now - t0
68
+ # end
69
+ #
70
+ # def test_big_array
71
+ # t0 = Time.now
72
+ # @con['foo']['bar'].remove
73
+ # doc = {'doc' => 'f' * 2_000_000}
74
+ # 10.times do
75
+ # @con['foo']['bar'].save({'d' => doc})
76
+ # @con['foo']['bar'].find.to_a
77
+ # end
78
+ # puts "Big String"
79
+ # puts Time.now - t0
80
+ # end
81
+ #
82
+ # def test_string
83
+ # doc = {'doc' => "Hello world!", 'awesome' => true, 'a' => 1, 'b' => 4_333_433_232, 'c' => 2.33, 'd' => nil,
84
+ # 'f' => BSON::Code.new("function"), 'g' => BSON::ObjectId.new, 'h' => [1, 2, 3]}
85
+ # bson = @encoder.serialize(doc)
86
+ # d = @encoder.deserialize(bson)
87
+ # puts "Array"
88
+ # puts d
89
+ # puts d['h']
90
+ # puts "End Array"
91
+ # puts d['h'][0]
92
+ # puts d['h'][1]
93
+ # puts (d['h'][2] + 100).class
94
+ # puts "ObjecId Info"
95
+ # bson2 = @encoder.serialize(d)
96
+ # doc2 = @encoder.deserialize(bson2)
97
+ # assert_equal doc2, @encoder.deserialize(bson)
98
+ # end
99
+ #
100
+
101
+ def test_eval
102
+ code = BSON::Code.new('f')
103
+ oh = BSON::OrderedHash.new
104
+ oh[:$eval] = code
105
+ oh[:args] = [1]
106
+
107
+ assert_equal BSON::BSON_RUBY.serialize(oh).to_a, BSON::BSON_JAVA.serialize(oh).to_a
108
+ end
109
+
110
+ # def test_oid
111
+ # b = Java::OrgBsonTypes::ObjectId.new.toByteArray
112
+ # o = ObjectId.new(b)
113
+ # p o
114
+ # end
115
+ #
116
+ # def test_speed
117
+ # @con['foo']['bar'].remove
118
+ #
119
+ # puts "Test OID"
120
+ # t0 = Time.now
121
+ # 5000.times do
122
+ # BSON::ObjectId.new
123
+ # end
124
+ # puts Time.now - t0
125
+ #
126
+ # puts "Test insert"
127
+ # t0 = Time.now
128
+ # 1000.times do |n|
129
+ # if n % 1000 == 0
130
+ # puts Time.now - t0
131
+ # t0 = Time.now
132
+ # end
133
+ # @con['foo']['bar'].insert({'doc' => MEDIUM})
134
+ # end
135
+ # puts Time.now - t0
136
+ #
137
+ # puts "Test query / deserialize"
138
+ # t0 = Time.now
139
+ # @con['foo']['bar'].find.to_a
140
+ # t1 = Time.now
141
+ # puts t1 - t0
142
+ # end
143
+
144
+
145
+ end
146
+ end
@@ -0,0 +1,24 @@
1
+ # encoding:utf-8
2
+ require './test/test_helper'
3
+
4
+ # Special tests for the JRuby encoder only
5
+ if RUBY_PLATFORM =~ /java/
6
+
7
+ class JRubyBSONTest < Test::Unit::TestCase
8
+ include BSON
9
+
10
+ def setup
11
+ @encoder = BSON::BSON_CODER
12
+ @decoder = BSON::BSON_RUBY
13
+ end
14
+
15
+ def test_object_id
16
+ oid = {'doc' => BSON::ObjectId.new}
17
+ p oid['doc'].data
18
+ bson = @encoder.serialize(oid)
19
+ assert_equal oid, @encoder.deserialize(bson)
20
+ end
21
+
22
+ end
23
+
24
+ end
@@ -0,0 +1,438 @@
1
+ # encoding:utf-8
2
+ require 'test/test_helper'
3
+ require 'complex'
4
+ require 'bigdecimal'
5
+ require 'rational'
6
+ require 'benchmark'
7
+
8
+ MEDIUM = {
9
+ 'integer' => 5,
10
+ 'number' => 5.05,
11
+ 'boolean' => false,
12
+ 'array' => ['test', 'benchmark']
13
+ }
14
+
15
+
16
+ LARGE = {
17
+ 'base_url' => 'http://www.example.com/test-me',
18
+ 'total_word_count' => 6743,
19
+ 'access_time' => 123, #Time.now,
20
+ 'meta_tags' => {
21
+ 'description' => 'i am a long description string',
22
+ 'author' => 'Holly Man',
23
+ 'dynamically_created_meta_tag' => 'who know\n what'
24
+ },
25
+ 'page_structure' => {
26
+ 'counted_tags' => 3450,
27
+ 'no_of_js_attached' => 10,
28
+ 'no_of_images' => 6
29
+ },
30
+ 'harvested_words' => ['10gen','web','open','source','application','paas',
31
+ 'platform-as-a-service','technology','helps',
32
+ 'developers','focus','building','mongodb','mongo'] * 20
33
+ }
34
+
35
+ class BSONTest < Test::Unit::TestCase
36
+ include BSON
37
+
38
+ def setup
39
+ @encoder = BSON::BSON_CODER
40
+ end
41
+
42
+ def assert_doc_pass(doc)
43
+ bson = @encoder.serialize(doc)
44
+ p bson.to_a
45
+ puts "#{doc.inspect} serializes to #{bson.inspect}"
46
+
47
+ assert_equal doc, BSON::BSON_RUBY.deserialize(bson)
48
+ end
49
+
50
+ def test_string
51
+ doc = {'doc' => 'the well-tempered clavier'}
52
+ BSON::BSON_RUBY.serialize(doc)
53
+ bson = @encoder.serialize(doc)
54
+ assert_equal doc, BSON::BSON_RUBY.deserialize(bson.to_s)
55
+ end
56
+
57
+ def test_nested_string
58
+ t0 = Time.now
59
+ 500.times do
60
+ @encoder.serialize({'doc' => MEDIUM})
61
+ end
62
+ t1 = Time.now
63
+ puts t1 - t0
64
+ end
65
+
66
+ def test_array
67
+ doc = {'doc' => ['1', '2', '3']}
68
+ assert_doc_pass(doc)
69
+ puts "Here's the doc"
70
+ p doc.class
71
+ bson = @encoder.serialize(doc)
72
+ assert_equal bson.to_s, BSON::BSON_RUBY.serialize(doc).to_s
73
+ end
74
+
75
+ def test_number
76
+ assert_doc_pass({'doc' => 1})
77
+ end
78
+
79
+ def test_object
80
+ assert_doc_pass({'doc' => {'age' => 42, 'name' => 'Spongebob', 'shoe_size' => 9.5}})
81
+ end
82
+
83
+ def test_code
84
+ @reduce_function = "function (obj, prev) { prev.count += inc_value; }"
85
+ doc = {"a" => Code.new(@reduce_function, {"a" => 1})}
86
+ assert_doc_pass(doc)
87
+ end
88
+
89
+ def test_date
90
+ doc = {'date' => Time.now}
91
+ d = BSON::BSON_RUBY.serialize(doc)
92
+ p d.to_s
93
+ e = BSON::BSON_JAVA.serialize(doc)
94
+ p e.to_s
95
+ assert_doc_pass(doc)
96
+ #bson = @e.serialize(doc)
97
+ #doc2 = BSON::BSON_CODER.deserialize(bson)
98
+ # Mongo only stores up to the millisecond
99
+ #assert_in_delta doc['date'], doc2['date'], 0.001
100
+ end
101
+
102
+ # def test_float
103
+ # doc = {'a' => 1}
104
+ # assert_doc_pass(doc)
105
+ # end
106
+ #
107
+ # def test_group_cmd
108
+ # initial = {"c" => 0}
109
+ # reduce = "function (obj, prev) { prev.c += inc_value; }"
110
+ # group_command = {
111
+ # "group" => {
112
+ # "ns" => 'col',
113
+ # "$reduce" => reduce,
114
+ # "cond" => {},
115
+ # "initial" => initial
116
+ # }
117
+ # }
118
+ #
119
+ # assert_doc_pass(group_command)
120
+ # end
121
+ #
122
+ # context "Grouping" do
123
+ # setup do
124
+ # @@test.remove
125
+ # @@test.save("a" => 1)
126
+ # @@test.save("b" => 1)
127
+ # @initial = {"count" => 0}
128
+ # @reduce_function = "function (obj, prev) { prev.count += inc_value; }"
129
+ # end
130
+ #
131
+ # should "group results using eval form" do
132
+ # p @@test.group([], {}, @initial, Code.new(@reduce_function, {"inc_value" => 1}))
133
+ # p @@test.group([], {}, @initial, Code.new(@reduce_function, {"inc_value" => 2}))
134
+ # assert_equal 2, @@test.group([], {}, @initial, Code.new(@reduce_function, {"inc_value" => 1}))[0]["count"]
135
+ # assert_equal 4, @@test.group([], {}, @initial, Code.new(@reduce_function, {"inc_value" => 2}))[0]["count"]
136
+ # end
137
+ # end
138
+ #
139
+ # def test_find_and_modify
140
+ # @@test << { :a => 1, :processed => false }
141
+ # @@test << { :a => 2, :processed => false }
142
+ # @@test << { :a => 3, :processed => false }
143
+ # p @@test.find.to_a
144
+ #
145
+ # @@test.find_and_modify(:query => {}, :sort => [['a', -1]], :update => {"$set" => {"processed" => true}})
146
+ #
147
+ # p @@test.find.to_a
148
+ # assert @@test.find_one({:a => 3})['processed']
149
+ # end
150
+ #
151
+ # def test_invalid_string
152
+ # require 'iconv'
153
+ # string = Iconv.conv('iso-8859-1', 'utf-8', 'aé')
154
+ # doc = {'doc' => string}
155
+ # bson = @encoder.serialize(doc)
156
+ # assert_equal doc, @encoder.deserialize(bson)
157
+ # end
158
+ #
159
+ # def test_null
160
+ # #doc = {"\x00" => "foo"}
161
+ # #@encoder.serialize(doc)
162
+ # @encoder.serialize({"a" => (Regexp.compile "ab\x00c")})
163
+ # end
164
+
165
+ # def test_dbref
166
+ # oid = ObjectID.new
167
+ # doc = {}
168
+ # doc['dbref'] = DBRef.new('namespace', oid)
169
+ # bson = BSON::BSON_CODER.serialize(doc)
170
+ # doc2 = BSON::BSON_CODER.deserialize(bson)
171
+ # puts doc2.class
172
+ # puts doc2
173
+ # assert_equal 'namespace', doc2['dbref'].namespace
174
+ # assert_equal oid, doc2['dbref'].object_id
175
+ # end
176
+
177
+ # def test_null_character
178
+ # #assert_raise InvalidDocument do
179
+ # bson = @encoder.serialize({"\x00" => "a"})
180
+ # puts bson
181
+ # #end
182
+ # puts BSON_RUBY.deserialize(bson)
183
+ #
184
+ # #assert_raise InvalidDocument do
185
+ # # @encoder.serialize({"a" => (Regexp.compile "ab\x00c")})
186
+ # #end
187
+ # end
188
+ #
189
+ ## def test_symbol_key
190
+ # doc = {:foo => "bar"}
191
+ # p doc.keys
192
+ # bson = @coder.serialize(doc)
193
+ # new_doc = {"foo" => "bar"}
194
+ # assert_equal new_doc, @coder.deserialize(bson)
195
+ # end
196
+ #
197
+ #
198
+ # def test_string
199
+ # assert_doc_pass({'doc' => 'hello, world'})
200
+ # end
201
+ #
202
+ ##
203
+ # require 'iconv'
204
+ # def test_invalid_string
205
+ # require 'iconv'
206
+ # string = Iconv.conv('iso-8859-1', 'utf-8', 'aé')
207
+ # doc = {'doc' => string}
208
+ # bson = @coder.serialize(doc)
209
+ # assert_equal doc, @coder.deserialize(bson)
210
+ # end
211
+ #
212
+ #
213
+ # def test_nested_string
214
+ # assert_doc_pass({'doc' => {'text' => 'hello, world'}})
215
+ # end
216
+ #
217
+ # def test_array
218
+ # assert_doc_pass({'doc' => ['1', '2', '3']})
219
+ # end
220
+ #
221
+ # def test_number
222
+ # assert_doc_pass({'doc' => 1})
223
+ # end
224
+ #
225
+ # def test_object
226
+ # assert_doc_pass({'doc' => {'age' => 42, 'name' => 'Spongebob', 'shoe_size' => 9.5}})
227
+ # end
228
+ #
229
+ # def test_boolean
230
+ # assert_doc_pass({'foo' => true})
231
+ # assert_doc_pass({'foo' => false})
232
+ # end
233
+ #
234
+ # def test_nil
235
+ # assert_doc_pass({'foo' => nil})
236
+ # end
237
+ #
238
+ # def test_time
239
+ # assert_doc_pass({'foo' => Time.now})
240
+ # end
241
+ #
242
+ # def test_simple_regex
243
+ # assert_doc_pass({'foo' => /^a/})
244
+ # end
245
+ #
246
+ # def test_regex_with_options
247
+ # assert_doc_pass({'foo' => /^a/imx})
248
+ # end
249
+ #
250
+ # def test_symbol
251
+ # assert_doc_pass({'foo' => :bar})
252
+ # end
253
+ #
254
+ # def test_binary
255
+ # doc = {'foo' => BSON::Binary.new("ABCDE".unpack("C*"))}
256
+ # bson = @coder.serialize(doc)
257
+ # de = @coder.deserialize(bson)
258
+ # assert_equal doc, de
259
+ # end
260
+ #
261
+ # def test_valid_utf8_string
262
+ # doc = {'doc' => 'aé'}
263
+ # bson = bson = BSON::BSON_CODER.serialize(doc)
264
+ # assert_equal doc, BSON::BSON_CODER.deserialize(bson)
265
+ # end
266
+ #
267
+ # def test_valid_utf8_key
268
+ # doc = {'aé' => 'hello'}
269
+ # bson = bson = BSON::BSON_CODER.serialize(doc)
270
+ # assert_equal doc, BSON::BSON_CODER.deserialize(bson)
271
+ # end
272
+ #
273
+ # def test_number
274
+ # doc = {'doc' => 41.99}
275
+ # bson = BSON::BSON_CODER.serialize(doc)
276
+ # assert_equal doc, BSON::BSON_CODER.deserialize(bson)
277
+ # end
278
+ #
279
+ # def test_int
280
+ # doc = {'doc' => 42}
281
+ # bson = BSON::BSON_CODER.serialize(doc)
282
+ # assert_equal doc, BSON::BSON_CODER.deserialize(bson)
283
+ #
284
+ # doc = {"doc" => -5600}
285
+ # bson = BSON::BSON_CODER.serialize(doc)
286
+ # assert_equal doc, BSON::BSON_CODER.deserialize(bson)
287
+ #
288
+ # doc = {"doc" => 2147483647}
289
+ # bson = BSON::BSON_CODER.serialize(doc)
290
+ # assert_equal doc, BSON::BSON_CODER.deserialize(bson)
291
+ #
292
+ # doc = {"doc" => -2147483648}
293
+ # bson = BSON::BSON_CODER.serialize(doc)
294
+ # assert_equal doc, BSON::BSON_CODER.deserialize(bson)
295
+ # end
296
+ #
297
+ # def test_obj
298
+ # doc = {'doc' => {'age' => 42, 'name' => 'Spongebob', 'shoe_size' => 9.5}}
299
+ # bson = BSON::BSON_CODER.serialize(doc)
300
+ # assert_equal doc, BSON::BSON_CODER.deserialize(bson)
301
+ #
302
+ # doc = {"a" => 10, "b" => 20}# {'doc' => {'age' => 42, 'name' => 'Spongebob', 'shoe_size' => 9.5}}
303
+ # bson = BSON::BSON_CODER.serialize(doc)
304
+ # assert_equal doc, BSON::BSON_CODER.deserialize(bson)
305
+ # end
306
+ #
307
+ # def test_oh
308
+ # oh = BSON::OrderedHash.new
309
+ # oh["z"] = 10
310
+ # oh["a"] = 1
311
+ # bson = BSON::BSON_CODER.serialize(oh)
312
+ # p bson
313
+ # assert_equal oh, BSON::BSON_CODER.deserialize(bson)
314
+ # end
315
+ #
316
+ def test_ordered_hash
317
+ # doc = BSON::OrderedHash.new
318
+ # doc["b"] = 1
319
+ # doc["a"] = 2
320
+ # doc["c"] = 3
321
+ # doc["d"] = 4
322
+ # bson1 = BSON::BSON_CODER.serialize(doc)
323
+ # bson2 = BSON::BSON_RUBY.serialize({"b" => 1, "a" => 2, "c" => 3, "d" => 4})
324
+ # bson3 = BSON::BSON_RUBY.serialize({"b" => '1', "a" => '2', "c" => '3', "d" => '4'})
325
+ # p bson1
326
+ # p bson2
327
+ # p bson3
328
+ # p BSON::BSON_CODER.deserialize(bson3)
329
+ # assert_equal doc, BSON::BSON_RUBY.deserialize(bson3)
330
+ end
331
+ #
332
+ # def test_object
333
+ # doc = {'doc' => {'age' => 42, 'name' => 'Spongebob', 'shoe_size' => 9.5}}
334
+ # bson = BSON::BSON_CODER.serialize(doc)
335
+ # assert_equal doc, BSON::BSON_CODER.deserialize(bson)
336
+ # end
337
+ #
338
+ ## def test_oid
339
+ ## doc = {'doc' => ObjectID.new}
340
+ ## bson = BSON::BSON_CODER.serialize(doc)
341
+ ## assert_equal doc, BSON::BSON_CODER.deserialize(bson)
342
+ ## end
343
+ ##
344
+ ## def test_array
345
+ ## doc = {'doc' => [1, 2, 'a', 'b']}
346
+ ## bson = BSON::BSON_CODER.serialize(doc)
347
+ ## assert_equal doc, BSON::BSON_CODER.deserialize(bson)
348
+ ## end
349
+ ##
350
+ ## def test_invalid_object
351
+ ## doc = {'foo' => Object.new}
352
+ ## assert_raise InvalidDocument do
353
+ ## @coder.serialize(doc)
354
+ ## end
355
+ ##
356
+ ## assert_raise InvalidDocument do
357
+ ## @coder.serialize({'date' => Date.today})
358
+ ## end
359
+ ## end
360
+ ##
361
+ ##
362
+ ## def test_regex
363
+ ## doc = {'doc' => /foobar/i}
364
+ ## bson = BSON::BSON_CODER.serialize(doc)
365
+ ## doc2 = BSON::BSON_CODER.deserialize(bson)
366
+ ## assert_equal doc, doc2
367
+ ##
368
+ ## r = doc2['doc']
369
+ ## assert_kind_of Regexp, r
370
+ ##
371
+ ## doc = {'doc' => r}
372
+ ## bson_doc = BSON::BSON_CODER.serialize(doc)
373
+ ## doc2 = nil
374
+ ## doc2 = BSON::BSON_CODER.deserialize(bson_doc)
375
+ ## assert_equal doc, doc2
376
+ ## end
377
+ ##
378
+ # def test_boolean
379
+ # doc = {'doc' => true}
380
+ # bson = BSON::BSON_CODER.serialize(doc)
381
+ # assert_equal doc, BSON::BSON_CODER.deserialize(bson)
382
+ # end
383
+ #
384
+ # def test_date
385
+ # doc = {'date' => Time.now}
386
+ # bson = BSON::BSON_CODER.serialize(doc)
387
+ # doc2 = BSON::BSON_CODER.deserialize(bson)
388
+ # # Mongo only stores up to the millisecond
389
+ # assert_in_delta doc['date'], doc2['date'], 0.001
390
+ # end
391
+ #
392
+ # def test_date_returns_as_utc
393
+ # doc = {'date' => Time.now}
394
+ # bson = BSON::BSON_CODER.serialize(doc)
395
+ # doc2 = BSON::BSON_CODER.deserialize(bson)
396
+ # assert doc2['date'].utc?
397
+ # end
398
+ #
399
+ ## def test_dbref
400
+ ## oid = ObjectID.new
401
+ ## doc = {}
402
+ ## doc['dbref'] = DBRef.new('namespace', oid)
403
+ ## bson = BSON::BSON_CODER.serialize(doc)
404
+ ## doc2 = BSON::BSON_CODER.deserialize(bson)
405
+ ## assert_equal 'namespace', doc2['dbref'].namespace
406
+ ## assert_equal oid, doc2['dbref'].object_id
407
+ ## end
408
+ ##
409
+ # def test_symbol
410
+ # doc = {'sym' => :foo}
411
+ # bson = BSON::BSON_CODER.serialize(doc)
412
+ # doc2 = BSON::BSON_CODER.deserialize(bson)
413
+ # assert_equal :foo, doc2['sym']
414
+ # end
415
+ ##
416
+ ### def test_regex_extended
417
+ ### assert_doc_pass({'foo' => /^a/x})
418
+ ### end
419
+ ###
420
+ # def test_object_id
421
+ # assert_doc_pass({'_id' => BSON::ObjectID.new})
422
+ # end
423
+ #
424
+ # def test_where
425
+ # assert_doc_pass({'$where' => "function() { print('hello'); }"})
426
+ # end
427
+ #
428
+ # def test_min_max_keys
429
+ # assert_doc_pass({'doc' => BSON::MaxKey.new})
430
+ # assert_doc_pass({'doc' => BSON::MinKey.new})
431
+ # end
432
+ #
433
+ # def test_code
434
+ # code = BSON::Code.new("print('hello')")
435
+ # code.scope = {:foo => 2}
436
+ # assert_doc_pass({'doc' => code})
437
+ # end
438
+ end