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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
# -*- encoding: ascii-8bit -*-
require_relative '../../../spec_helper'
require_relative '../fixtures/classes'
require_relative 'shared/basic'
require_relative 'shared/encodings'
require_relative 'shared/taint'
describe "Array#pack with format 'B'" do
it_behaves_like :array_pack_basic, 'B'
it_behaves_like :array_pack_basic_non_float, 'B'
it_behaves_like :array_pack_arguments, 'B'
it_behaves_like :array_pack_hex, 'B'
it_behaves_like :array_pack_taint, 'B'
it "calls #to_str to convert an Object to a String" do
obj = mock("pack H string")
obj.should_receive(:to_str).and_return("``abcdef")
[obj].pack("B*").should == "\x2a"
end
it "encodes one bit for each character starting with the most significant bit" do
[ [["0"], "\x00"],
[["1"], "\x80"]
].should be_computed_by(:pack, "B")
end
it "implicitly has a count of one when not passed a count modifier" do
["1"].pack("B").should == "\x80"
end
it "implicitly has count equal to the string length when passed the '*' modifier" do
[ [["00101010"], "\x2a"],
[["00000000"], "\x00"],
[["11111111"], "\xff"],
[["10000000"], "\x80"],
[["00000001"], "\x01"]
].should be_computed_by(:pack, "B*")
end
it "encodes the least significant bit of a character other than 0 or 1" do
[ [["bbababab"], "\x2a"],
[["^&#&#^#^"], "\x2a"],
[["(()()()("], "\x2a"],
[["@@%@%@%@"], "\x2a"],
[["ppqrstuv"], "\x2a"],
[["rqtvtrqp"], "\x42"]
].should be_computed_by(:pack, "B*")
end
it "returns an ASCII-8BIT string" do
["1"].pack("B").encoding.should == Encoding::ASCII_8BIT
end
it "encodes the string as a sequence of bytes" do
["ああああああああ"].pack("B*").should == "\xdbm\xb6"
end
end
describe "Array#pack with format 'b'" do
it_behaves_like :array_pack_basic, 'b'
it_behaves_like :array_pack_basic_non_float, 'b'
it_behaves_like :array_pack_arguments, 'b'
it_behaves_like :array_pack_hex, 'b'
it_behaves_like :array_pack_taint, 'b'
it "calls #to_str to convert an Object to a String" do
obj = mock("pack H string")
obj.should_receive(:to_str).and_return("`abcdef`")
[obj].pack("b*").should == "\x2a"
end
it "encodes one bit for each character starting with the least significant bit" do
[ [["0"], "\x00"],
[["1"], "\x01"]
].should be_computed_by(:pack, "b")
end
it "implicitly has a count of one when not passed a count modifier" do
["1"].pack("b").should == "\x01"
end
it "implicitly has count equal to the string length when passed the '*' modifier" do
[ [["0101010"], "\x2a"],
[["00000000"], "\x00"],
[["11111111"], "\xff"],
[["10000000"], "\x01"],
[["00000001"], "\x80"]
].should be_computed_by(:pack, "b*")
end
it "encodes the least significant bit of a character other than 0 or 1" do
[ [["bababab"], "\x2a"],
[["&#&#^#^"], "\x2a"],
[["()()()("], "\x2a"],
[["@%@%@%@"], "\x2a"],
[["pqrstuv"], "\x2a"],
[["qrtrtvs"], "\x41"]
].should be_computed_by(:pack, "b*")
end
it "returns an ASCII-8BIT string" do
["1"].pack("b").encoding.should == Encoding::ASCII_8BIT
end
it "encodes the string as a sequence of bytes" do
["ああああああああ"].pack("b*").should == "\xdb\xb6m"
end
end
|