Skip to content

Commit f445162

Browse files
committed
Add tests for encoding and decoding of all types
1 parent 2ab37ad commit f445162

File tree

3 files changed

+250
-63
lines changed

3 files changed

+250
-63
lines changed

tests/modules/encoder.rs

Lines changed: 0 additions & 62 deletions
This file was deleted.

tests/modules/encoder_decoder.rs

Lines changed: 249 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,249 @@
1+
extern crate bson;
2+
extern crate chrono;
3+
4+
use std::io::Cursor;
5+
use bson::{Bson, decode_document, encode_document};
6+
use bson::oid::ObjectId;
7+
use bson::spec::BinarySubtype;
8+
use chrono::UTC;
9+
use chrono::offset::TimeZone;
10+
11+
#[test]
12+
fn test_encode_decode_floating_point() {
13+
let src = 1020.123;
14+
let dst = vec![18, 0, 0, 0, 1, 107, 101, 121, 0, 68, 139, 108, 231, 251, 224, 143, 64, 0];
15+
16+
let doc = doc!{ "key" => src };
17+
18+
let mut buf = Vec::new();
19+
encode_document(&mut buf, &doc).unwrap();
20+
21+
assert_eq!(buf, dst);
22+
23+
let decoded = decode_document(&mut Cursor::new(buf)).unwrap();
24+
assert_eq!(decoded, doc);
25+
}
26+
27+
#[test]
28+
fn test_encode_decode_utf8_string() {
29+
let src = "test你好吗".to_owned();
30+
let dst = vec![28, 0, 0, 0, 2, 107, 101, 121, 0, 14, 0, 0, 0, 116, 101, 115, 116, 228, 189, 160, 229, 165, 189, 229, 144, 151, 0, 0];
31+
32+
let doc = doc!{ "key" => src };
33+
34+
let mut buf = Vec::new();
35+
encode_document(&mut buf, &doc).unwrap();
36+
37+
assert_eq!(buf, dst);
38+
39+
let decoded = decode_document(&mut Cursor::new(buf)).unwrap();
40+
assert_eq!(decoded, doc);
41+
}
42+
43+
#[test]
44+
fn test_encode_decode_array() {
45+
let src = vec![Bson::FloatingPoint(1.01), Bson::String("xyz".to_owned())];
46+
let dst = vec![37, 0, 0, 0, 4, 107, 101, 121, 0, 27, 0, 0, 0, 1, 48, 0, 41, 92, 143, 194, 245, 40, 240, 63, 2, 49, 0, 4, 0, 0, 0, 120, 121, 122, 0, 0, 0];
47+
48+
let doc = doc!{ "key" => src };
49+
50+
let mut buf = Vec::new();
51+
encode_document(&mut buf, &doc).unwrap();
52+
53+
assert_eq!(buf, dst);
54+
55+
let decoded = decode_document(&mut Cursor::new(buf)).unwrap();
56+
assert_eq!(decoded, doc);
57+
}
58+
59+
#[test]
60+
fn test_encode_decode_document() {
61+
let src = doc! { "subkey" => 1 };
62+
let dst = vec![27, 0, 0, 0, 3, 107, 101, 121, 0, 17, 0, 0, 0, 16, 115, 117, 98, 107, 101, 121, 0, 1, 0, 0, 0, 0, 0];
63+
64+
let doc = doc!{ "key" => src };
65+
66+
let mut buf = Vec::new();
67+
encode_document(&mut buf, &doc).unwrap();
68+
69+
assert_eq!(buf, dst);
70+
71+
let decoded = decode_document(&mut Cursor::new(buf)).unwrap();
72+
assert_eq!(decoded, doc);
73+
}
74+
75+
#[test]
76+
fn test_encode_decode_boolean() {
77+
let src = true;
78+
let dst = vec![11, 0, 0, 0, 8, 107, 101, 121, 0, 1, 0];
79+
80+
let doc = doc!{ "key" => src };
81+
82+
let mut buf = Vec::new();
83+
encode_document(&mut buf, &doc).unwrap();
84+
85+
assert_eq!(buf, dst);
86+
87+
let decoded = decode_document(&mut Cursor::new(buf)).unwrap();
88+
assert_eq!(decoded, doc);
89+
}
90+
91+
#[test]
92+
fn test_encode_decode_null() {
93+
let src = Bson::Null;
94+
let dst = vec![10, 0, 0, 0, 10, 107, 101, 121, 0, 0];
95+
96+
let doc = doc!{ "key" => src };
97+
98+
let mut buf = Vec::new();
99+
encode_document(&mut buf, &doc).unwrap();
100+
101+
assert_eq!(buf, dst);
102+
103+
let decoded = decode_document(&mut Cursor::new(buf)).unwrap();
104+
assert_eq!(decoded, doc);
105+
}
106+
107+
#[test]
108+
fn test_encode_decode_regexp() {
109+
let src = Bson::RegExp("1".to_owned(), "2".to_owned());
110+
let dst = vec![14, 0, 0, 0, 11, 107, 101, 121, 0, 49, 0, 50, 0, 0];
111+
112+
let doc = doc!{ "key" => src };
113+
114+
let mut buf = Vec::new();
115+
encode_document(&mut buf, &doc).unwrap();
116+
117+
assert_eq!(buf, dst);
118+
119+
let decoded = decode_document(&mut Cursor::new(buf)).unwrap();
120+
assert_eq!(decoded, doc);
121+
}
122+
123+
#[test]
124+
fn test_encode_decode_javascript_code() {
125+
let src = Bson::JavaScriptCode("1".to_owned());
126+
let dst = vec![16, 0, 0, 0, 13, 107, 101, 121, 0, 2, 0, 0, 0, 49, 0, 0];
127+
128+
let doc = doc!{ "key" => src };
129+
130+
let mut buf = Vec::new();
131+
encode_document(&mut buf, &doc).unwrap();
132+
133+
assert_eq!(buf, dst);
134+
135+
let decoded = decode_document(&mut Cursor::new(buf)).unwrap();
136+
assert_eq!(decoded, doc);
137+
}
138+
139+
//#[test]
140+
//fn test_encode_decode_javascript_code_with_scope() {
141+
// let src = Bson::JavaScriptCodeWithScope("1".to_owned(), doc!{});
142+
// let dst = vec![25, 0, 0, 0, 15, 107, 101, 121, 0, 12, 0, 0, 0, 2, 0, 0, 0, 49, 0, 5, 0, 0, 0, 0, 0];
143+
//
144+
// let doc = doc!{ "key" => src };
145+
//
146+
// let mut buf = Vec::new();
147+
// encode_document(&mut buf, &doc).unwrap();
148+
//
149+
// assert_eq!(buf, dst);
150+
//
151+
// let decoded = decode_document(&mut Cursor::new(buf)).unwrap();
152+
// assert_eq!(decoded, doc);
153+
//}
154+
155+
#[test]
156+
fn test_encode_decode_i32() {
157+
let src = 100i32;
158+
let dst = vec![14, 0, 0, 0, 16, 107, 101, 121, 0, 100, 0, 0, 0, 0];
159+
160+
let doc = doc!{ "key" => src };
161+
162+
let mut buf = Vec::new();
163+
encode_document(&mut buf, &doc).unwrap();
164+
165+
assert_eq!(buf, dst);
166+
167+
let decoded = decode_document(&mut Cursor::new(buf)).unwrap();
168+
assert_eq!(decoded, doc);
169+
}
170+
171+
#[test]
172+
fn test_encode_decode_i64() {
173+
let src = 100i64;
174+
let dst = vec![18, 0, 0, 0, 18, 107, 101, 121, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0];
175+
176+
let doc = doc!{ "key" => src };
177+
178+
let mut buf = Vec::new();
179+
encode_document(&mut buf, &doc).unwrap();
180+
181+
assert_eq!(buf, dst);
182+
183+
let decoded = decode_document(&mut Cursor::new(buf)).unwrap();
184+
assert_eq!(decoded, doc);
185+
}
186+
187+
#[test]
188+
fn test_encode_decode_timestamp() {
189+
let src = Bson::TimeStamp(100);
190+
let dst = vec![18, 0, 0, 0, 17, 107, 101, 121, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0];
191+
192+
let doc = doc!{ "key" => src };
193+
194+
let mut buf = Vec::new();
195+
encode_document(&mut buf, &doc).unwrap();
196+
197+
assert_eq!(buf, dst);
198+
199+
let decoded = decode_document(&mut Cursor::new(buf)).unwrap();
200+
assert_eq!(decoded, doc);
201+
}
202+
203+
#[test]
204+
fn test_encode_binary_generic() {
205+
let src = (BinarySubtype::Generic, vec![0, 1, 2, 3, 4]);
206+
let dst = vec![20, 0, 0, 0, 5, 107, 101, 121, 0, 5, 0, 0, 0, 0, 0, 1, 2, 3, 4, 0];
207+
208+
let doc = doc!{ "key" => src };
209+
210+
let mut buf = Vec::new();
211+
encode_document(&mut buf, &doc).unwrap();
212+
213+
assert_eq!(buf, dst);
214+
215+
let decoded = decode_document(&mut Cursor::new(buf)).unwrap();
216+
assert_eq!(decoded, doc);
217+
}
218+
219+
#[test]
220+
fn test_encode_decode_object_id() {
221+
let src = ObjectId::with_string("507f1f77bcf86cd799439011").unwrap();
222+
let dst = vec![22, 0, 0, 0, 7, 107, 101, 121, 0, 80, 127, 31, 119, 188, 248, 108, 215, 153, 67, 144, 17, 0];
223+
224+
let doc = doc!{ "key" => src };
225+
226+
let mut buf = Vec::new();
227+
encode_document(&mut buf, &doc).unwrap();
228+
229+
assert_eq!(buf, dst);
230+
231+
let decoded = decode_document(&mut Cursor::new(buf)).unwrap();
232+
assert_eq!(decoded, doc);
233+
}
234+
235+
#[test]
236+
fn test_encode_utc_date_time() {
237+
let src = UTC.timestamp(1286705410, 0);
238+
let dst = vec![18, 0, 0, 0, 9, 107, 101, 121, 0, 208, 111, 158, 149, 43, 1, 0, 0, 0];
239+
240+
let doc = doc!{ "key" => src };
241+
242+
let mut buf = Vec::new();
243+
encode_document(&mut buf, &doc).unwrap();
244+
245+
assert_eq!(buf, dst);
246+
247+
let decoded = decode_document(&mut Cursor::new(buf)).unwrap();
248+
assert_eq!(decoded, doc);
249+
}

tests/modules/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
mod encoder;
1+
mod encoder_decoder;
22
mod macros;
33
mod oid;
44
mod ordered;

0 commit comments

Comments
 (0)