Cakefile
1.45 KB
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
exec = require('child_process').exec
fs = require 'fs'
sysPath = require 'path'
task 'compile:coffee', ->
	unless fs.existsSync './scripts/js'
		fs.mkdirSync './scripts/js'
	exec 'node ./node_modules/coffee-script/bin/coffee -bco ./scripts/js ./scripts/coffee',
		(error) ->
			if fs.existsSync '-p'
				fs.rmdirSync '-p'
			if error?
				console.log 'Compile failed: ' + error
			return
task 'build', ->
	invoke 'compile:coffee'
# This is in place until we replace the test suite runner with popo
task 'test', ->
	runTestsIn 'scripts/coffee/test', '_prepare.coffee'
runInCoffee = (path, cb) ->
	exec 'node ./node_modules/coffee-script/bin/coffee ' + path, cb
runTestsIn = (shortPath, except) ->
	fullPath = sysPath.resolve shortPath
	fs.readdir fullPath, (err, files) ->
		if err then throw Error err
		for file in files
			return if file is except
			fullFilePath = sysPath.resolve(fullPath, file)
			shortFilePath = shortPath + '/' + file
			if sysPath.extname(file) is '.coffee'
				runAsTest shortFilePath, fullFilePath
			else if fs.statSync(fullFilePath).isDirectory()
				runTestsIn shortFilePath
		return
didBeep = no
runAsTest = (shortPath, fullPath) ->
	runInCoffee fullPath, (error, stdout, stderr) ->
		output = 'Running ' + shortPath + '\n'
		if stderr
			unless didBeep
				`console.log("\007")`
				didBeep = yes
			output += 'Error\n' + stdout + stderr + '\n'
		else if stdout
			output += '\n' + stdout
		console.log output