CBOR specs: new tests (cbor_discriminator, unions, empty arrays & hashs, objects).
parent
81c91e6eb2
commit
b74a1af8e5
|
@ -24,26 +24,101 @@ class House
|
|||
end
|
||||
|
||||
class Person
|
||||
include CBOR::Serializable
|
||||
include CBOR::Serializable::Unmapped
|
||||
include CBOR::Serializable
|
||||
include CBOR::Serializable::Unmapped
|
||||
|
||||
property name : String?
|
||||
def initialize(@name = nil)
|
||||
end
|
||||
property name : String?
|
||||
def initialize(@name = nil)
|
||||
end
|
||||
end
|
||||
|
||||
class Game
|
||||
include CBOR::Serializable
|
||||
|
||||
abstract class Player
|
||||
include CBOR::Serializable
|
||||
|
||||
@[CBOR::Field(key: "hp")]
|
||||
property health_points : Int32 = 100
|
||||
|
||||
@[CBOR::Field(key: "dp")]
|
||||
property defense_points : Int32 = 5
|
||||
|
||||
use_cbor_discriminator "type", {
|
||||
magician: Magician,
|
||||
warrior: Warrior
|
||||
}
|
||||
def initialize
|
||||
end
|
||||
end
|
||||
|
||||
class Magician < Player
|
||||
property wand_level : Int32 = 1
|
||||
def initialize
|
||||
@type = "magician"
|
||||
end
|
||||
end
|
||||
|
||||
class Warrior < Player
|
||||
def initialize
|
||||
@defense_points = 20
|
||||
@type = "warrior"
|
||||
end
|
||||
end
|
||||
|
||||
property players : Array(Magician | Warrior)
|
||||
|
||||
def initialize
|
||||
@players = [] of (Magician | Warrior)
|
||||
end
|
||||
end
|
||||
|
||||
describe CBOR do
|
||||
|
||||
describe "basics: to_cbor" do
|
||||
it "empty array" do
|
||||
empty_array_cbor = [] of Nil
|
||||
empty_array_cbor.to_cbor.hexstring.should eq "80"
|
||||
end
|
||||
|
||||
it "array - strings" do
|
||||
["a", "b", "c"].to_cbor.hexstring.should eq "83616161626163"
|
||||
end
|
||||
it "array - " do
|
||||
["a", "b", "c"].to_cbor.hexstring.should eq "83616161626163"
|
||||
|
||||
it "empty hash" do
|
||||
empty = {} of Nil => Nil
|
||||
cbor_stuff = empty.to_cbor
|
||||
cbor_stuff.hexstring.should eq "a0"
|
||||
end
|
||||
|
||||
it "hash" do
|
||||
{"a" => 10, "b" => true, "c" => nil}.to_cbor.hexstring.should eq "a361610a6162f56163f6"
|
||||
end
|
||||
|
||||
it "union String | Int32" do
|
||||
value = (String | Int32).from_cbor(30.to_cbor).to_cbor
|
||||
value.hexstring.should eq "181e"
|
||||
end
|
||||
it "union (String | Int32)" do
|
||||
value = (String | Int32).from_cbor("blah".to_cbor).to_cbor
|
||||
value.hexstring.should eq "64626c6168"
|
||||
end
|
||||
it "union (Bool | Int32)" do
|
||||
value = (Bool | Int32).from_cbor(30.to_cbor).to_cbor
|
||||
value.hexstring.should eq "181e"
|
||||
end
|
||||
it "union (Bool | Int32)" do
|
||||
value = (Bool | Int32).from_cbor(false.to_cbor).to_cbor
|
||||
value.hexstring.should eq "f4"
|
||||
end
|
||||
it "union (String | Bool | Int32)" do
|
||||
value = (String | Bool | Int32).from_cbor("hello".to_cbor).to_cbor
|
||||
value.hexstring.should eq "6568656c6c6f"
|
||||
end
|
||||
it "union (String | Nil | Int32)" do
|
||||
value = (String | Nil | Int32).from_cbor(nil.to_cbor).to_cbor
|
||||
value.hexstring.should eq "f6"
|
||||
end
|
||||
end
|
||||
|
||||
describe "Time" do
|
||||
|
@ -72,6 +147,20 @@ describe CBOR do
|
|||
|
||||
|
||||
describe "CBOR library annotations and features" do
|
||||
it "House#to_cbor with CBOR::Field annotations" do
|
||||
house = House.new "my address"
|
||||
house.location = Location.new 1.1, 1.2
|
||||
house.to_cbor.hexstring.should eq "a267616464726573736a6d792061646472657373686c6f636174696f6ea2636c6174fb3ff199999999999a636c6e67fb3ff3333333333333"
|
||||
end
|
||||
|
||||
it "House#from_cbor with CBOR::Field annotations" do
|
||||
other_house = House.new "my address"
|
||||
other_house.location = Location.new 1.1, 1.2
|
||||
|
||||
house = House.from_cbor other_house.to_cbor
|
||||
house.to_cbor.hexstring.should eq "a267616464726573736a6d792061646472657373686c6f636174696f6ea2636c6174fb3ff199999999999a636c6e67fb3ff3333333333333"
|
||||
end
|
||||
|
||||
it "Person#from_cbor with unmapped values" do
|
||||
h = Hash(String | Int32, String | Int32).new
|
||||
h["name"] = "Alice"
|
||||
|
@ -118,4 +207,26 @@ describe CBOR do
|
|||
cbor_any_hash.to_cbor.hexstring.should eq "a3646e616d6565416c69636563616765181e6473697a6518a0"
|
||||
end
|
||||
end
|
||||
|
||||
# db[i]?.should be_nil
|
||||
describe "Complex object representations" do
|
||||
it "Game#to_cbor with use_cbor_discriminator" do
|
||||
game = Game.new
|
||||
magician = Game::Magician.new
|
||||
magician.wand_level = 5
|
||||
game.players << magician
|
||||
game.players << Game::Warrior.new
|
||||
game.to_cbor.hexstring.should eq "a167706c617965727382a46268701864626470056a77616e645f6c6576656c056474797065686d6167696369616ea362687018646264701464747970656777617272696f72"
|
||||
end
|
||||
|
||||
it "Game#from_cbor with use_cbor_discriminator" do
|
||||
game = Game.new
|
||||
magician = Game::Magician.new
|
||||
magician.wand_level = 5
|
||||
game.players << magician
|
||||
game.players << Game::Warrior.new
|
||||
new_game = Game.from_cbor game.to_cbor
|
||||
new_game.to_cbor.hexstring.should eq "a167706c617965727382a46268701864626470056a77616e645f6c6576656c056474797065686d6167696369616ea362687018646264701464747970656777617272696f72"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue