Skip to content

Commit 3b4398a

Browse files
committed
Merge pull request #25 from themasch/browserify
Change Testsuite to Tape, fix some browser-side bugs
2 parents d682566 + ca865ab commit 3b4398a

File tree

9 files changed

+314
-244
lines changed

9 files changed

+314
-244
lines changed

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ language: node_js
22
node_js:
33
- 0.8
44
- 0.10
5+
- 0.11

Makefile

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
2+
.PHONY: all test benchmark
3+
4+
browserify: bencode.js lib/*.js
5+
mkdir -p dist
6+
browserify bencode.js -s bencode -o dist/bencode.js
7+
8+
# TODO: thats not how it should behave!
9+
browser-test: bencode.js lib/*.js test/*.js
10+
mkdir -p dist
11+
browserify test/*.test.js -o dist/tests.js
12+
echo "<script src='tests.js'></script>" > dist/test.html
13+
# open dist/test.html in your browser now
14+
15+
test:
16+
npm test
17+
18+
benchmark:
19+
npm run-script bench
20+
21+
all: browserify test

lib/decode.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ function decode( data, encoding ) {
1010
decode.position = 0
1111
decode.encoding = encoding || null
1212

13-
decode.data = !( data instanceof Buffer )
13+
decode.data = !( Buffer.isBuffer(data) )
1414
? new Buffer( data )
1515
: data
1616

@@ -93,7 +93,7 @@ decode.integer = function() {
9393
decode.position += end + 1 - decode.position
9494

9595
return parseInt( number, 10 )
96-
96+
9797
}
9898

9999
decode.bytes = function() {

lib/encode.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ encode._floatConversionDetected = false
1414

1515
encode._encode = function( buffers, data ) {
1616

17-
if( data instanceof Buffer ) {
17+
if( Buffer.isBuffer(data) ) {
1818
buffers.push(new Buffer(data.length + ':'))
1919
buffers.push(data)
2020
return;

package.json

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
{
22
"name": "bencode",
3-
"version": "0.5.2",
3+
"version": "0.6.0",
44
"license": "MIT",
55
"description": "Bencode de/encoder",
6-
"keywords": [ "torrent", "bittorrent", "bencode", "bdecode", "bencoding" ],
7-
6+
"keywords": [
7+
"torrent",
8+
"bittorrent",
9+
"bencode",
10+
"bdecode",
11+
"bencoding"
12+
],
813
"contributors": [
914
{
1015
"name": "Mark Schmale",
@@ -15,32 +20,38 @@
1520
"name": "Jonas Hermsmeier",
1621
"email": "[email protected]"
1722
}
18-
1923
],
20-
2124
"main": "bencode.js",
22-
2325
"devDependencies": {
2426
"matcha": "",
2527
"bencoding": "",
2628
"dht-bencode": "",
2729
"bncode": "",
2830
"dht.js": "",
29-
"mocha": ""
31+
"tape": "~2.12"
3032
},
31-
3233
"scripts": {
33-
"test": "node node_modules/mocha/bin/mocha",
34+
"test": "node node_modules/tape/bin/tape test/*.test.js",
3435
"bench": "node node_modules/matcha/bin/matcha benchmark/*.js"
3536
},
36-
3737
"repository": {
3838
"type": "git",
3939
"url": "git://github.com/themasch/node-bencode.git"
4040
},
41-
4241
"bugs": {
4342
"url": "https://github.com/themasch/node-bencode/issues"
43+
},
44+
"testling": {
45+
"files": "test/*.test.js",
46+
"browsers": [
47+
"ie/6..latest",
48+
"chrome/22..latest",
49+
"firefox/16..latest",
50+
"safari/latest",
51+
"opera/11.0..latest",
52+
"iphone/6..latest",
53+
"ipad/6..latest",
54+
"android-browser/latest"
55+
]
4456
}
45-
4657
}

test/data.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
module.exports = {
2-
binKeyData: new Buffer("ZDU6ZmlsZXNkMjA6N7VVuuCjmp5LoM+n15a5iM/XJHdkODpjb21wbGV0ZWkwZTEwOmRvd25sb2FkZWRpMTBlMTA6aW5jb21wbGV0ZWkwZWVlZQ==", 'base64')
3-
, binKeyName: (new Buffer("N++/vVXvv73go5rvv71L77+9z6fXlu+/ve+/ve+/ve+/vSR3", 'base64')).toString()
2+
//binKeyData: new Buffer("ZDU6ZmlsZXNkMjA6N7VVuuCjmp5LoM+n15a5iM/XJHdkODpjb21wbGV0ZWkwZTEwOmRvd25sb2FkZWRpMTBlMTA6aW5jb21wbGV0ZWkwZWVlZQ==", 'base64')
3+
binKeyData: new Buffer('ZDU6ZmlsZXNkMzY6N++/vVXvv73go5rvv71L77+9z6fXlu+/ve+/ve+/ve+/vSR3ZDg6Y29tcGxldGVpMGUxMDpkb3dubG9hZGVkaTEwZTEwOmluY29tcGxldGVpMGVlZWU=', 'base64')
4+
, binKeyName: new Buffer("N++/vVXvv73go5rvv71L77+9z6fXlu+/ve+/ve+/ve+/vSR3", 'base64')
5+
, binStringData: new Buffer('w7bCsXNkZg==', 'base64')
6+
, binResultData: new Buffer('NzrDtsKxc2Rm', 'base64')
47
}

test/decode.buffer.test.js

Lines changed: 78 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,75 +1,85 @@
1-
var assert = require('assert')
1+
var test = require('tape').test
22
var bencode = require('./lib.js')
33
var data = require('./data.js')
44

5-
describe("bencode", function() {
6-
describe("#decode(x)", function() {
7-
it('should be able to decode an integer', function() {
8-
assert.deepEqual(bencode.decode('i123e'), 123);
9-
assert.deepEqual(bencode.decode('i-123e'), -123);
10-
});
11-
it('should be able to decode a float (as int)', function() {
12-
assert.deepEqual(bencode.decode('i12.3e'), 12);
13-
assert.deepEqual(bencode.decode('i-12.3e'), -12);
14-
});
15-
it('should be able to decode a string', function() {
16-
assert.deepEqual(bencode.decode('5:asdfe'), new Buffer('asdfe'));
17-
assert.deepEqual(bencode.decode('4:öö'), new Buffer('öö'));
18-
});
19-
it('should be able to decode "binary keys"', function() {
20-
assert.ok(bencode.decode(data.binKeyData).files.hasOwnProperty(data.binKeyName));
21-
});
5+
test("bencode#decode(x)", function(t) {
226

23-
it('should be able to decode a dictionary', function() {
24-
assert.deepEqual(
25-
bencode.decode( 'd3:cow3:moo4:spam4:eggse' ),
26-
{
27-
cow: new Buffer('moo'),
28-
spam: new Buffer('eggs')
29-
}
30-
)
31-
assert.deepEqual(
32-
bencode.decode( 'd4:spaml1:a1:bee' ),
33-
{ spam: [
34-
new Buffer('a'),
35-
new Buffer('b')
36-
] }
37-
)
38-
assert.deepEqual(
39-
bencode.decode( 'd9:publisher3:bob17:publisher-webpage15:www.example.com18:publisher.location4:homee'),
40-
{
41-
'publisher': new Buffer('bob'),
42-
'publisher-webpage': new Buffer('www.example.com'),
43-
'publisher.location': new Buffer('home')
44-
}
45-
)
46-
});
7+
t.test('should be able to decode an integer', function(t) {
8+
t.plan(2)
9+
t.equal(bencode.decode('i123e'), 123);
10+
t.equal(bencode.decode('i-123e'), -123);
11+
})
4712

48-
it('should be able to decode a list', function() {
49-
assert.deepEqual(
50-
bencode.decode( 'l4:spam4:eggse'),
51-
[ new Buffer('spam'),
52-
new Buffer('eggs') ]
53-
)
54-
});
55-
it('should return the correct type', function() {
56-
assert.ok(bencode.decode('4:öö') instanceof Buffer);
57-
});
58-
it('should be able to decode stuff in dicts (issue #12)', function() {
59-
var someData = {
60-
string: 'Hello World',
61-
integer: 12345,
62-
dict: {
63-
key: 'This is a string within a dictionary'
64-
},
65-
list: [ 1, 2, 3, 4, 'string', 5, {} ]
13+
t.test('should be able to decode a float (as int)', function(t) {
14+
t.plan(2)
15+
t.equal(bencode.decode('i12.3e'), 12);
16+
t.equal(bencode.decode('i-12.3e'), -12);
17+
})
18+
19+
t.test('should be able to decode a string', function(t) {
20+
t.plan(2)
21+
t.deepEqual(bencode.decode('5:asdfe'), new Buffer('asdfe'));
22+
t.deepEqual(bencode.decode(data.binResultData.toString()), data.binStringData);
23+
})
24+
25+
t.test('should be able to decode "binary keys"', function(t) {
26+
t.plan(1)
27+
t.ok(bencode.decode(data.binKeyData).files.hasOwnProperty(data.binKeyName));
28+
})
29+
30+
t.test('should be able to decode a dictionary', function(t) {
31+
t.plan(3)
32+
t.deepEqual(
33+
bencode.decode( 'd3:cow3:moo4:spam4:eggse' ),
34+
{
35+
cow: new Buffer('moo'),
36+
spam: new Buffer('eggs')
6637
}
67-
var result = bencode.encode( someData )
68-
var dat = bencode.decode ( result )
69-
assert.equal(dat.integer, 12345)
70-
assert.deepEqual(dat.string, new Buffer("Hello World"))
71-
assert.deepEqual(dat.dict.key, new Buffer("This is a string within a dictionary"))
72-
assert.deepEqual(dat.list, [1, 2, 3, 4, new Buffer('string'), 5, {}])
73-
});
38+
)
39+
t.deepEqual(
40+
bencode.decode( 'd4:spaml1:a1:bee' ),
41+
{ spam: [
42+
new Buffer('a'),
43+
new Buffer('b')
44+
] }
45+
)
46+
t.deepEqual(
47+
bencode.decode( 'd9:publisher3:bob17:publisher-webpage15:www.example.com18:publisher.location4:homee'),
48+
{
49+
'publisher': new Buffer('bob'),
50+
'publisher-webpage': new Buffer('www.example.com'),
51+
'publisher.location': new Buffer('home')
52+
}
53+
)
7454
});
75-
});
55+
56+
t.test('should be able to decode a list', function(t) {
57+
t.plan(1)
58+
t.deepEqual(
59+
bencode.decode( 'l4:spam4:eggse'),
60+
[ new Buffer('spam'),
61+
new Buffer('eggs') ]
62+
)
63+
})
64+
t.test('should return the correct type', function(t) {
65+
t.plan(1)
66+
t.ok(Buffer.isBuffer(bencode.decode('4:öö')));
67+
})
68+
t.test('should be able to decode stuff in dicts (issue #12)', function(t) {
69+
t.plan(4)
70+
var someData = {
71+
string: 'Hello World',
72+
integer: 12345,
73+
dict: {
74+
key: 'This is a string within a dictionary'
75+
},
76+
list: [ 1, 2, 3, 4, 'string', 5, {} ]
77+
}
78+
var result = bencode.encode( someData )
79+
var dat = bencode.decode ( result )
80+
t.equal(dat.integer, 12345)
81+
t.deepEqual(dat.string, new Buffer("Hello World"))
82+
t.deepEqual(dat.dict.key, new Buffer("This is a string within a dictionary"))
83+
t.deepEqual(dat.list, [1, 2, 3, 4, new Buffer('string'), 5, {}])
84+
})
85+
})

0 commit comments

Comments
 (0)