bson 4.2.0.rc1-java → 4.2.1-java

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.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/lib/bson-ruby.jar +0 -0
  5. data/lib/bson/array.rb +1 -1
  6. data/lib/bson/binary.rb +4 -2
  7. data/lib/bson/code.rb +1 -1
  8. data/lib/bson/code_with_scope.rb +1 -1
  9. data/lib/bson/date.rb +1 -1
  10. data/lib/bson/date_time.rb +1 -1
  11. data/lib/bson/decimal128.rb +2 -2
  12. data/lib/bson/false_class.rb +1 -1
  13. data/lib/bson/float.rb +1 -1
  14. data/lib/bson/hash.rb +1 -1
  15. data/lib/bson/integer.rb +1 -1
  16. data/lib/bson/object_id.rb +1 -1
  17. data/lib/bson/open_struct.rb +1 -1
  18. data/lib/bson/regexp.rb +87 -19
  19. data/lib/bson/specialized.rb +1 -1
  20. data/lib/bson/string.rb +1 -1
  21. data/lib/bson/symbol.rb +1 -1
  22. data/lib/bson/time.rb +1 -1
  23. data/lib/bson/timestamp.rb +1 -1
  24. data/lib/bson/true_class.rb +1 -1
  25. data/lib/bson/version.rb +1 -1
  26. data/spec/bson/array_spec.rb +1 -1
  27. data/spec/bson/binary_spec.rb +2 -1
  28. data/spec/bson/corpus_spec.rb +68 -0
  29. data/spec/bson/decimal128_spec.rb +5 -1
  30. data/spec/bson/int64_spec.rb +47 -0
  31. data/spec/bson/raw_spec.rb +562 -0
  32. data/spec/bson/regexp_spec.rb +7 -7
  33. data/spec/spec_helper.rb +1 -0
  34. data/spec/support/corpus-tests/array.json +43 -0
  35. data/spec/support/corpus-tests/boolean.json +27 -0
  36. data/spec/support/corpus-tests/code.json +67 -0
  37. data/spec/support/corpus-tests/code_w_scope.json +78 -0
  38. data/spec/support/corpus-tests/document.json +36 -0
  39. data/spec/support/corpus-tests/double.json +69 -0
  40. data/spec/support/corpus-tests/failures/binary.json +69 -0
  41. data/spec/support/corpus-tests/failures/datetime.json +31 -0
  42. data/spec/support/corpus-tests/failures/dbpointer.json +42 -0
  43. data/spec/support/corpus-tests/failures/int64.json +38 -0
  44. data/spec/support/corpus-tests/failures/symbol.json +62 -0
  45. data/spec/support/corpus-tests/failures/undefined.json +13 -0
  46. data/spec/support/corpus-tests/int32.json +38 -0
  47. data/spec/support/corpus-tests/maxkey.json +12 -0
  48. data/spec/support/corpus-tests/minkey.json +12 -0
  49. data/spec/support/corpus-tests/null.json +12 -0
  50. data/spec/support/corpus-tests/oid.json +28 -0
  51. data/spec/support/corpus-tests/regex.json +37 -0
  52. data/spec/support/corpus-tests/string.json +67 -0
  53. data/spec/support/corpus-tests/timestamp.json +18 -0
  54. data/spec/support/corpus-tests/top.json +62 -0
  55. data/spec/support/corpus.rb +265 -0
  56. data/spec/support/shared_examples.rb +1 -1
  57. metadata +51 -3
  58. metadata.gz.sig +0 -0
@@ -0,0 +1,31 @@
1
+ {
2
+ "description": "DateTime",
3
+ "bson_type": "0x09",
4
+ "test_key": "a",
5
+ "valid": [
6
+ {
7
+ "description": "epoch",
8
+ "bson": "10000000096100000000000000000000",
9
+ "extjson": "{\"a\" : {\"$date\" : \"1970-01-01T00:00:00.000Z\"}}",
10
+ "canonical_extjson": "{\"a\" : {\"$date\" : {\"$numberLong\" : \"0\"}}}"
11
+ },
12
+ {
13
+ "description": "positive ms",
14
+ "bson": "10000000096100C4D8D6CC3B01000000",
15
+ "extjson": "{\"a\" : {\"$date\" : \"2012-12-24T12:15:30.500Z\"}}",
16
+ "canonical_extjson": "{\"a\" : {\"$date\" : {\"$numberLong\" : \"1356351330500\"}}}"
17
+ },
18
+ {
19
+ "description": "negative",
20
+ "bson": "10000000096100C43CE7B9BDFFFFFF00",
21
+ "extjson": "{\"a\" : {\"$date\" : \"1960-12-24T12:15:30.500Z\"}}",
22
+ "canonical_extjson": "{\"a\" : {\"$date\" : {\"$numberLong\" : \"-284643869500\"}}}"
23
+ }
24
+ ],
25
+ "decodeErrors": [
26
+ {
27
+ "description": "datetime field truncated",
28
+ "bson": "0C0000000961001234567800"
29
+ }
30
+ ]
31
+ }
@@ -0,0 +1,42 @@
1
+ {
2
+ "description": "DBPointer type (deprecated)",
3
+ "bson_type": "0x0C",
4
+ "deprecated": true,
5
+ "test_key": "a",
6
+ "valid": [
7
+ {
8
+ "description": "DBpointer",
9
+ "bson": "1A0000000C610002000000620056E1FC72E0C917E9C471416100"
10
+ },
11
+ {
12
+ "description": "With two-byte UTF-8",
13
+ "bson": "1B0000000C610003000000C3A90056E1FC72E0C917E9C471416100"
14
+ }
15
+ ],
16
+ "decodeErrors": [
17
+ {
18
+ "description": "String with negative length",
19
+ "bson": "1A0000000C6100FFFFFFFF620056E1FC72E0C917E9C471416100"
20
+ },
21
+ {
22
+ "description": "String with zero length",
23
+ "bson": "1A0000000C610000000000620056E1FC72E0C917E9C471416100"
24
+ },
25
+ {
26
+ "description": "String not null terminated",
27
+ "bson": "1A0000000C610002000000626256E1FC72E0C917E9C471416100"
28
+ },
29
+ {
30
+ "description": "short OID (less than minimum length for field)",
31
+ "bson": "160000000C61000300000061620056E1FC72E0C91700"
32
+ },
33
+ {
34
+ "description": "short OID (greater than minimum, but truncated)",
35
+ "bson": "1A0000000C61000300000061620056E1FC72E0C917E9C4716100"
36
+ },
37
+ {
38
+ "description": "String with bad UTF-8",
39
+ "bson": "1A0000000C610002000000E90056E1FC72E0C917E9C471416100"
40
+ }
41
+ ]
42
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "description": "Int64 type",
3
+ "bson_type": "0x12",
4
+ "test_key": "a",
5
+ "valid": [
6
+ {
7
+ "description": "MinValue",
8
+ "bson": "10000000126100000000000000008000",
9
+ "extjson": "{\"a\" : {\"$numberLong\" : \"-9223372036854775808\"}}"
10
+ },
11
+ {
12
+ "description": "MaxValue",
13
+ "bson": "10000000126100FFFFFFFFFFFFFF7F00",
14
+ "extjson": "{\"a\" : {\"$numberLong\" : \"9223372036854775807\"}}"
15
+ },
16
+ {
17
+ "description": "-1",
18
+ "bson": "10000000126100FFFFFFFFFFFFFFFF00",
19
+ "extjson": "{\"a\" : {\"$numberLong\" : \"-1\"}}"
20
+ },
21
+ {
22
+ "description": "0",
23
+ "bson": "10000000126100000000000000000000",
24
+ "extjson": "{\"a\" : {\"$numberLong\" : \"0\"}}"
25
+ },
26
+ {
27
+ "description": "1",
28
+ "bson": "10000000126100010000000000000000",
29
+ "extjson": "{\"a\" : {\"$numberLong\" : \"1\"}}"
30
+ }
31
+ ],
32
+ "decodeErrors": [
33
+ {
34
+ "description": "int64 field truncated",
35
+ "bson": "0C0000001261001234567800"
36
+ }
37
+ ]
38
+ }
@@ -0,0 +1,62 @@
1
+ {
2
+ "description": "Symbol",
3
+ "bson_type": "0x0E",
4
+ "deprecated": true,
5
+ "test_key": "a",
6
+ "valid": [
7
+ {
8
+ "description": "Empty string",
9
+ "bson": "0D0000000E6100010000000000"
10
+ },
11
+ {
12
+ "description": "Single character",
13
+ "bson": "0E0000000E610002000000620000"
14
+ },
15
+ {
16
+ "description": "Multi-character",
17
+ "bson": "190000000E61000D0000006162616261626162616261620000"
18
+ },
19
+ {
20
+ "description": "two-byte UTF-8 (\u00e9)",
21
+ "bson": "190000000E61000D000000C3A9C3A9C3A9C3A9C3A9C3A90000"
22
+ },
23
+ {
24
+ "description": "three-byte UTF-8 (\u2606)",
25
+ "bson": "190000000E61000D000000E29886E29886E29886E298860000"
26
+ },
27
+ {
28
+ "description": "Embedded nulls",
29
+ "bson": "190000000E61000D0000006162006261620062616261620000"
30
+ }
31
+ ],
32
+ "decodeErrors": [
33
+ {
34
+ "description": "bad symbol length: 0 (but no 0x00 either)",
35
+ "bson": "0C0000000261000000000000"
36
+ },
37
+ {
38
+ "description": "bad symbol length: -1",
39
+ "bson": "0C000000026100FFFFFFFF00"
40
+ },
41
+ {
42
+ "description": "bad symbol length: eats terminator",
43
+ "bson": "10000000026100050000006200620000"
44
+ },
45
+ {
46
+ "description": "bad symbol length: longer than rest of document",
47
+ "bson": "120000000200FFFFFF00666F6F6261720000"
48
+ },
49
+ {
50
+ "description": "symbol is not null-terminated",
51
+ "bson": "1000000002610004000000616263FF00"
52
+ },
53
+ {
54
+ "description": "empty symbol, but extra null",
55
+ "bson": "0E00000002610001000000000000"
56
+ },
57
+ {
58
+ "description": "invalid UTF-8",
59
+ "bson": "0E00000002610002000000E90000"
60
+ }
61
+ ]
62
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "description": "Undefined type (deprecated)",
3
+ "bson_type": "0x06",
4
+ "deprecated": true,
5
+ "test_key": "a",
6
+ "valid": [
7
+ {
8
+ "description": "Undefined",
9
+ "bson": "0800000006610000",
10
+ "extjson": "{\"a\" : {\"$undefined\" : true}}"
11
+ }
12
+ ]
13
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "description": "Int32 type",
3
+ "bson_type": "0x10",
4
+ "test_key": "i",
5
+ "valid": [
6
+ {
7
+ "description": "MinValue",
8
+ "bson": "0C0000001069000000008000",
9
+ "extjson": "{\"i\" : -2147483648}"
10
+ },
11
+ {
12
+ "description": "MaxValue",
13
+ "bson": "0C000000106900FFFFFF7F00",
14
+ "extjson": "{\"i\" : 2147483647}"
15
+ },
16
+ {
17
+ "description": "-1",
18
+ "bson": "0C000000106900FFFFFFFF00",
19
+ "extjson": "{\"i\" : -1}"
20
+ },
21
+ {
22
+ "description": "0",
23
+ "bson": "0C0000001069000000000000",
24
+ "extjson": "{\"i\" : 0}"
25
+ },
26
+ {
27
+ "description": "1",
28
+ "bson": "0C0000001069000100000000",
29
+ "extjson": "{\"i\" : 1}"
30
+ }
31
+ ],
32
+ "decodeErrors": [
33
+ {
34
+ "description": "Bad int32 field length",
35
+ "bson": "090000001061000500"
36
+ }
37
+ ]
38
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "description": "Maxkey type",
3
+ "bson_type": "0xFF",
4
+ "test_key": "a",
5
+ "valid": [
6
+ {
7
+ "description": "Maxkey",
8
+ "bson": "080000007F610000",
9
+ "extjson": "{\"a\" : {\"$maxKey\" : 1}}"
10
+ }
11
+ ]
12
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "description": "Minkey type",
3
+ "bson_type": "0xFF",
4
+ "test_key": "a",
5
+ "valid": [
6
+ {
7
+ "description": "Minkey",
8
+ "bson": "08000000FF610000",
9
+ "extjson": "{\"a\" : {\"$minKey\" : 1}}"
10
+ }
11
+ ]
12
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "description": "Null type",
3
+ "bson_type": "0x0A",
4
+ "test_key": "a",
5
+ "valid": [
6
+ {
7
+ "description": "Null",
8
+ "bson": "080000000A610000",
9
+ "extjson": "{\"a\" : null}"
10
+ }
11
+ ]
12
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "description": "ObjectId",
3
+ "bson_type": "0x07",
4
+ "test_key": "a",
5
+ "valid": [
6
+ {
7
+ "description": "All zeroes",
8
+ "bson": "1400000007610000000000000000000000000000",
9
+ "extjson": "{\"a\" : {\"$oid\" : \"000000000000000000000000\"}}"
10
+ },
11
+ {
12
+ "description": "All ones",
13
+ "bson": "14000000076100FFFFFFFFFFFFFFFFFFFFFFFF00",
14
+ "extjson": "{\"a\" : {\"$oid\" : \"ffffffffffffffffffffffff\"}}"
15
+ },
16
+ {
17
+ "description": "Random",
18
+ "bson": "1400000007610056E1FC72E0C917E9C471416100",
19
+ "extjson": "{\"a\" : {\"$oid\" : \"56e1fc72e0c917e9c4714161\"}}"
20
+ }
21
+ ],
22
+ "decodeErrors": [
23
+ {
24
+ "description": "OID truncated",
25
+ "bson": "1200000007610056E1FC72E0C917E9C471"
26
+ }
27
+ ]
28
+ }
@@ -0,0 +1,37 @@
1
+ {
2
+ "description": "Regular Expression type",
3
+ "bson_type": "0x0B",
4
+ "test_key": "a",
5
+ "valid": [
6
+ {
7
+ "description": "empty regex with no options",
8
+ "bson": "0A0000000B6100000000",
9
+ "extjson": "{\"a\" : {\"$regex\" : \"\", \"$options\" : \"\"}}"
10
+ },
11
+ {
12
+ "description": "regex without options",
13
+ "bson": "0D0000000B6100616263000000",
14
+ "extjson": "{\"a\" : {\"$regex\" : \"abc\", \"$options\" : \"\"}}"
15
+ },
16
+ {
17
+ "description": "regex with options",
18
+ "bson": "0F0000000B610061626300696D0000",
19
+ "extjson": "{\"a\" : {\"$regex\" : \"abc\", \"$options\" : \"im\"}}"
20
+ },
21
+ {
22
+ "description": "regex with slash",
23
+ "bson": "110000000B610061622F636400696D0000",
24
+ "extjson": "{\"a\" : {\"$regex\" : \"ab/cd\", \"$options\" : \"im\"}}"
25
+ }
26
+ ],
27
+ "decodeErrors": [
28
+ {
29
+ "description": "embedded null in pattern",
30
+ "bson": "0F0000000B610061006300696D0000"
31
+ },
32
+ {
33
+ "description": "embedded null in flags",
34
+ "bson": "100000000B61006162630069006D0000"
35
+ }
36
+ ]
37
+ }
@@ -0,0 +1,67 @@
1
+ {
2
+ "description": "String",
3
+ "bson_type": "0x02",
4
+ "test_key": "a",
5
+ "valid": [
6
+ {
7
+ "description": "Empty string",
8
+ "bson": "0D000000026100010000000000",
9
+ "extjson": "{\"a\" : \"\"}"
10
+ },
11
+ {
12
+ "description": "Single character",
13
+ "bson": "0E00000002610002000000620000",
14
+ "extjson": "{\"a\" : \"b\"}"
15
+ },
16
+ {
17
+ "description": "Multi-character",
18
+ "bson": "190000000261000D0000006162616261626162616261620000",
19
+ "extjson": "{\"a\" : \"abababababab\"}"
20
+ },
21
+ {
22
+ "description": "two-byte UTF-8 (\u00e9)",
23
+ "bson": "190000000261000D000000C3A9C3A9C3A9C3A9C3A9C3A90000",
24
+ "extjson": "{\"a\" : \"\\u00e9\\u00e9\\u00e9\\u00e9\\u00e9\\u00e9\"}"
25
+ },
26
+ {
27
+ "description": "three-byte UTF-8 (\u2606)",
28
+ "bson": "190000000261000D000000E29886E29886E29886E298860000",
29
+ "extjson": "{\"a\" : \"\\u2606\\u2606\\u2606\\u2606\"}"
30
+ },
31
+ {
32
+ "description": "Embedded nulls",
33
+ "bson": "190000000261000D0000006162006261620062616261620000",
34
+ "extjson": "{\"a\" : \"ab\\u0000bab\\u0000babab\"}"
35
+ }
36
+ ],
37
+ "decodeErrors": [
38
+ {
39
+ "description": "bad string length: 0 (but no 0x00 either)",
40
+ "bson": "0C0000000261000000000000"
41
+ },
42
+ {
43
+ "description": "bad string length: -1",
44
+ "bson": "0C000000026100FFFFFFFF00"
45
+ },
46
+ {
47
+ "description": "bad string length: eats terminator",
48
+ "bson": "10000000026100050000006200620000"
49
+ },
50
+ {
51
+ "description": "bad string length: longer than rest of document",
52
+ "bson": "120000000200FFFFFF00666F6F6261720000"
53
+ },
54
+ {
55
+ "description": "string is not null-terminated",
56
+ "bson": "1000000002610004000000616263FF00"
57
+ },
58
+ {
59
+ "description": "empty string, but extra null",
60
+ "bson": "0E00000002610001000000000000"
61
+ },
62
+ {
63
+ "description": "invalid UTF-8",
64
+ "bson": "0E00000002610002000000E90000"
65
+ }
66
+ ]
67
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "description": "Timestamp type",
3
+ "bson_type": "0x11",
4
+ "test_key": "a",
5
+ "valid": [
6
+ {
7
+ "description": "Timestamp: (123456789, 42)",
8
+ "bson": "100000001161002A00000015CD5B0700",
9
+ "extjson": "{\"a\" : {\"$timestamp\" : {\"t\" : 123456789, \"i\" : 42}}}"
10
+ }
11
+ ],
12
+ "decodeErrors": [
13
+ {
14
+ "description": "Truncated timestamp field",
15
+ "bson": "0f0000001161002A00000015CD5B00"
16
+ }
17
+ ]
18
+ }
@@ -0,0 +1,62 @@
1
+ {
2
+ "description": "Top-level document validity",
3
+ "bson_type": "0x00",
4
+ "decodeErrors": [
5
+ {
6
+ "description": "An object size that's too small to even include the object size, but is a well-formed, empty object",
7
+ "bson": "0100000000"
8
+ },
9
+ {
10
+ "description": "An object size that's only enough for the object size, but is a well-formed, empty object",
11
+ "bson": "0400000000"
12
+ },
13
+ {
14
+ "description": "One object, with length shorter than size (missing EOO)",
15
+ "bson": "05000000"
16
+ },
17
+ {
18
+ "description": "One object, sized correctly, with a spot for an EOO, but the EOO is 0x01",
19
+ "bson": "0500000001"
20
+ },
21
+ {
22
+ "description": "One object, sized correctly, with a spot for an EOO, but the EOO is 0xff",
23
+ "bson": "05000000FF"
24
+ },
25
+ {
26
+ "description": "One object, sized correctly, with a spot for an EOO, but the EOO is 0x70",
27
+ "bson": "0500000070"
28
+ },
29
+ {
30
+ "description": "Byte count is zero (with non-zero input length)",
31
+ "bson": "00000000000000000000"
32
+ },
33
+ {
34
+ "description": "Stated length exceeds byte count, with truncated document",
35
+ "bson": "1200000002666F6F0004000000626172"
36
+ },
37
+ {
38
+ "description": "Stated length less than byte count, with garbage after envelope",
39
+ "bson": "1200000002666F6F00040000006261720000DEADBEEF"
40
+ },
41
+ {
42
+ "description": "Stated length exceeds byte count, with valid envelope",
43
+ "bson": "1300000002666F6F00040000006261720000"
44
+ },
45
+ {
46
+ "description": "Stated length less than byte count, with valid envelope",
47
+ "bson": "1100000002666F6F00040000006261720000"
48
+ },
49
+ {
50
+ "description": "Invalid BSON type low range",
51
+ "bson": "07000000000000"
52
+ },
53
+ {
54
+ "description": "Invalid BSON type high range",
55
+ "bson": "07000000800000"
56
+ },
57
+ {
58
+ "description": "Document truncated mid-key",
59
+ "bson": "1200000002666F"
60
+ }
61
+ ]
62
+ }