msgpack 1.3.3 → 1.7.2

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.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/ChangeLog +99 -0
  3. data/README.md +293 -0
  4. data/ext/java/org/msgpack/jruby/Buffer.java +26 -19
  5. data/ext/java/org/msgpack/jruby/Decoder.java +46 -23
  6. data/ext/java/org/msgpack/jruby/Encoder.java +68 -30
  7. data/ext/java/org/msgpack/jruby/ExtensionRegistry.java +43 -64
  8. data/ext/java/org/msgpack/jruby/ExtensionValue.java +6 -9
  9. data/ext/java/org/msgpack/jruby/Factory.java +43 -42
  10. data/ext/java/org/msgpack/jruby/Packer.java +37 -40
  11. data/ext/java/org/msgpack/jruby/Unpacker.java +86 -68
  12. data/ext/msgpack/buffer.c +58 -85
  13. data/ext/msgpack/buffer.h +59 -20
  14. data/ext/msgpack/buffer_class.c +161 -52
  15. data/ext/msgpack/buffer_class.h +1 -0
  16. data/ext/msgpack/compat.h +1 -111
  17. data/ext/msgpack/extconf.rb +41 -23
  18. data/ext/msgpack/factory_class.c +143 -87
  19. data/ext/msgpack/packer.c +66 -43
  20. data/ext/msgpack/packer.h +25 -27
  21. data/ext/msgpack/packer_class.c +102 -130
  22. data/ext/msgpack/packer_class.h +11 -0
  23. data/ext/msgpack/packer_ext_registry.c +35 -40
  24. data/ext/msgpack/packer_ext_registry.h +41 -38
  25. data/ext/msgpack/rbinit.c +1 -1
  26. data/ext/msgpack/rmem.c +3 -4
  27. data/ext/msgpack/sysdep.h +5 -2
  28. data/ext/msgpack/unpacker.c +130 -126
  29. data/ext/msgpack/unpacker.h +22 -13
  30. data/ext/msgpack/unpacker_class.c +94 -124
  31. data/ext/msgpack/unpacker_class.h +11 -0
  32. data/ext/msgpack/unpacker_ext_registry.c +40 -28
  33. data/ext/msgpack/unpacker_ext_registry.h +21 -18
  34. data/lib/msgpack/bigint.rb +69 -0
  35. data/lib/msgpack/buffer.rb +9 -0
  36. data/lib/msgpack/factory.rb +140 -10
  37. data/lib/msgpack/packer.rb +10 -1
  38. data/lib/msgpack/symbol.rb +21 -4
  39. data/lib/msgpack/time.rb +1 -1
  40. data/lib/msgpack/unpacker.rb +14 -1
  41. data/lib/msgpack/version.rb +4 -8
  42. data/lib/msgpack.rb +7 -12
  43. data/msgpack.gemspec +9 -8
  44. metadata +37 -96
  45. data/.gitignore +0 -23
  46. data/.rubocop.yml +0 -36
  47. data/.travis.yml +0 -43
  48. data/Gemfile +0 -9
  49. data/README.rdoc +0 -225
  50. data/Rakefile +0 -78
  51. data/appveyor.yml +0 -18
  52. data/bench/pack.rb +0 -23
  53. data/bench/pack_log.rb +0 -33
  54. data/bench/pack_log_long.rb +0 -65
  55. data/bench/pack_symbols.rb +0 -28
  56. data/bench/run.sh +0 -14
  57. data/bench/run_long.sh +0 -35
  58. data/bench/run_symbols.sh +0 -26
  59. data/bench/unpack.rb +0 -21
  60. data/bench/unpack_log.rb +0 -34
  61. data/bench/unpack_log_long.rb +0 -67
  62. data/doclib/msgpack/buffer.rb +0 -193
  63. data/doclib/msgpack/core_ext.rb +0 -101
  64. data/doclib/msgpack/error.rb +0 -19
  65. data/doclib/msgpack/extension_value.rb +0 -9
  66. data/doclib/msgpack/factory.rb +0 -101
  67. data/doclib/msgpack/packer.rb +0 -208
  68. data/doclib/msgpack/time.rb +0 -22
  69. data/doclib/msgpack/timestamp.rb +0 -44
  70. data/doclib/msgpack/unpacker.rb +0 -183
  71. data/doclib/msgpack.rb +0 -87
  72. data/msgpack.org.md +0 -46
  73. data/spec/cases.json +0 -1
  74. data/spec/cases.msg +0 -0
  75. data/spec/cases_compact.msg +0 -0
  76. data/spec/cases_spec.rb +0 -39
  77. data/spec/cruby/buffer_io_spec.rb +0 -255
  78. data/spec/cruby/buffer_packer.rb +0 -29
  79. data/spec/cruby/buffer_spec.rb +0 -575
  80. data/spec/cruby/buffer_unpacker.rb +0 -19
  81. data/spec/cruby/unpacker_spec.rb +0 -70
  82. data/spec/ext_value_spec.rb +0 -99
  83. data/spec/exttypes.rb +0 -51
  84. data/spec/factory_spec.rb +0 -367
  85. data/spec/format_spec.rb +0 -301
  86. data/spec/jruby/benchmarks/shootout_bm.rb +0 -73
  87. data/spec/jruby/benchmarks/symbolize_keys_bm.rb +0 -25
  88. data/spec/jruby/unpacker_spec.rb +0 -186
  89. data/spec/msgpack_spec.rb +0 -214
  90. data/spec/pack_spec.rb +0 -61
  91. data/spec/packer_spec.rb +0 -557
  92. data/spec/random_compat.rb +0 -24
  93. data/spec/spec_helper.rb +0 -38
  94. data/spec/timestamp_spec.rb +0 -121
  95. data/spec/unpack_spec.rb +0 -57
  96. data/spec/unpacker_spec.rb +0 -716
@@ -1,22 +0,0 @@
1
- module MessagePack
2
-
3
- # MessagePack::Time provides packer and unpacker functions for a timestamp type.
4
- # @example Setup for DefaultFactory
5
- # MessagePack::DefaultFactory.register_type(
6
- # MessagePack::Timestamp::TYPE,
7
- # Time,
8
- # packer: MessagePack::Time::Packer,
9
- # unpacker: MessagePack::Time::Unpacker
10
- # )
11
- class Time
12
- # A packer function that packs a Time instance to a MessagePack timestamp.
13
- Packer = lambda { |payload|
14
- # ...
15
- }
16
-
17
- # An unpacker function that unpacks a MessagePack timestamp to a Time instance.
18
- Unpacker = lambda { |time|
19
- # ...
20
- }
21
- end
22
- end
@@ -1,44 +0,0 @@
1
- module MessagePack
2
- # A utility class for MessagePack timestamp type
3
- class Timestamp
4
- #
5
- # The timestamp extension type defined in the MessagePack spec.
6
- #
7
- # See https://github.com/msgpack/msgpack/blob/master/spec.md#timestamp-extension-type for details.
8
- #
9
- TYPE = -1
10
-
11
- # @return [Integer] Second part of the timestamp.
12
- attr_reader :sec
13
-
14
- # @return [Integer] Nanosecond part of the timestamp.
15
- attr_reader :nsec
16
-
17
- # @param [Integer] sec
18
- # @param [Integer] nsec
19
- def initialize(sec, nsec)
20
- end
21
-
22
- # @example An unpacker implementation for the Time class
23
- # lambda do |payload|
24
- # tv = MessagePack::Timestamp.from_msgpack_ext(payload)
25
- # Time.at(tv.sec, tv.nsec, :nanosecond)
26
- # end
27
- #
28
- # @param [String] data
29
- # @return [MessagePack::Timestamp]
30
- def self.from_msgpack_ext(data)
31
- end
32
-
33
- # @example A packer implementation for the Time class
34
- # unpacker = lambda do |time|
35
- # MessagePack::Timestamp.to_msgpack_ext(time.tv_sec, time.tv_nsec)
36
- # end
37
- #
38
- # @param [Integer] sec
39
- # @param [Integer] nsec
40
- # @return [String]
41
- def self.to_msgpack_ext(sec, nsec)
42
- end
43
- end
44
- end
@@ -1,183 +0,0 @@
1
- module MessagePack
2
-
3
- #
4
- # MessagePack::Unpacker is a class to deserialize objects.
5
- #
6
- class Unpacker
7
- #
8
- # Creates a MessagePack::Unpacker instance.
9
- #
10
- # @overload initialize(options={})
11
- # @param options [Hash]
12
- #
13
- # @overload initialize(io, options={})
14
- # @param io [IO]
15
- # @param options [Hash]
16
- # This unpacker reads data from the _io_ to fill the internal buffer.
17
- # _io_ must respond to readpartial(length [,string]) or read(length [,string]) method.
18
- #
19
- # Supported options:
20
- #
21
- # * *:symbolize_keys* deserialize keys of Hash objects as Symbol instead of String
22
- # * *:allow_unknown_ext* allow to deserialize ext type object with unknown type id as ExtensionValue instance. Otherwise (by default), unpacker throws UnknownExtTypeError.
23
- #
24
- # See also Buffer#initialize for other options.
25
- #
26
- def initialize(*args)
27
- end
28
-
29
- #
30
- # Register a new ext type to deserialize it. This method should be called with
31
- # Class and its class method name, or block, which returns a instance object.
32
- #
33
- # @overload register_type(type, &block)
34
- # @param type [Fixnum] type id (0-127) user defined type id for specified deserializer block
35
- # @yieldparam data [String] bytes(ASCII-8BIT String) represents serialized object, to be deserialized
36
- #
37
- # @overload register_type(type, klass, class_method_name)
38
- # @param type [Fixnum] type id (0-127) user defined type id for specified Class
39
- # @param klass [Class] Class to be serialized with speicifed type id
40
- # @param class_method_name [Symbol] class method which returns an instance object
41
- #
42
- # @return nil
43
- #
44
- def register_type(type, klass, method_name, &block)
45
- end
46
-
47
- #
48
- # Returns a list of registered types, ordered by type id.
49
- # Each element is a Hash object includes keys :type, :class and :unpacker.
50
- #
51
- # @return Array
52
- #
53
- def registered_types
54
- end
55
-
56
- #
57
- # Returns true/false which indicate specified class or type id is registered or not.
58
- #
59
- # @param klass_or_type [Class or Fixnum] Class or type id (0-127) to be checked
60
- # @return true or false
61
- #
62
- def type_registered?(klass_or_type)
63
- end
64
-
65
- #
66
- # Internal buffer
67
- #
68
- # @return [MessagePack::Buffer]
69
- #
70
- attr_reader :buffer
71
-
72
- #
73
- # Deserializes an object from the io or internal buffer and returns it.
74
- #
75
- # This method reads data from io into the internal buffer and deserializes an object
76
- # from the buffer. It repeats reading data from the io until enough data is available
77
- # to deserialize at least one object. After deserializing one object, unused data is
78
- # left in the internal buffer.
79
- #
80
- # If there're not enough data to deserialize one object, this method raises EOFError.
81
- # If data format is invalid, this method raises MessagePack::MalformedFormatError.
82
- # If the object nests too deeply, this method raises MessagePack::StackError.
83
- #
84
- # @return [Object] deserialized object
85
- #
86
- def read
87
- end
88
-
89
- alias unpack read
90
-
91
- #
92
- # Deserializes an object and ignores it. This method is faster than _read_.
93
- #
94
- # This method could raise the same errors with _read_.
95
- #
96
- # @return nil
97
- #
98
- def skip
99
- end
100
-
101
- #
102
- # Deserializes a nil value if it exists and returns _true_.
103
- # Otherwise, if a byte exists but the byte doesn't represent nil value,
104
- # returns _false_.
105
- #
106
- # If there're not enough data, this method raises EOFError.
107
- #
108
- # @return [Boolean]
109
- #
110
- def skip_nil
111
- end
112
-
113
- #
114
- # Read a header of an array and returns its size.
115
- # It converts a serialized array into a stream of elements.
116
- #
117
- # If the serialized object is not an array, it raises MessagePack::UnexpectedTypeError.
118
- # If there're not enough data, this method raises EOFError.
119
- #
120
- # @return [Integer] size of the array
121
- #
122
- def read_array_header
123
- end
124
-
125
- #
126
- # Reads a header of an map and returns its size.
127
- # It converts a serialized map into a stream of key-value pairs.
128
- #
129
- # If the serialized object is not a map, it raises MessagePack::UnexpectedTypeError.
130
- # If there're not enough data, this method raises EOFError.
131
- #
132
- # @return [Integer] size of the map
133
- #
134
- def read_map_header
135
- end
136
-
137
- #
138
- # Appends data into the internal buffer.
139
- # This method is equivalent to unpacker.buffer.append(data).
140
- #
141
- # @param data [String]
142
- # @return [Unpacker] self
143
- #
144
- def feed(data)
145
- end
146
-
147
- #
148
- # Repeats to deserialize objects.
149
- #
150
- # It repeats until the io or internal buffer does not include any complete objects.
151
- #
152
- # If the an IO is set, it repeats to read data from the IO when the buffer
153
- # becomes empty until the IO raises EOFError.
154
- #
155
- # This method could raise same errors with _read_ excepting EOFError.
156
- #
157
- # @yieldparam object [Object] deserialized object
158
- # @return nil
159
- #
160
- def each(&block)
161
- end
162
-
163
- #
164
- # Appends data into the internal buffer and repeats to deserialize objects.
165
- # This method is equivalent to unpacker.feed(data) && unpacker.each { ... }.
166
- #
167
- # @param data [String]
168
- # @yieldparam object [Object] deserialized object
169
- # @return nil
170
- #
171
- def feed_each(data, &block)
172
- end
173
-
174
- #
175
- # Clears the internal buffer and resets deserialization state of the unpacker.
176
- #
177
- # @return nil
178
- #
179
- def reset
180
- end
181
- end
182
-
183
- end
data/doclib/msgpack.rb DELETED
@@ -1,87 +0,0 @@
1
-
2
- module MessagePack
3
- #
4
- # Serializes an object into an IO or String.
5
- #
6
- # @overload dump(obj, options={})
7
- # @param obj [Object] object to be serialized
8
- # @param options [Hash]
9
- # @return [String] serialized data
10
- #
11
- # @overload dump(obj, io, options={})
12
- # @param obj [Object] object to be serialized
13
- # @param io [IO]
14
- # @param options [Hash]
15
- # @return [nil]
16
- #
17
- # See Packer#initialize for supported options.
18
- #
19
- def self.dump(obj)
20
- end
21
-
22
- #
23
- # Serializes an object into an IO or String. Alias of dump.
24
- #
25
- # @overload pack(obj, options={})
26
- # @param obj [Object] object to be serialized
27
- # @param options [Hash]
28
- # @return [String] serialized data
29
- #
30
- # @overload pack(obj, io, options={})
31
- # @param obj [Object] object to be serialized
32
- # @param io [IO]
33
- # @param options [Hash]
34
- # @return [nil]
35
- #
36
- # See Packer#initialize for supported options.
37
- #
38
- def self.pack(obj)
39
- end
40
-
41
- #
42
- # Deserializes an object from an IO or String.
43
- #
44
- # @overload load(string, options={})
45
- # @param string [String] data to deserialize
46
- # @param options [Hash]
47
- #
48
- # @overload load(io, options={})
49
- # @param io [IO]
50
- # @param options [Hash]
51
- #
52
- # @return [Object] deserialized object
53
- #
54
- # See Unpacker#initialize for supported options.
55
- #
56
- def self.load(src, options={})
57
- end
58
-
59
- #
60
- # Deserializes an object from an IO or String. Alias of load.
61
- #
62
- # @overload unpack(string, options={})
63
- # @param string [String] data to deserialize
64
- # @param options [Hash]
65
- #
66
- # @overload unpack(io, options={})
67
- # @param io [IO]
68
- # @param options [Hash]
69
- #
70
- # @return [Object] deserialized object
71
- #
72
- # See Unpacker#initialize for supported options.
73
- #
74
- def self.unpack(src, options={})
75
- end
76
-
77
- #
78
- # An instance of Factory class. DefaultFactory is also used
79
- # by global pack/unpack methods such as MessagePack.dump/load,
80
- # Hash#to_msgpack, and other to_msgpack methods.
81
- #
82
- # Calling DefaultFactory.register_type lets you add an extension
83
- # type globally.
84
- #
85
- DefaultFactory = Factory.new
86
- end
87
-
data/msgpack.org.md DELETED
@@ -1,46 +0,0 @@
1
- # MessagePack for Ruby
2
-
3
- ```
4
- require 'msgpack'
5
- msg = [1,2,3].to_msgpack #=> "\x93\x01\x02\x03"
6
- MessagePack.unpack(msg) #=> [1,2,3]
7
- ```
8
-
9
- ## Install
10
-
11
- ```
12
- gem install msgpack
13
- ```
14
-
15
- ## Use cases
16
-
17
- * Create REST API returing MessagePack using Rails + [RABL](https://github.com/nesquena/rabl)
18
- * Store objects efficiently in memcached or Redis
19
- * Upload data in efficient format from mobile devices. See also MessagePack for [Objective-C](https://github.com/msgpack/msgpack-objectivec) and [Java](https://github.com/msgpack/msgpack-java)
20
-
21
- ## Links
22
-
23
- * [Github](https://github.com/msgpack/msgpack-ruby)
24
- * [API document](http://ruby.msgpack.org/)
25
-
26
- ## Streaming API
27
-
28
- ```
29
- # serialize a 2-element array [e1, e2]
30
- pk = MessagePack::Packer.new(io)
31
- pk.write_array_header(2).write(e1).write(e2).flush
32
- ```
33
-
34
- ```
35
- # deserialize objects from an IO
36
- u = MessagePack::Unpacker.new(io)
37
- u.each { |obj| ... }
38
- ```
39
-
40
- ```
41
- # event-driven deserialization
42
- def on_read(data)
43
- @u ||= MessagePack::Unpacker.new
44
- @u.feed_each(data) { |obj| ... }
45
- end
46
- ```
data/spec/cases.json DELETED
@@ -1 +0,0 @@
1
- [false,true,null,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,127,127,255,65535,4294967295,-32,-32,-128,-32768,-2147483648,0.0,-0.0,1.0,-1.0,"a","a","a","","","",[0],[0],[0],[],[],[],{},{},{},{"a":97},{"a":97},{"a":97},[[]],[["a"]]]
data/spec/cases.msg DELETED
Binary file
Binary file
data/spec/cases_spec.rb DELETED
@@ -1,39 +0,0 @@
1
- require 'spec_helper'
2
- require 'json'
3
-
4
- describe MessagePack do
5
- here = File.dirname(__FILE__)
6
- CASES = File.read("#{here}/cases.msg")
7
- CASES_JSON = File.read("#{here}/cases.json")
8
- CASES_COMPACT = File.read("#{here}/cases_compact.msg")
9
-
10
- it 'compare with json' do
11
- ms = []
12
- MessagePack::Unpacker.new.feed_each(CASES) {|m|
13
- ms << m
14
- }
15
-
16
- js = JSON.load(CASES_JSON)
17
-
18
- ms.zip(js) {|m,j|
19
- m.should == j
20
- }
21
- end
22
-
23
- it 'compare with compat' do
24
- ms = []
25
- MessagePack::Unpacker.new.feed_each(CASES) {|m|
26
- ms << m
27
- }
28
-
29
- cs = []
30
- MessagePack::Unpacker.new.feed_each(CASES_COMPACT) {|c|
31
- cs << c
32
- }
33
-
34
- ms.zip(cs) {|m,c|
35
- m.should == c
36
- }
37
- end
38
- end
39
-
@@ -1,255 +0,0 @@
1
- require 'spec_helper'
2
- require 'random_compat'
3
-
4
- require 'stringio'
5
- if defined?(Encoding)
6
- Encoding.default_external = 'ASCII-8BIT'
7
- end
8
-
9
- describe Buffer do
10
- r = Random.new
11
- random_seed = r.seed
12
- puts "buffer_io random seed: 0x#{random_seed.to_s(16)}"
13
-
14
- let :source do
15
- ''
16
- end
17
-
18
- def set_source(s)
19
- source.replace(s)
20
- end
21
-
22
- let :io do
23
- StringIO.new(source.dup)
24
- end
25
-
26
- let :buffer do
27
- Buffer.new(io)
28
- end
29
-
30
- it 'io returns internal io' do
31
- buffer.io.should == io
32
- end
33
-
34
- it 'close closes internal io' do
35
- expect(io).to receive(:close)
36
- buffer.close
37
- end
38
-
39
- it 'short feed and read all' do
40
- set_source 'aa'
41
- buffer.read.should == 'aa'
42
- end
43
-
44
- it 'short feed and read short' do
45
- set_source 'aa'
46
- buffer.read(1).should == 'a'
47
- buffer.read(1).should == 'a'
48
- buffer.read(1).should == nil
49
- end
50
-
51
- it 'long feed and read all' do
52
- set_source ' '*(1024*1024)
53
- s = buffer.read
54
- s.size.should == source.size
55
- s.should == source
56
- end
57
-
58
- it 'long feed and read mixed' do
59
- set_source ' '*(1024*1024)
60
- buffer.read(10).should == source.slice!(0, 10)
61
- buffer.read(10).should == source.slice!(0, 10)
62
- buffer.read(10).should == source.slice!(0, 10)
63
- s = buffer.read
64
- s.size.should == source.size
65
- s.should == source
66
- end
67
-
68
- it 'eof' do
69
- set_source ''
70
- buffer.read.should == ''
71
- end
72
-
73
- it 'eof 2' do
74
- set_source 'a'
75
- buffer.read.should == 'a'
76
- buffer.read.should == ''
77
- end
78
-
79
- it 'write short once and flush' do
80
- buffer.write('aa')
81
- buffer.flush
82
- io.string.should == 'aa'
83
- end
84
-
85
- it 'write short twice and flush' do
86
- buffer.write('a')
87
- buffer.write('a')
88
- buffer.flush
89
- io.string.should == 'aa'
90
- end
91
-
92
- it 'write long once and flush' do
93
- s = ' '*(1024*1024)
94
- buffer.write s
95
- buffer.flush
96
- io.string.size.should == s.size
97
- io.string.should == s
98
- end
99
-
100
- it 'write short multi and flush' do
101
- s = ' '*(1024*1024)
102
- 1024.times {
103
- buffer.write ' '*1024
104
- }
105
- buffer.flush
106
- io.string.size.should == s.size
107
- io.string.should == s
108
- end
109
-
110
- it 'random read' do
111
- r = Random.new(random_seed)
112
-
113
- 50.times {
114
- fragments = []
115
-
116
- r.rand(4).times do
117
- n = r.rand(1024*1400)
118
- s = r.bytes(n)
119
- fragments << s
120
- end
121
-
122
- io = StringIO.new(fragments.join)
123
- b = Buffer.new(io)
124
-
125
- fragments.each {|s|
126
- x = b.read(s.size)
127
- x.size.should == s.size
128
- x.should == s
129
- }
130
- b.empty?.should == true
131
- b.read.should == ''
132
- }
133
- end
134
-
135
- it 'random read_all' do
136
- r = Random.new(random_seed)
137
-
138
- 50.times {
139
- fragments = []
140
- r.bytes(0)
141
-
142
- r.rand(4).times do
143
- n = r.rand(1024*1400)
144
- s = r.bytes(n)
145
- fragments << s
146
- end
147
-
148
- io = StringIO.new(fragments.join)
149
- b = Buffer.new(io)
150
-
151
- fragments.each {|s|
152
- x = b.read_all(s.size)
153
- x.size.should == s.size
154
- x.should == s
155
- }
156
- b.empty?.should == true
157
- lambda {
158
- b.read_all(1)
159
- }.should raise_error(EOFError)
160
- }
161
- end
162
-
163
- it 'random skip' do
164
- r = Random.new(random_seed)
165
-
166
- 50.times {
167
- fragments = []
168
-
169
- r.rand(4).times do
170
- n = r.rand(1024*1400)
171
- s = r.bytes(n)
172
- fragments << s
173
- end
174
-
175
- io = StringIO.new(fragments.join)
176
- b = Buffer.new(io)
177
-
178
- fragments.each {|s|
179
- b.skip(s.size).should == s.size
180
- }
181
- b.empty?.should == true
182
- b.skip(1).should == 0
183
- }
184
- end
185
-
186
- it 'random skip_all' do
187
- r = Random.new(random_seed)
188
-
189
- 50.times {
190
- fragments = []
191
-
192
- r.rand(4).times do
193
- n = r.rand(1024*1400)
194
- s = r.bytes(n)
195
- fragments << s
196
- end
197
-
198
- io = StringIO.new(fragments.join)
199
- b = Buffer.new(io)
200
-
201
- fragments.each {|s|
202
- lambda {
203
- b.skip_all(s.size)
204
- }.should_not raise_error
205
- }
206
- b.empty?.should == true
207
- lambda {
208
- b.skip_all(1)
209
- }.should raise_error(EOFError)
210
- }
211
- end
212
-
213
- it 'random write and flush' do
214
- r = Random.new(random_seed)
215
-
216
- 50.times {
217
- s = r.bytes(0)
218
- io = StringIO.new
219
- b = Buffer.new(io)
220
-
221
- r.rand(4).times do
222
- n = r.rand(1024*1400)
223
- x = r.bytes(n)
224
- s << x
225
- b.write(x)
226
- end
227
-
228
- (io.string.size + b.size).should == s.size
229
-
230
- b.flush
231
-
232
- io.string.size.should == s.size
233
- io.string.should == s
234
- }
235
- end
236
-
237
- it 'random write and clear' do
238
- r = Random.new(random_seed)
239
- b = Buffer.new
240
-
241
- 50.times {
242
- s = r.bytes(0)
243
-
244
- r.rand(4).times do
245
- n = r.rand(1024*1400)
246
- x = r.bytes(n)
247
- s << x
248
- b.write(x)
249
- end
250
-
251
- b.size.should == s.size
252
- b.clear
253
- }
254
- end
255
- end
@@ -1,29 +0,0 @@
1
- # encoding: ascii-8bit
2
- require 'spec_helper'
3
-
4
- require 'stringio'
5
- if defined?(Encoding)
6
- Encoding.default_external = 'ASCII-8BIT'
7
- end
8
-
9
- describe Packer do
10
- let :packer do
11
- Packer.new
12
- end
13
-
14
- it 'initialize' do
15
- Packer.new
16
- Packer.new(nil)
17
- Packer.new(StringIO.new)
18
- Packer.new({})
19
- Packer.new(StringIO.new, {})
20
- end
21
-
22
- it 'buffer' do
23
- o1 = packer.buffer.object_id
24
- packer.buffer << 'frsyuki'
25
- packer.buffer.to_s.should == 'frsyuki'
26
- packer.buffer.object_id.should == o1
27
- end
28
- end
29
-