nbtfile 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +2 -0
- data/VERSION +1 -1
- data/lib/nbtfile.rb +15 -2
- data/spec/nbtfile_spec.rb +71 -83
- metadata +1 -1
data/README.rdoc
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.3
|
data/lib/nbtfile.rb
CHANGED
@@ -481,8 +481,21 @@ def self.tokenize(io)
|
|
481
481
|
end
|
482
482
|
reader = Reader.new(io)
|
483
483
|
|
484
|
-
|
485
|
-
yield token
|
484
|
+
if block_given?
|
485
|
+
reader.each_token { |token| yield token }
|
486
|
+
else
|
487
|
+
tokens = []
|
488
|
+
reader.each_token { |token| tokens << token }
|
489
|
+
tokens
|
490
|
+
end
|
491
|
+
end
|
492
|
+
|
493
|
+
def self.emit(io)
|
494
|
+
writer = Writer.new(io)
|
495
|
+
begin
|
496
|
+
yield writer
|
497
|
+
ensure
|
498
|
+
writer.finish
|
486
499
|
end
|
487
500
|
end
|
488
501
|
|
data/spec/nbtfile_spec.rb
CHANGED
@@ -157,17 +157,84 @@ describe "NBTFile::tokenize" do
|
|
157
157
|
end
|
158
158
|
end
|
159
159
|
|
160
|
+
describe "NBTFile::tokenize without a block" do
|
161
|
+
include ZlibHelpers
|
162
|
+
|
163
|
+
it_should_behave_like "readers and writers"
|
164
|
+
|
165
|
+
def check_reader_or_writer(input, tokens)
|
166
|
+
io = make_zipped_stream(input)
|
167
|
+
actual_tokens = NBTFile.tokenize(io)
|
168
|
+
actual_tokens.should be_a_kind_of(Enumerable)
|
169
|
+
actual_tokens.to_a.should == tokens
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
describe "NBTFile::emit" do
|
174
|
+
include ZlibHelpers
|
175
|
+
|
176
|
+
it_should_behave_like "readers and writers"
|
177
|
+
|
178
|
+
def check_reader_or_writer(output, tokens)
|
179
|
+
io = StringIO.new()
|
180
|
+
NBTFile.emit(io) do |writer|
|
181
|
+
for token in tokens
|
182
|
+
writer.emit_token(token)
|
183
|
+
end
|
184
|
+
end
|
185
|
+
actual_output = unzip_string(io.string)
|
186
|
+
actual_output.should == output
|
187
|
+
end
|
188
|
+
|
189
|
+
def self.emit_shorthand(description, output, &block)
|
190
|
+
it description do
|
191
|
+
io = StringIO.new()
|
192
|
+
NBTFile.emit(io, &block)
|
193
|
+
actual_output = unzip_string(io.string)
|
194
|
+
actual_output.should == output
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
emit_shorthand "should support shorthand for emitting lists",
|
199
|
+
"\x0a\x00\x04test" \
|
200
|
+
"\x09\x00\x03foo\x01\x00\x00\x00\x02" \
|
201
|
+
"\x0c\x2b" \
|
202
|
+
"\x00" do |writer|
|
203
|
+
writer.emit_token(Tokens::TAG_Compound["test", nil])
|
204
|
+
writer.emit_list("foo", Tokens::TAG_Byte) do
|
205
|
+
writer.emit_item(12)
|
206
|
+
writer.emit_item(43)
|
207
|
+
end
|
208
|
+
writer.emit_token(Tokens::TAG_End[nil, nil])
|
209
|
+
end
|
210
|
+
|
211
|
+
emit_shorthand "should support shorthand for emitting compound structures",
|
212
|
+
"\x0a\x00\x04test" \
|
213
|
+
"\x0a\x00\x03xyz" \
|
214
|
+
"\x01\x00\x03foo\x08" \
|
215
|
+
"\x01\x00\x03bar\x02" \
|
216
|
+
"\x00" \
|
217
|
+
"\x00" do |writer|
|
218
|
+
writer.emit_token(Tokens::TAG_Compound["test", nil])
|
219
|
+
writer.emit_compound("xyz") do
|
220
|
+
writer.emit_token(Tokens::TAG_Byte["foo", 0x08])
|
221
|
+
writer.emit_token(Tokens::TAG_Byte["bar", 0x02])
|
222
|
+
end
|
223
|
+
writer.emit_token(Tokens::TAG_End[nil, nil])
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
160
227
|
describe "NBTFile::load" do
|
161
228
|
include ZlibHelpers
|
162
229
|
|
163
230
|
def self.nbtfile_load(description, tokens, result)
|
164
231
|
it description do
|
165
232
|
io = StringIO.new
|
166
|
-
|
167
|
-
|
168
|
-
|
233
|
+
NBTFile.emit(io) do |writer|
|
234
|
+
for token in tokens
|
235
|
+
writer.emit_token(token)
|
236
|
+
end
|
169
237
|
end
|
170
|
-
writer.finish
|
171
238
|
actual_result = NBTFile.load(StringIO.new(io.string))
|
172
239
|
actual_result.should == result
|
173
240
|
end
|
@@ -198,82 +265,3 @@ describe "NBTFile::load" do
|
|
198
265
|
Tokens::TAG_End["", nil]],
|
199
266
|
["foo", {"bar" => [32, 45]}]
|
200
267
|
end
|
201
|
-
|
202
|
-
describe NBTFile::Reader do
|
203
|
-
include ZlibHelpers
|
204
|
-
|
205
|
-
it_should_behave_like "readers and writers"
|
206
|
-
|
207
|
-
def check_reader_or_writer(input, tokens)
|
208
|
-
io = make_zipped_stream(input)
|
209
|
-
reader = NBTFile::Reader.new(io)
|
210
|
-
actual_tokens = []
|
211
|
-
reader.each_token do |token|
|
212
|
-
actual_tokens << token
|
213
|
-
end
|
214
|
-
actual_tokens.should == tokens
|
215
|
-
end
|
216
|
-
end
|
217
|
-
|
218
|
-
describe NBTFile::Writer do
|
219
|
-
include ZlibHelpers
|
220
|
-
|
221
|
-
it_should_behave_like "readers and writers"
|
222
|
-
|
223
|
-
def check_reader_or_writer(output, tokens)
|
224
|
-
stream = StringIO.new()
|
225
|
-
writer = NBTFile::Writer.new(stream)
|
226
|
-
begin
|
227
|
-
for token in tokens
|
228
|
-
writer.emit_token(token)
|
229
|
-
end
|
230
|
-
ensure
|
231
|
-
writer.finish
|
232
|
-
end
|
233
|
-
actual_output = unzip_string(stream.string)
|
234
|
-
actual_output.should == output
|
235
|
-
end
|
236
|
-
|
237
|
-
it "should support shorthand for emitting lists" do
|
238
|
-
output = StringIO.new()
|
239
|
-
writer = NBTFile::Writer.new(output)
|
240
|
-
begin
|
241
|
-
writer.emit_token(Tokens::TAG_Compound["test", nil])
|
242
|
-
writer.emit_list("foo", Tokens::TAG_Byte) do
|
243
|
-
writer.emit_item(12)
|
244
|
-
writer.emit_item(43)
|
245
|
-
end
|
246
|
-
writer.emit_token(Tokens::TAG_End[nil, nil])
|
247
|
-
ensure
|
248
|
-
writer.finish
|
249
|
-
end
|
250
|
-
|
251
|
-
actual_output = unzip_string(output.string)
|
252
|
-
actual_output.should == "\x0a\x00\x04test" \
|
253
|
-
"\x09\x00\x03foo\x01\x00\x00\x00\x02" \
|
254
|
-
"\x0c\x2b" \
|
255
|
-
"\x00"
|
256
|
-
end
|
257
|
-
|
258
|
-
it "should support shorthand for emitting compound structures" do
|
259
|
-
output = StringIO.new()
|
260
|
-
writer = NBTFile::Writer.new(output)
|
261
|
-
begin
|
262
|
-
writer.emit_token(Tokens::TAG_Compound["test", nil])
|
263
|
-
writer.emit_compound("xyz") do
|
264
|
-
writer.emit_token(Tokens::TAG_Byte["foo", 0x08])
|
265
|
-
writer.emit_token(Tokens::TAG_Byte["bar", 0x02])
|
266
|
-
end
|
267
|
-
writer.emit_token(Tokens::TAG_End[nil, nil])
|
268
|
-
ensure
|
269
|
-
writer.finish
|
270
|
-
end
|
271
|
-
actual_output = unzip_string(output.string)
|
272
|
-
actual_output.should == "\x0a\x00\x04test" \
|
273
|
-
"\x0a\x00\x03xyz" \
|
274
|
-
"\x01\x00\x03foo\x08" \
|
275
|
-
"\x01\x00\x03bar\x02" \
|
276
|
-
"\x00" \
|
277
|
-
"\x00"
|
278
|
-
end
|
279
|
-
end
|