forked from less/less.js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
less-test.js
73 lines (64 loc) · 2.07 KB
/
less-test.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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
var path = require('path'),
fs = require('fs'),
sys = require('sys');
var less = require('../lib/less');
less.tree.functions.add = function (a, b) {
return new(less.tree.Dimension)(a.value + b.value);
}
less.tree.functions.increment = function (a) {
return new(less.tree.Dimension)(a.value + 1);
}
less.tree.functions.color = function (str) {
if (str.value === "evil red") { return new(less.tree.Color)("600") }
}
sys.puts("\n" + stylize("LESS", 'underline') + "\n");
fs.readdirSync(__dirname + '/less').forEach(function (file) {
if (! /\.less/.test(file)) { return }
toCSS(__dirname + '/less/' + file, function (err, less) {
var name = path.basename(file, '.less');
fs.readFile(path.join(__dirname + '/css', name) + '.css', 'utf-8', function (e, css) {
sys.print("- " + name + ": ")
if (less === css) { sys.print(stylize('OK', 'green')) }
else if (err) {
sys.print(stylize("ERROR: " + (err && err.message), 'red'));
} else {
sys.print(stylize("FAIL", 'yellow'));
}
sys.puts("");
});
});
});
function toCSS(path, callback) {
var tree, css;
fs.readFile(path, 'utf-8', function (e, str) {
if (e) { return callback(e) }
new(less.Parser)({
paths: [require('path').dirname(path)],
optimization: 0
}).parse(str, function (err, tree) {
if (err) {
callback(err);
} else {
try {
css = tree.toCSS();
callback(null, css);
} catch (e) {
callback(e);
}
}
});
});
}
// Stylize a string
function stylize(str, style) {
var styles = {
'bold' : [1, 22],
'inverse' : [7, 27],
'underline' : [4, 24],
'yellow' : [33, 39],
'green' : [32, 39],
'red' : [31, 39]
};
return '\033[' + styles[style][0] + 'm' + str +
'\033[' + styles[style][1] + 'm';
}