xdr 2.0.0 → 3.0.3
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.
- checksums.yaml +5 -5
- data/CHANGELOG.md +26 -7
- data/README.md +21 -19
- data/lib/xdr/array.rb +3 -3
- data/lib/xdr/bool.rb +7 -7
- data/lib/xdr/concerns/array_converter.rb +2 -2
- data/lib/xdr/concerns/converts_to_xdr.rb +40 -41
- data/lib/xdr/concerns/float_converter.rb +1 -1
- data/lib/xdr/concerns/integer_converter.rb +1 -1
- data/lib/xdr/concerns/reads_bytes.rb +10 -1
- data/lib/xdr/concerns/string_converter.rb +1 -1
- data/lib/xdr/double.rb +2 -3
- data/lib/xdr/dsl/enum.rb +8 -9
- data/lib/xdr/dsl/struct.rb +1 -2
- data/lib/xdr/dsl/union.rb +12 -12
- data/lib/xdr/dsl.rb +1 -1
- data/lib/xdr/enum.rb +6 -6
- data/lib/xdr/float.rb +2 -3
- data/lib/xdr/hyper.rb +2 -2
- data/lib/xdr/int.rb +2 -2
- data/lib/xdr/namespace.rb +7 -9
- data/lib/xdr/opaque.rb +5 -5
- data/lib/xdr/option.rb +5 -5
- data/lib/xdr/quadruple.rb +1 -1
- data/lib/xdr/rpc/record.rb +2 -2
- data/lib/xdr/rpc/record_reader.rb +7 -7
- data/lib/xdr/string.rb +4 -4
- data/lib/xdr/struct.rb +15 -16
- data/lib/xdr/struct_validator.rb +1 -1
- data/lib/xdr/union.rb +44 -36
- data/lib/xdr/union_validator.rb +1 -1
- data/lib/xdr/unsigned_hyper.rb +2 -2
- data/lib/xdr/unsigned_int.rb +2 -2
- data/lib/xdr/var_array.rb +4 -4
- data/lib/xdr/var_opaque.rb +3 -3
- data/lib/xdr/version.rb +1 -1
- data/lib/xdr/void.rb +1 -1
- data/lib/xdr.rb +16 -10
- metadata +37 -150
- data/.gitignore +0 -15
- data/.travis.yml +0 -9
- data/.yardopts +0 -7
- data/Gemfile +0 -4
- data/Guardfile +0 -5
- data/Rakefile +0 -9
- data/examples/enum.rb +0 -30
- data/examples/struct.rb +0 -24
- data/examples/union.rb +0 -29
- data/spec/lib/xdr/array_spec.rb +0 -73
- data/spec/lib/xdr/bool_spec.rb +0 -43
- data/spec/lib/xdr/concerns/converts_to_xdr_spec.rb +0 -88
- data/spec/lib/xdr/concerns/reads_bytes_spec.rb +0 -31
- data/spec/lib/xdr/double_spec.rb +0 -38
- data/spec/lib/xdr/dsl/enum_spec.rb +0 -44
- data/spec/lib/xdr/dsl/struct_spec.rb +0 -29
- data/spec/lib/xdr/dsl/union_spec.rb +0 -69
- data/spec/lib/xdr/enum_spec.rb +0 -70
- data/spec/lib/xdr/float_spec.rb +0 -37
- data/spec/lib/xdr/hyper_spec.rb +0 -40
- data/spec/lib/xdr/int_spec.rb +0 -40
- data/spec/lib/xdr/opaque_spec.rb +0 -36
- data/spec/lib/xdr/option_spec.rb +0 -36
- data/spec/lib/xdr/quadruple_spec.rb +0 -14
- data/spec/lib/xdr/rpc/record_reader_spec.rb +0 -27
- data/spec/lib/xdr/string_spec.rb +0 -41
- data/spec/lib/xdr/struct_spec.rb +0 -101
- data/spec/lib/xdr/union_spec.rb +0 -248
- data/spec/lib/xdr/unsigned_hyper_spec.rb +0 -36
- data/spec/lib/xdr/unsigned_int_spec.rb +0 -36
- data/spec/lib/xdr/var_array_spec.rb +0 -71
- data/spec/lib/xdr/var_opaque_spec.rb +0 -43
- data/spec/lib/xdr/void_spec.rb +0 -46
- data/spec/spec_helper.rb +0 -15
- data/spec/support/matchers/eq_bytes.rb +0 -6
- data/xdr.gemspec +0 -28
data/.yardopts
DELETED
data/Gemfile
DELETED
data/Guardfile
DELETED
data/Rakefile
DELETED
data/examples/enum.rb
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
require 'xdr'
|
2
|
-
|
3
|
-
class Color < XDR::Enum
|
4
|
-
member :red, 0
|
5
|
-
member :green, 1
|
6
|
-
member :blue, 2
|
7
|
-
|
8
|
-
seal
|
9
|
-
end
|
10
|
-
|
11
|
-
class ResultType < XDR::Enum
|
12
|
-
member :ok, 0
|
13
|
-
member :error, 1
|
14
|
-
seal
|
15
|
-
end
|
16
|
-
|
17
|
-
Color.members # => {:red => 0, :green => 1, :blue => 2}
|
18
|
-
Color.members.keys # => [:red, :green, :blue]
|
19
|
-
|
20
|
-
# string and symbol work
|
21
|
-
# any casing that can be underscored to the correct value will work
|
22
|
-
Color.from_name(:RED) # => #<Color:... @name="red", @value=0>
|
23
|
-
Color.from_name("RED") # => #<Color:... @name="red", @value=0>
|
24
|
-
Color.from_name("red") # => #<Color:... @name="red", @value=0>
|
25
|
-
Color.from_name(:red) # => #<Color:... @name="red", @value=0>
|
26
|
-
|
27
|
-
Color.from_xdr("\x00\x00\x00\x00") # => #<Color:... @name="red", @value=0>
|
28
|
-
Color.to_xdr(Color.green) # => "\x00\x00\x00\x01"
|
29
|
-
|
30
|
-
Color.red == ResultType.ok # => false
|
data/examples/struct.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
require 'xdr'
|
2
|
-
|
3
|
-
class Signature < XDR::Struct
|
4
|
-
attribute :public_key, XDR::Opaque[32]
|
5
|
-
attribute :data, XDR::Opaque[32]
|
6
|
-
end
|
7
|
-
|
8
|
-
class Envelope < XDR::Struct
|
9
|
-
attribute :body, XDR::VarOpaque[]
|
10
|
-
attribute :timestamp, XDR::Int
|
11
|
-
attribute :signature, Signature
|
12
|
-
end
|
13
|
-
|
14
|
-
sig = Signature.new()
|
15
|
-
sig.public_key = "\x01" * 32
|
16
|
-
sig.data = "\x00" * 32
|
17
|
-
|
18
|
-
env = Envelope.new({
|
19
|
-
signature: sig,
|
20
|
-
body: "hello",
|
21
|
-
timestamp: Time.now.to_i
|
22
|
-
})
|
23
|
-
|
24
|
-
env.to_xdr
|
data/examples/union.rb
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
require 'xdr'
|
2
|
-
|
3
|
-
class ResultType < XDR::Enum
|
4
|
-
member :ok, 0
|
5
|
-
member :error, 1
|
6
|
-
member :nonsense, 2
|
7
|
-
seal
|
8
|
-
end
|
9
|
-
|
10
|
-
class Result < XDR::Union
|
11
|
-
switch_on ResultType, :type
|
12
|
-
|
13
|
-
switch :ok
|
14
|
-
switch :error, :message
|
15
|
-
switch :default
|
16
|
-
|
17
|
-
attribute :message, XDR::String[]
|
18
|
-
end
|
19
|
-
|
20
|
-
r = Result.new()
|
21
|
-
r.set(:error, "hello")
|
22
|
-
r.message! # => "hello"
|
23
|
-
r.get # => "hello"
|
24
|
-
|
25
|
-
r.set(:ok)
|
26
|
-
r.get # => nil
|
27
|
-
|
28
|
-
r.set(:nonsense)
|
29
|
-
r.get # => nil
|
data/spec/lib/xdr/array_spec.rb
DELETED
@@ -1,73 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe XDR::Array, "#read" do
|
4
|
-
let(:empty) { XDR::Array[XDR::Int, 0] }
|
5
|
-
let(:one) { XDR::Array[XDR::Int, 1] }
|
6
|
-
let(:many) { XDR::Array[XDR::Int, 2] }
|
7
|
-
|
8
|
-
it "decodes values correctly" do
|
9
|
-
expect( read empty, "" ).to eq([])
|
10
|
-
expect( read empty, "\x00\x00\x00\x00" ).to eq([])
|
11
|
-
expect( read one, "\x00\x00\x00\x00" ).to eq([0])
|
12
|
-
expect( read one, "\x00\x00\x00\x01" ).to eq([1])
|
13
|
-
expect( read many, "\x00\x00\x00\x00\x00\x00\x00\x01" ).to eq([0, 1])
|
14
|
-
expect( read many, "\x00\x00\x00\x01\x00\x00\x00\x01" ).to eq([1, 1])
|
15
|
-
end
|
16
|
-
|
17
|
-
it "raises EOFError the byte stream isn't large enough" do
|
18
|
-
expect{ read many, "\x00\x00\x00\x00" }.to raise_error(EOFError)
|
19
|
-
end
|
20
|
-
|
21
|
-
def read(reader, str)
|
22
|
-
io = StringIO.new(str)
|
23
|
-
reader.read(io)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
describe XDR::Array, "#write" do
|
28
|
-
subject{ XDR::Array[XDR::Int, 2] }
|
29
|
-
|
30
|
-
it "encodes values correctly" do
|
31
|
-
expect(write [1,2]).to eq("\x00\x00\x00\x01\x00\x00\x00\x02")
|
32
|
-
expect(write [1,4]).to eq("\x00\x00\x00\x01\x00\x00\x00\x04")
|
33
|
-
end
|
34
|
-
|
35
|
-
it "raises a WriteError if the value is not the correct length" do
|
36
|
-
expect{ write nil }.to raise_error(XDR::WriteError)
|
37
|
-
expect{ write [] }.to raise_error(XDR::WriteError)
|
38
|
-
expect{ write [1] }.to raise_error(XDR::WriteError)
|
39
|
-
expect{ write [1,2,3] }.to raise_error(XDR::WriteError)
|
40
|
-
end
|
41
|
-
|
42
|
-
it "raises a WriteError if a child element is of the wrong type" do
|
43
|
-
expect{ write [nil] }.to raise_error(XDR::WriteError)
|
44
|
-
expect{ write ["hi"] }.to raise_error(XDR::WriteError)
|
45
|
-
expect{ write [1,2,"hi"] }.to raise_error(XDR::WriteError)
|
46
|
-
end
|
47
|
-
|
48
|
-
def write(val)
|
49
|
-
io = StringIO.new()
|
50
|
-
subject.write(val, io)
|
51
|
-
io.string
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
describe XDR::Array, "#valid?" do
|
56
|
-
subject{ XDR::Array[XDR::Int, 2] }
|
57
|
-
|
58
|
-
it "rejects an empty array" do
|
59
|
-
expect(subject.valid?([])).to be_falsey
|
60
|
-
end
|
61
|
-
|
62
|
-
it "accepts a filled array provided each element passes the child_type validator" do
|
63
|
-
expect(subject.valid?([1,2])).to be_truthy
|
64
|
-
expect(subject.valid?([2,3])).to be_truthy
|
65
|
-
end
|
66
|
-
|
67
|
-
it "rejects a filled array if any element is rejected by the child_type validator" do
|
68
|
-
expect(subject.valid?(["hello", "hello"])).to be_falsey
|
69
|
-
expect(subject.valid?([1, "hello"])).to be_falsey
|
70
|
-
expect(subject.valid?([1, nil])).to be_falsey
|
71
|
-
expect(subject.valid?([nil])).to be_falsey
|
72
|
-
end
|
73
|
-
end
|
data/spec/lib/xdr/bool_spec.rb
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe XDR::Bool, ".read" do
|
4
|
-
subject{ XDR::Bool }
|
5
|
-
|
6
|
-
let(:false_s) { "\x00\x00\x00\x00" }
|
7
|
-
let(:true_s) { "\x00\x00\x00\x01" }
|
8
|
-
let(:two) { "\x00\x00\x00\x02" }
|
9
|
-
|
10
|
-
it "decodes values correctly" do
|
11
|
-
expect(read(false_s)).to eq(false)
|
12
|
-
expect(read(true_s)).to eq(true)
|
13
|
-
end
|
14
|
-
|
15
|
-
it "raises ReadError if the decoded value is not 0 or 1" do
|
16
|
-
expect{ read two }.to raise_error XDR::ReadError
|
17
|
-
end
|
18
|
-
|
19
|
-
def read(str)
|
20
|
-
io = StringIO.new(str)
|
21
|
-
subject.read(io)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
describe XDR::Bool, ".write" do
|
26
|
-
subject{ XDR::Bool }
|
27
|
-
|
28
|
-
it "encodes values correctly" do
|
29
|
-
expect(write false).to eq("\x00\x00\x00\x00")
|
30
|
-
expect(write true).to eq("\x00\x00\x00\x01")
|
31
|
-
end
|
32
|
-
|
33
|
-
it "raises WriteError if the value is boolean" do
|
34
|
-
expect{ write 1 }.to raise_error XDR::WriteError
|
35
|
-
expect{ write "hello" }.to raise_error XDR::WriteError
|
36
|
-
end
|
37
|
-
|
38
|
-
def write(val)
|
39
|
-
io = StringIO.new()
|
40
|
-
subject.write(val, io)
|
41
|
-
io.string
|
42
|
-
end
|
43
|
-
end
|
@@ -1,88 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe XDR::Concerns::ConvertsToXDR do
|
4
|
-
subject{ UnimplementedConvertible.new }
|
5
|
-
|
6
|
-
it "requires an implementation of #read" do
|
7
|
-
expect{ subject.read(StringIO.new) }.to raise_error(NotImplementedError)
|
8
|
-
end
|
9
|
-
|
10
|
-
it "requires an implementation of #write" do
|
11
|
-
expect{ subject.write(3, StringIO.new) }.to raise_error(NotImplementedError)
|
12
|
-
end
|
13
|
-
|
14
|
-
it "requires an implementation of #valid?" do
|
15
|
-
expect{ subject.valid?(3) }.to raise_error(NotImplementedError)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
describe XDR::Concerns::ConvertsToXDR, "#to_xdr" do
|
20
|
-
subject{ ImplementedConvertible.new }
|
21
|
-
|
22
|
-
it "calls through to write" do
|
23
|
-
expect(subject).to receive(:write).with("hiya", kind_of(StringIO))
|
24
|
-
subject.to_xdr("hiya")
|
25
|
-
end
|
26
|
-
|
27
|
-
context "using an actual xdr type" do
|
28
|
-
subject{ XDR::Opaque.new(4) }
|
29
|
-
|
30
|
-
it "encodes to hex" do
|
31
|
-
r = subject.to_xdr("\x00\x01\x02\x03", "hex")
|
32
|
-
expect(r).to eql("00010203")
|
33
|
-
end
|
34
|
-
|
35
|
-
it "encodes to base64" do
|
36
|
-
r = subject.to_xdr("\x00\x01\x02\x03", "base64")
|
37
|
-
expect(r).to eql("AAECAw==")
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
describe XDR::Concerns::ConvertsToXDR, "#from_xdr" do
|
43
|
-
subject{ ImplementedConvertible.new }
|
44
|
-
|
45
|
-
it "calls through to read" do
|
46
|
-
allow(subject).to receive(:read).and_call_original
|
47
|
-
subject.from_xdr("hiya")
|
48
|
-
expect(subject).to have_received(:read).with(kind_of(StringIO))
|
49
|
-
end
|
50
|
-
|
51
|
-
context "using an actual xdr type" do
|
52
|
-
subject{ XDR::Opaque.new(4) }
|
53
|
-
|
54
|
-
it "decodes from hex" do
|
55
|
-
r = subject.from_xdr("00010203", "hex")
|
56
|
-
expect(r).to eql("\x00\x01\x02\x03")
|
57
|
-
end
|
58
|
-
|
59
|
-
it "decodes from base64" do
|
60
|
-
r = subject.from_xdr("AAECAw==", "base64")
|
61
|
-
expect(r).to eql("\x00\x01\x02\x03")
|
62
|
-
end
|
63
|
-
|
64
|
-
it "raises an ArgumentError if the input is not fully consumed" do
|
65
|
-
expect{ subject.from_xdr("\x00\x00\x00\x00\x00") }.to raise_error(ArgumentError)
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
class UnimplementedConvertible
|
71
|
-
include XDR::Concerns::ConvertsToXDR
|
72
|
-
end
|
73
|
-
|
74
|
-
class ImplementedConvertible
|
75
|
-
include XDR::Concerns::ConvertsToXDR
|
76
|
-
|
77
|
-
def read(io)
|
78
|
-
read_bytes(io, 4)
|
79
|
-
end
|
80
|
-
|
81
|
-
def write(val, io)
|
82
|
-
io.write(val)
|
83
|
-
end
|
84
|
-
|
85
|
-
def valid?(val)
|
86
|
-
true
|
87
|
-
end
|
88
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
class TestReader
|
4
|
-
include XDR::Concerns::ReadsBytes
|
5
|
-
public :read_bytes
|
6
|
-
end
|
7
|
-
|
8
|
-
|
9
|
-
describe XDR::Concerns::ReadsBytes, "#read_bytes" do
|
10
|
-
subject{ TestReader.new }
|
11
|
-
|
12
|
-
it "raises EOFError when the requested length goes beyond the length of the stream" do
|
13
|
-
expect{ read("", 1) }.to raise_error(EOFError)
|
14
|
-
expect{ read("", 2) }.to raise_error(EOFError)
|
15
|
-
expect{ read("", 10) }.to raise_error(EOFError)
|
16
|
-
expect{ read("\x00\x01\x02", 4) }.to raise_error(EOFError)
|
17
|
-
expect{ read("\x00\x01\x02", 10) }.to raise_error(EOFError)
|
18
|
-
end
|
19
|
-
|
20
|
-
it "returns the read data" do
|
21
|
-
expect(read("", 0)).to eq("")
|
22
|
-
expect(read("\x00", 1)).to eq("\x00")
|
23
|
-
expect(read("\x01", 1)).to eq("\x01")
|
24
|
-
expect(read("\x00\x01\x02", 3)).to eq("\x00\x01\x02")
|
25
|
-
end
|
26
|
-
|
27
|
-
def read(str, length)
|
28
|
-
io = StringIO.new(str)
|
29
|
-
subject.read_bytes(io, length)
|
30
|
-
end
|
31
|
-
end
|
data/spec/lib/xdr/double_spec.rb
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
|
4
|
-
describe XDR::Double, ".read" do
|
5
|
-
|
6
|
-
it "decodes values correctly" do
|
7
|
-
expect(read("\x00\x00\x00\x00\x00\x00\x00\x00")).to eq(0.0)
|
8
|
-
expect(read("\x80\x00\x00\x00\x00\x00\x00\x00")).to eq(-0.0)
|
9
|
-
expect(read("\x3F\xF0\x00\x00\x00\x00\x00\x00")).to eq(1.0)
|
10
|
-
expect(read("\xBF\xF0\x00\x00\x00\x00\x00\x00")).to eq(-1.0)
|
11
|
-
end
|
12
|
-
|
13
|
-
def read(str)
|
14
|
-
io = StringIO.new(str)
|
15
|
-
subject.read(io)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
describe XDR::Double, ".write" do
|
20
|
-
it "encodes values correctly" do
|
21
|
-
expect(write 0.0).to eq_bytes("\x00\x00\x00\x00\x00\x00\x00\x00")
|
22
|
-
expect(write -0.0).to eq_bytes("\x80\x00\x00\x00\x00\x00\x00\x00")
|
23
|
-
expect(write 1.0).to eq_bytes("\x3F\xF0\x00\x00\x00\x00\x00\x00")
|
24
|
-
expect(write -1.0).to eq_bytes("\xBF\xF0\x00\x00\x00\x00\x00\x00")
|
25
|
-
end
|
26
|
-
|
27
|
-
it "raises a WriteError when the value is not Float" do
|
28
|
-
expect{ write 3 }.to raise_error(XDR::WriteError)
|
29
|
-
expect{ write "hi" }.to raise_error(XDR::WriteError)
|
30
|
-
expect{ write "1.0" }.to raise_error(XDR::WriteError)
|
31
|
-
end
|
32
|
-
|
33
|
-
def write(val)
|
34
|
-
io = StringIO.new()
|
35
|
-
subject.write(val, io)
|
36
|
-
io.string
|
37
|
-
end
|
38
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
|
4
|
-
describe XDR::DSL::Enum, "#member" do
|
5
|
-
subject do
|
6
|
-
Class.new(XDR::Enum) do
|
7
|
-
member :one, 1
|
8
|
-
member :two, 2
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
it "adds to the members collection of the class" do
|
13
|
-
expect(subject.members.length).to eq(2)
|
14
|
-
expect(subject.members[:one]).to eq(subject.one)
|
15
|
-
expect(subject.members[:two]).to eq(subject.two)
|
16
|
-
end
|
17
|
-
|
18
|
-
it "raises ArgumentError if a non-integer value is used" do
|
19
|
-
expect {
|
20
|
-
Class.new(XDR::Enum) do
|
21
|
-
member :one, "hi!"
|
22
|
-
end
|
23
|
-
}.to raise_error(ArgumentError)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
describe XDR::DSL::Enum, "#seal" do
|
28
|
-
subject do
|
29
|
-
Class.new(XDR::Enum) do
|
30
|
-
member :one, 1
|
31
|
-
member :two, 2
|
32
|
-
seal
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
it "marks the class as sealed" do
|
37
|
-
expect(subject.sealed).to eq(true)
|
38
|
-
end
|
39
|
-
|
40
|
-
it "prevents you from adding members after being sealed" do
|
41
|
-
expect{ subject.member :three, 3 }.to raise_error(ArgumentError)
|
42
|
-
end
|
43
|
-
|
44
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
|
4
|
-
describe XDR::DSL::Struct, "#attribute" do
|
5
|
-
subject do
|
6
|
-
Class.new(XDR::Struct) do
|
7
|
-
attribute :attr1, XDR::Int
|
8
|
-
attribute :attr2, XDR::String[]
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
|
13
|
-
it "adds to the fields collection of the class" do
|
14
|
-
expect(subject.fields.length).to eq(2)
|
15
|
-
expect(subject.fields[:attr1]).to eq(XDR::Int)
|
16
|
-
expect(subject.fields[:attr2]).to be_a(XDR::String)
|
17
|
-
end
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
it "raises ArgumentError if a non-convertible type is used" do
|
22
|
-
expect do
|
23
|
-
Class.new(XDR::Struct) do
|
24
|
-
attribute :attr1, String
|
25
|
-
end
|
26
|
-
end.to raise_error(ArgumentError)
|
27
|
-
end
|
28
|
-
|
29
|
-
end
|
@@ -1,69 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
|
4
|
-
describe XDR::DSL::Union, "#switch" do
|
5
|
-
|
6
|
-
it "allows symbols in switch declarations" do
|
7
|
-
expect do
|
8
|
-
klass = Class.new(XDR::Union) do
|
9
|
-
switch_on ResultType, :type
|
10
|
-
switch :ok
|
11
|
-
end
|
12
|
-
|
13
|
-
klass.new(:ok)
|
14
|
-
end.to_not raise_error
|
15
|
-
end
|
16
|
-
|
17
|
-
class ResultType < XDR::Enum
|
18
|
-
member :ok, 0
|
19
|
-
member :error, 1
|
20
|
-
seal
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
describe XDR::DSL::Union, "#switch_on" do
|
25
|
-
klass = nil
|
26
|
-
|
27
|
-
it "allows int types" do
|
28
|
-
expect do
|
29
|
-
klass = Class.new(XDR::Union) do
|
30
|
-
switch_on XDR::Int, :type
|
31
|
-
switch 0
|
32
|
-
switch 1
|
33
|
-
end
|
34
|
-
end.to_not raise_error
|
35
|
-
|
36
|
-
expect{ klass.new(0) }.to_not raise_error
|
37
|
-
expect{ klass.new(1) }.to_not raise_error
|
38
|
-
expect{ klass.new(2) }.to raise_error(XDR::InvalidSwitchError)
|
39
|
-
end
|
40
|
-
|
41
|
-
it "allows unsigned int types" do
|
42
|
-
expect do
|
43
|
-
klass = Class.new(XDR::Union) do
|
44
|
-
switch_on XDR::UnsignedInt, :type
|
45
|
-
switch 0
|
46
|
-
switch 1
|
47
|
-
end
|
48
|
-
end.to_not raise_error
|
49
|
-
|
50
|
-
expect{ klass.new(0) }.to_not raise_error
|
51
|
-
expect{ klass.new(1) }.to_not raise_error
|
52
|
-
expect{ klass.new(2) }.to raise_error(XDR::InvalidSwitchError)
|
53
|
-
expect{ klass.new(-1) }.to raise_error(XDR::InvalidSwitchError)
|
54
|
-
end
|
55
|
-
|
56
|
-
it "allows bool types", :focus do
|
57
|
-
klass = nil
|
58
|
-
|
59
|
-
expect do
|
60
|
-
klass = Class.new(XDR::Union) do
|
61
|
-
switch_on XDR::Bool, :type
|
62
|
-
switch true
|
63
|
-
end
|
64
|
-
end.to_not raise_error
|
65
|
-
|
66
|
-
expect{ klass.new(true) }.to_not raise_error
|
67
|
-
expect{ klass.new(false) }.to raise_error(XDR::InvalidSwitchError)
|
68
|
-
end
|
69
|
-
end
|
data/spec/lib/xdr/enum_spec.rb
DELETED
@@ -1,70 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
class TestColor < XDR::Enum
|
4
|
-
member :red, 0
|
5
|
-
member :green, 1
|
6
|
-
member :even_more_green, 3
|
7
|
-
|
8
|
-
seal
|
9
|
-
end
|
10
|
-
|
11
|
-
describe XDR::Enum, ".read" do
|
12
|
-
let(:zero) { "\x00\x00\x00\x00" }
|
13
|
-
let(:one) { "\x00\x00\x00\x01" }
|
14
|
-
let(:two) { "\x00\x00\x00\x02" }
|
15
|
-
|
16
|
-
subject{ TestColor }
|
17
|
-
|
18
|
-
it "decodes values correctly" do
|
19
|
-
expect( read zero ).to eq(TestColor.red)
|
20
|
-
expect( read one ).to eq(TestColor.green)
|
21
|
-
end
|
22
|
-
|
23
|
-
it "raises EnumValueError if the decoded value is not in the defined constants" do
|
24
|
-
expect{ read two }.to raise_error XDR::EnumValueError
|
25
|
-
end
|
26
|
-
|
27
|
-
def read(str)
|
28
|
-
io = StringIO.new(str)
|
29
|
-
subject.read(io)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
describe XDR::Enum, ".write" do
|
34
|
-
subject{ TestColor }
|
35
|
-
|
36
|
-
it "encodes values correctly" do
|
37
|
-
expect( write TestColor.red ).to eq("\x00\x00\x00\x00")
|
38
|
-
expect( write TestColor.green ).to eq("\x00\x00\x00\x01")
|
39
|
-
end
|
40
|
-
|
41
|
-
it "raises WriteError if value isn't a member" do
|
42
|
-
expect{ write 0 }.to raise_error XDR::WriteError
|
43
|
-
expect{ write 1 }.to raise_error XDR::WriteError
|
44
|
-
end
|
45
|
-
|
46
|
-
def write(val)
|
47
|
-
io = StringIO.new()
|
48
|
-
subject.write(val, io)
|
49
|
-
io.string
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
describe XDR::Enum, ".from_name" do
|
54
|
-
subject{ TestColor }
|
55
|
-
|
56
|
-
it "returns the correct value" do
|
57
|
-
expect(subject.from_name("red")).to eq(TestColor.red)
|
58
|
-
end
|
59
|
-
|
60
|
-
it "allows various casings, strings or symbols" do
|
61
|
-
expect(subject.from_name("even_more_green")).to eq(TestColor.even_more_green)
|
62
|
-
expect(subject.from_name("EVEN_MORE_GREEN")).to eq(TestColor.even_more_green)
|
63
|
-
expect(subject.from_name(:even_more_green)).to eq(TestColor.even_more_green)
|
64
|
-
expect(subject.from_name(:EVEN_MORE_GREEN)).to eq(TestColor.even_more_green)
|
65
|
-
end
|
66
|
-
|
67
|
-
it "raises EnumNameError when the name is not a member" do
|
68
|
-
expect{ subject.from_name("chartreuse")}.to raise_error(XDR::EnumNameError)
|
69
|
-
end
|
70
|
-
end
|
data/spec/lib/xdr/float_spec.rb
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
|
4
|
-
describe XDR::Float, ".read" do
|
5
|
-
it "decodes values correctly" do
|
6
|
-
expect(read("\x00\x00\x00\x00")).to eq(0.0)
|
7
|
-
expect(read("\x80\x00\x00\x00")).to eq(-0.0)
|
8
|
-
expect(read("\x3F\x80\x00\x00")).to eq(1.0)
|
9
|
-
expect(read("\xBF\x80\x00\x00")).to eq(-1.0)
|
10
|
-
end
|
11
|
-
|
12
|
-
def read(str)
|
13
|
-
io = StringIO.new(str)
|
14
|
-
subject.read(io)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
describe XDR::Float, ".write" do
|
19
|
-
it "encodes values correctly" do
|
20
|
-
expect(write(0.0)).to eq_bytes("\x00\x00\x00\x00")
|
21
|
-
expect(write(-0.0)).to eq_bytes("\x80\x00\x00\x00")
|
22
|
-
expect(write(1.0)).to eq_bytes("\x3F\x80\x00\x00")
|
23
|
-
expect(write(-1.0)).to eq_bytes("\xBF\x80\x00\x00")
|
24
|
-
end
|
25
|
-
|
26
|
-
it "raises a WriteError when the value is not Float" do
|
27
|
-
expect{ write 3 }.to raise_error(XDR::WriteError)
|
28
|
-
expect{ write "hello" }.to raise_error(XDR::WriteError)
|
29
|
-
expect{ write "1.0" }.to raise_error(XDR::WriteError)
|
30
|
-
end
|
31
|
-
|
32
|
-
def write(val)
|
33
|
-
io = StringIO.new()
|
34
|
-
subject.write(val, io)
|
35
|
-
io.string
|
36
|
-
end
|
37
|
-
end
|
data/spec/lib/xdr/hyper_spec.rb
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
|
4
|
-
describe XDR::Hyper, ".read" do
|
5
|
-
|
6
|
-
it "decodes values correctly" do
|
7
|
-
expect(read("\x00\x00\x00\x00\x00\x00\x00\x00")).to eq(0)
|
8
|
-
expect(read("\x00\x00\x00\x00\x00\x00\x00\x01")).to eq(1)
|
9
|
-
expect(read("\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF")).to eq(-1)
|
10
|
-
expect(read("\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF")).to eq(2**63 - 1)
|
11
|
-
expect(read("\x80\x00\x00\x00\x00\x00\x00\x00")).to eq(-(2**63))
|
12
|
-
end
|
13
|
-
|
14
|
-
def read(str)
|
15
|
-
io = StringIO.new(str)
|
16
|
-
subject.read(io)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
describe XDR::Hyper, ".write" do
|
21
|
-
|
22
|
-
it "decodes values correctly" do
|
23
|
-
expect(write 0).to eq_bytes("\x00\x00\x00\x00\x00\x00\x00\x00")
|
24
|
-
expect(write 1).to eq_bytes("\x00\x00\x00\x00\x00\x00\x00\x01")
|
25
|
-
expect(write -1).to eq_bytes("\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF")
|
26
|
-
expect(write 2**63 - 1).to eq_bytes("\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF")
|
27
|
-
expect(write -(2**63)).to eq_bytes("\x80\x00\x00\x00\x00\x00\x00\x00")
|
28
|
-
end
|
29
|
-
|
30
|
-
it "raises WriteError when an Integer isn't passed" do
|
31
|
-
expect{ write 1.0 }.to raise_error(XDR::WriteError)
|
32
|
-
expect{ write "hi" }.to raise_error(XDR::WriteError)
|
33
|
-
end
|
34
|
-
|
35
|
-
def write(val)
|
36
|
-
io = StringIO.new()
|
37
|
-
subject.write(val, io)
|
38
|
-
io.string
|
39
|
-
end
|
40
|
-
end
|