-
Notifications
You must be signed in to change notification settings - Fork 1
/
markov.js
54 lines (46 loc) · 1.85 KB
/
markov.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
var assert = require('assert')
var execSync = require('child_process').execSync
var fs = require('fs')
var tmp = require('tmp')
var bracery = require('../index')
function removeColorCodes (text) {
return text.replace(/\x1B\[[0-9][0-9]m/g, "")
}
function joinLines (rows) {
return rows.map (function (row) {
return row + '\n'
}).join('')
}
var binPath = 'bin/bracery'
describe('Markov chain tests (' + binPath + ')', function() {
var synAckTemplate = ['@client>Syn # # syn', 'SYN', '',
'@server>Ack/Syn # syn # syn_ack', 'ACK / SYN', '',
'@client>Ack # syn_ack # ack', 'ACK', '']
var synAckOutput = ['[Syn] client: SYN', '[Ack/Syn] server: ACK / SYN', '[Ack] client: ACK']
expectMarkov (synAckTemplate, synAckOutput)
var synAckCmdTemplate = ['## AUTHOR @client',
'## TAGS syn',
'>Syn', 'SYN', '',
'## PREV syn',
'## RESET TAGS',
'@server>Ack/Syn # # syn_ack', 'ACK / SYN', '',
'## RESET',
'@client>Ack # syn_ack # ack', 'ACK', '']
expectMarkov (synAckCmdTemplate, synAckOutput)//.concat(synAckCmdTemplate))
})
function runCommand (args) {
var cmdline = process.argv[0] + ' ' + __dirname + '/../' + binPath + ' ' + args
var text = execSync(cmdline,{stdio:['pipe','pipe',process.env.TRAVIS ? 'pipe' : 'ignore']}).toString()
text = text.substr (0, text.length - 1) // chop off newline
return text
}
function expectMarkov (templateDefRows, outputRows) {
it('should generate "' + outputRows.join('\\n') + '" from "' + templateDefRows.join('\\n') + '"',
function (done) {
var tmpFilename = tmp.tmpNameSync()
fs.writeFileSync (tmpFilename, joinLines(templateDefRows))
var text = runCommand ("-m " + tmpFilename)
assert.equal (removeColorCodes(text), joinLines(outputRows))
done()
})
}