Sha256: 8283c307df9d47868ac1d40cd38f76598c6452883ae0b21300ec3a39f4c5a1d3

Contents?: true

Size: 1.69 KB

Versions: 7

Compression:

Stored size: 1.69 KB

Contents

require File.expand_path(File.dirname(__FILE__) + '/spec_helper')

require 'stringio'

$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
require 'protocol_buffers/runtime/field'

describe ProtocolBuffers, "fields" do

  def mkfield(ftype)
    ProtocolBuffers::Field.const_get(ftype).new(:optional, "test", 1)
  end

  it "checks bounds on varint field types" do
    u32 = mkfield(:Uint32Field)
    proc { u32.check_valid(0xFFFFFFFF) }.should_not raise_error()
    proc { u32.check_valid(0x100000000) }.should raise_error(ArgumentError)
    proc { u32.check_valid(-1) }.should raise_error(ArgumentError)

    u64 = mkfield(:Uint64Field)
    proc { u64.check_valid(0xFFFFFFFF_FFFFFFFF) }.should_not raise_error()
    proc { u64.check_valid(0x100000000_00000000) }.should raise_error(ArgumentError)
    proc { u64.check_valid(-1) }.should raise_error(ArgumentError)
  end

  it "properly encodes and decodes negative varints" do
    val = -2082844800000000
    str = "\200\300\313\274\236\265\246\374\377\001"
    sio = ProtocolBuffers.bin_sio
    ProtocolBuffers::Varint.encode(sio, val)
    sio.string.should == str
    sio.rewind
    val2 = ProtocolBuffers::Varint.decode(sio)
    int64 = mkfield(:Int64Field)
    int64.deserialize(val2).should == val
    proc { int64.check_value(int64.deserialize(val2)) }.should_not raise_error
  end

  it "verifies UTF-8 for string fields" do
    pending("do UTF-8 validation") do
      s1 = mkfield(:StringField)
      proc { s1.check_valid("hello") }.should_not raise_error()
      proc { s1.check_valid("\xff\xff") }.should raise_error(ArgumentError)
      b1 = mkfield(:BytesField)
      proc { b1.check_valid("\xff\xff") }.should_not raise_error()
    end
  end

end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
ruby-protocol-buffers-1.2.2 spec/fields_spec.rb
ruby-protocol-buffers-1.2.1 spec/fields_spec.rb
ruby-protocol-buffers-1.2.0 spec/fields_spec.rb
ruby-protocol-buffers-1.1.0 spec/fields_spec.rb
ruby-protocol-buffers-1.0.1 spec/fields_spec.rb
ruby-protocol-buffers-1.0.0 spec/fields_spec.rb
ruby-protocol-buffers-0.8.5 spec/fields_spec.rb