Skip to content

Commit

Permalink
Adds a test case for #29
Browse files Browse the repository at this point in the history
  • Loading branch information
alexgorbatchev committed Nov 28, 2014
1 parent 1011f78 commit 6932853
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 18 deletions.
8 changes: 7 additions & 1 deletion test/crc16.spec.coffee
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
require './test_helpers'
crc = require '../src/crc16'

describe 'CRC16', ->
crcSuiteFor crc: require '../src/crc16'
crcSuiteFor {crc}

# https://github.com/alexgorbatchev/node-crc/issues/29
crcSuiteFor
crc: crc
value: new Buffer('AR0AAAGP2KJc/vg/AAAAErgGAK8dAAgLAQAAPpo=', 'base64').slice(0, 27)
2 changes: 1 addition & 1 deletion test/mocha.opts
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
--recursive
--reporter spec
--ui bdd
--timeout 1000
--timeout 5000
65 changes: 49 additions & 16 deletions test/test_helpers.coffee
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
require 'coffee-errors'

path = require 'path'
fs = require 'fs'
chai = require 'chai'
{exec} = require 'child_process'

Expand All @@ -17,40 +18,72 @@ VALUES = [
]

GLOBAL.crcSuiteFor = ({crc, value, expected, initial}) ->
getReferenceValue = (model, value, initial, callback) ->
getReferenceValueForBuffer = (model, buffer, initial, callback) ->
return callback null, expected if expected?
filename = "#{__dirname}/tmp"
fs.writeFileSync filename, buffer
initial = initial? and "--xor-in=0x#{initial.toString(16)}" or ''
exec "#{__dirname}/pycrc/pycrc.py --model=#{model} #{initial} --check-string=\"#{value}\"", (err, reference) ->
exec "#{__dirname}/pycrc/pycrc.py --model=#{model} #{initial} --check-file=\"#{filename}\"", (err, reference) ->
fs.unlinkSync filename
callback err, reference?.replace /^0x|\n$/g, ''

testValue = (value, initial, callback) ->
getReferenceValue crc.model, value, initial, (err, reference) ->
getReferenceValueForString = (model, string, initial, callback) ->
return callback null, expected if expected?
initial = initial? and "--xor-in=0x#{initial.toString(16)}" or ''
exec "#{__dirname}/pycrc/pycrc.py --model=#{model} #{initial} --check-string=\"#{string}\"", (err, reference) ->
callback err, reference?.replace /^0x|\n$/g, ''

testStringValue = (string, initial, callback) ->
getReferenceValueForString crc.model, string, initial, (err, reference) ->
return done err if err?
crc(value, initial).toString(16).should.equal reference
crc(string, initial).toString(16).should.equal reference
callback()

testSplitValue = (value, initial, callback) ->
testBufferValue = (buffer, initial, callback) ->
getReferenceValueForBuffer crc.model, buffer, initial, (err, reference) ->
return done err if err?
crc(buffer, initial).toString(16).should.equal reference
callback()

testStringSplitValue = (value, initial, callback) ->
middle = value.length / 2
chunk1 = value.substr 0, middle
chunk2 = value.substr middle
v1 = crc chunk1, initial
v2 = crc chunk2, v1

getReferenceValueForString crc.model, value, initial, (err, reference) ->
return callback err if err?
v2.toString(16).should.equal reference
callback()

testBufferSplitValue = (value, initial, callback) ->
middle = value.length / 2
chunk1 = value.slice 0, middle
chunk2 = value.slice middle

v1 = crc chunk1, initial
v2 = crc chunk2, v1

getReferenceValue crc.model, value, initial, (err, reference) ->
return done err if err?
getReferenceValueForBuffer crc.model, value, initial, (err, reference) ->
return callback err if err?
v2.toString(16).should.equal reference
callback()

if value? and expected?
describe "STRING: #{value}", ->
it 'should calculate a full checksum', (done) -> testValue value, initial, done
it 'should calculate a checksum for multiple data', (done) -> testSplitValue value, initial, done
if value?
if Buffer.isBuffer value
describe "BUFFER: #{value.toString 'base64'}", ->
it 'should calculate a full checksum', (done) -> testBufferValue value, initial, done
it 'should calculate a checksum for multiple data', (done) -> testBufferSplitValue value, initial, done
else
describe "STRING: #{value}", ->
it 'should calculate a full checksum', (done) -> testStringValue value, initial, done
it 'should calculate a checksum for multiple data', (done) -> testStringSplitValue value, initial, done

else
VALUES.map (value) ->
describe "STRING: #{value}", ->
it 'should calculate a full checksum', (done) -> testValue value, initial, done
it 'should calculate a full checksum with initial 0x0', (done) -> testValue value, 0, done
it 'should calculate a checksum for multiple data', (done) -> testSplitValue value, initial, done
it 'should calculate a checksum for multiple data with initial 0x0', (done) -> testSplitValue value, 0, done
it 'should calculate a full checksum', (done) -> testStringValue value, initial, done
it 'should calculate a full checksum with initial 0x0', (done) -> testStringValue value, 0, done
it 'should calculate a checksum for multiple data', (done) -> testStringSplitValue value, initial, done
it 'should calculate a checksum for multiple data with initial 0x0', (done) -> testStringSplitValue value, 0, done

0 comments on commit 6932853

Please sign in to comment.