xdr 3.0.1 → 3.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +12 -9
  3. data/README.md +4 -2
  4. data/lib/xdr/concerns/converts_to_xdr.rb +30 -31
  5. data/lib/xdr/union.rb +7 -4
  6. data/lib/xdr/version.rb +1 -1
  7. metadata +43 -114
  8. data/.gitignore +0 -15
  9. data/.travis.yml +0 -9
  10. data/.yardopts +0 -7
  11. data/Gemfile +0 -4
  12. data/Guardfile +0 -5
  13. data/Rakefile +0 -9
  14. data/examples/enum.rb +0 -30
  15. data/examples/struct.rb +0 -24
  16. data/examples/union.rb +0 -29
  17. data/spec/lib/xdr/array_spec.rb +0 -73
  18. data/spec/lib/xdr/bool_spec.rb +0 -43
  19. data/spec/lib/xdr/concerns/converts_to_xdr_spec.rb +0 -88
  20. data/spec/lib/xdr/concerns/reads_bytes_spec.rb +0 -57
  21. data/spec/lib/xdr/double_spec.rb +0 -38
  22. data/spec/lib/xdr/dsl/enum_spec.rb +0 -44
  23. data/spec/lib/xdr/dsl/struct_spec.rb +0 -29
  24. data/spec/lib/xdr/dsl/union_spec.rb +0 -69
  25. data/spec/lib/xdr/enum_spec.rb +0 -70
  26. data/spec/lib/xdr/float_spec.rb +0 -37
  27. data/spec/lib/xdr/hyper_spec.rb +0 -40
  28. data/spec/lib/xdr/int_spec.rb +0 -40
  29. data/spec/lib/xdr/opaque_spec.rb +0 -40
  30. data/spec/lib/xdr/option_spec.rb +0 -36
  31. data/spec/lib/xdr/quadruple_spec.rb +0 -14
  32. data/spec/lib/xdr/rpc/record_reader_spec.rb +0 -27
  33. data/spec/lib/xdr/string_spec.rb +0 -47
  34. data/spec/lib/xdr/struct_spec.rb +0 -101
  35. data/spec/lib/xdr/union_spec.rb +0 -258
  36. data/spec/lib/xdr/unsigned_hyper_spec.rb +0 -36
  37. data/spec/lib/xdr/unsigned_int_spec.rb +0 -36
  38. data/spec/lib/xdr/var_array_spec.rb +0 -71
  39. data/spec/lib/xdr/var_opaque_spec.rb +0 -50
  40. data/spec/lib/xdr/void_spec.rb +0 -46
  41. data/spec/spec_helper.rb +0 -15
  42. data/spec/support/matchers/eq_bytes.rb +0 -6
  43. data/xdr.gemspec +0 -28
@@ -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
@@ -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
@@ -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
@@ -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
@@ -1,40 +0,0 @@
1
- require 'spec_helper'
2
-
3
-
4
- describe XDR::Int, ".read" do
5
-
6
- it "decodes values correctly" do
7
- expect(read("\x00\x00\x00\x00")).to eq(0)
8
- expect(read("\x00\x00\x00\x01")).to eq(1)
9
- expect(read("\xFF\xFF\xFF\xFF")).to eq(-1)
10
- expect(read("\x7F\xFF\xFF\xFF")).to eq(2**31 - 1)
11
- expect(read("\x80\x00\x00\x00")).to eq(-(2**31))
12
- end
13
-
14
- def read(str)
15
- io = StringIO.new(str)
16
- subject.read(io)
17
- end
18
- end
19
-
20
- describe XDR::Int, ".write" do
21
-
22
- it "decodes values correctly" do
23
- expect(write 0).to eq_bytes("\x00\x00\x00\x00")
24
- expect(write 1).to eq_bytes("\x00\x00\x00\x01")
25
- expect(write -1).to eq_bytes("\xFF\xFF\xFF\xFF")
26
- expect(write 2**31 - 1).to eq_bytes("\x7F\xFF\xFF\xFF")
27
- expect(write -(2**31)).to eq_bytes("\x80\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
@@ -1,40 +0,0 @@
1
- require 'spec_helper'
2
-
3
-
4
- describe XDR::Opaque, "#read" do
5
- subject{ XDR::Opaque.new(3) }
6
-
7
- it "decodes values correctly" do
8
- expect(read("\x00\x00\x00\x00")).to eq("\x00\x00\x00")
9
- expect(read("\x00\x01\x00\x00")).to eq("\x00\x01\x00")
10
- end
11
-
12
- it "raises a ReadError when the padding isn't zeros" do
13
- expect{ read "\x00\x00\x01\x01" }.to raise_error(XDR::ReadError)
14
- end
15
-
16
- def read(str)
17
- io = StringIO.new(str)
18
- subject.read(io)
19
- end
20
- end
21
-
22
- describe XDR::Opaque, "#write" do
23
- subject{ XDR::Opaque.new(3) }
24
-
25
- it "encodes values correctly" do
26
- expect(write("123")).to eq("123\x00")
27
- expect(write("124")).to eq("124\x00")
28
- end
29
-
30
- it "raises a WriteError if the value is not the correct length" do
31
- expect{ write("1234") }.to raise_error(XDR::WriteError)
32
- expect{ write("12") }.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
@@ -1,36 +0,0 @@
1
- require 'spec_helper'
2
-
3
-
4
- describe XDR::Option, ".read" do
5
- subject{ XDR::Option[XDR::Int] }
6
-
7
- it "decodes values correctly" do
8
- expect(read "\x00\x00\x00\x01\x00\x00\x00\x00" ).to eq(0)
9
- expect(read "\x00\x00\x00\x00" ).to eq(nil)
10
- end
11
-
12
- def read(str)
13
- io = StringIO.new(str)
14
- subject.read(io)
15
- end
16
- end
17
-
18
- describe XDR::Option, ".write" do
19
- subject{ XDR::Option[XDR::Int] }
20
-
21
- it "decodes values correctly" do
22
- expect(write 0).to eq_bytes("\x00\x00\x00\x01\x00\x00\x00\x00")
23
- expect(write nil).to eq_bytes("\x00\x00\x00\x00")
24
- end
25
-
26
- it "raises WriteError when the provided value is non-nil bust invalid for the child type" do
27
- expect{ write 1.0 }.to raise_error(XDR::WriteError)
28
- expect{ write "hi" }.to raise_error(XDR::WriteError)
29
- end
30
-
31
- def write(val)
32
- io = StringIO.new()
33
- subject.write(val, io)
34
- io.string
35
- end
36
- end
@@ -1,14 +0,0 @@
1
- require 'spec_helper'
2
-
3
-
4
- describe XDR::Quadruple, ".read" do
5
- let(:zero){ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" }
6
- it "cannot decode values yet" do
7
- expect{ read zero }.to raise_error(NotImplementedError)
8
- end
9
-
10
- def read(str)
11
- io = StringIO.new(str)
12
- subject.read(io)
13
- end
14
- end
@@ -1,27 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe XDR::RPC::RecordReader, "#read" do
4
-
5
- it "decodes values correctly" do
6
- empty_record = read "\x00\x00\x00\x00"
7
- last_record = read "\x80\x00\x00\x02\x00\x00"
8
-
9
- expect(empty_record).to_not be_last
10
- expect(empty_record.length).to eq(0)
11
- expect(empty_record.content.string).to eq("")
12
-
13
- expect(last_record).to be_last
14
- expect(last_record.length).to eq(2)
15
- expect(last_record.content.string).to eq("\x00\x00")
16
- end
17
-
18
- it "raises EOFError the byte stream isn't large enough" do
19
- expect{ read "\x00\x00\x00\x01" }.to raise_error(EOFError)
20
- expect{ read "\x00\x00\x00\x08\x00\x00\x00\x01" }.to raise_error(EOFError)
21
- end
22
-
23
- def read(str)
24
- io = StringIO.new(str)
25
- subject.read(io)
26
- end
27
- end