/
120-javascript.t
78 lines (65 loc) · 2.93 KB
/
120-javascript.t
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
use v6;
use Test;
use BSON;
use BSON::Document;
use BSON::Javascript;
#-------------------------------------------------------------------------------
subtest "Javacsript", {
my Str $javascript = 'function(x){return x;}';
my BSON::Javascript $js .= new(:$javascript);
my BSON::Document $d1 .= new: (:$js,);
my Buf $b1 = $d1.encode;
my Buf $b2 =
[~] Buf.new(0x0D), # BSON javascript
'js'.encode, Buf.new(0x00), # 'js'
encode-int32($javascript.chars + 1),
$javascript.encode, Buf.new(0x00), # javascript code
Buf.new(0x00); # end of document
is-deeply encode-int32($b2.elems + 4) ~ $b2, $b1, # prepend size to b2
'check encoded javascript';
my BSON::Document $d2 .= new($b1);
is-deeply $d1, $d2, 'decoded doc is same as original';
}
#-------------------------------------------------------------------------------
subtest "Javacsript with scope", {
my Str $javascript = 'function(x){return x;}';
my BSON::Document $scope .= new: (nn => 10, a1 => 2);
my BSON::Javascript $js-scope .= new( :$javascript, :$scope);
my BSON::Document $d1 .= new: (:$js-scope,);
my Buf $b1 = $d1.encode;
my Buf $b2 =
[~] Buf.new(0x0F), # BSON javascript with scope
'js-scope'.encode, Buf.new(0x00), # 'js-scope'
encode-int32($javascript.chars + 1),
$javascript.encode, Buf.new(0x00), # javascript code
$scope.encode, # encoded scope
Buf.new(0x00); # end of document
is-deeply encode-int32($b2.elems + 4) ~ $b2, $b1, # prepend size to b2
'check encoded javascript';
my BSON::Document $d2 .= new($b1);
is-deeply $d1, $d2, 'decoded doc is same as original';
}
#-------------------------------------------------------------------------------
subtest "Javacsript with scope, twice", {
my Str $javascript = 'function(x){return x;}';
my BSON::Document $scope .= new: (nn => 10, a1 => 2);
my BSON::Javascript $js-scope .= new( :$javascript, :$scope);
my BSON::Document $d1 .= new: ( :jsc1($js-scope), :jsc2($js-scope.clone));
my Buf $b1 = $d1.encode;
#`{{
my Buf $b2 =
[~] Buf.new(0x0F), # BSON javascript with scope
'js-scope'.encode, Buf.new(0x00), # 'js-scope'
encode-int32($javascript.chars + 1),
$javascript.encode, Buf.new(0x00), # javascript code
$scope.encode, # encoded scope
Buf.new(0x00); # end of document
is-deeply encode-int32($b2.elems + 4) ~ $b2, $b1, # prepend size to b2
'check encoded javascript';
}}
my BSON::Document $d2 .= new($b1);
is-deeply $d1, $d2, 'decoded doc is same as original';
}
#-------------------------------------------------------------------------------
# Cleanup
done-testing;