source: Dev/trunk/src/client/util/less/test/less-test.js @ 483

Last change on this file since 483 was 483, checked in by hendrikvanantwerpen, 11 years ago

Added Dojo 1.9.3 release.

File size: 5.6 KB
Line 
1var path = require('path'),
2    fs = require('fs'),
3    sys = require('util');
4
5var less = require('../lib/less');
6var stylize = require('../lib/less/lessc_helper').stylize;
7
8var oneTestOnly = process.argv[2];
9
10var totalTests = 0,
11    failedTests = 0,
12    passedTests = 0;
13
14less.tree.functions.add = function (a, b) {
15    return new(less.tree.Dimension)(a.value + b.value);
16};
17less.tree.functions.increment = function (a) {
18    return new(less.tree.Dimension)(a.value + 1);
19};
20less.tree.functions._color = function (str) {
21    if (str.value === "evil red") { return new(less.tree.Color)("600") }
22};
23
24sys.puts("\n" + stylize("LESS", 'underline') + "\n");
25
26runTestSet({relativeUrls: true});
27
28runTestSet(null, "errors/", function(name, err, compiledLess, doReplacements) {
29    fs.readFile(path.join('test/less/', name) + '.txt', 'utf8', function (e, expectedErr) {
30        sys.print("- " + name + ": ");
31        expectedErr = doReplacements(expectedErr, 'test/less/errors/');
32        if (!err) {
33            if (compiledLess) {
34                fail("No Error", 'red');
35            } else {
36                fail("No Error, No Output");
37            }
38        } else {
39            var errMessage = less.formatError(err);
40            if (errMessage === expectedErr) {
41                ok('OK');                   
42            } else {
43                difference("FAIL", expectedErr, errMessage);
44            }
45        }
46        sys.puts("");
47    });}, null, function(input, directory) {
48        return input.replace(
49            "{path}", path.join(process.cwd(), "/test/less/errors/"))
50            .replace("{pathrel}", path.join("test", "less", "errors/"))
51            .replace(/\r\n/g, '\n');
52    });
53
54runTestSet({dumpLineNumbers: 'comments'}, "debug/", null,
55           function(name) { return name + '-comments'; });
56runTestSet({dumpLineNumbers: 'mediaquery'}, "debug/", null,
57           function(name) { return name + '-mediaquery'; });
58runTestSet({dumpLineNumbers: 'all'}, "debug/", null,
59           function(name) { return name + '-all'; });
60runTestSet({relativeUrls: false, rootpath: "folder (1)/"}, "static-urls/");
61
62function globalReplacements(input, directory) {
63    var p = path.join(process.cwd(), directory),
64        pathimport = path.join(process.cwd(), directory + "import/"),
65        pathesc = p.replace(/[.:\/]/g, '\\$&'),
66        pathimportesc = pathimport.replace(/[.:\/]/g, '\\$&');
67
68    return input.replace(/\{path\}/g, p)
69            .replace(/\{pathesc\}/g, pathesc)
70            .replace(/\{pathimport\}/g, pathimport)
71            .replace(/\{pathimportesc\}/g, pathimportesc)
72            .replace(/\r\n/g, '\n');
73}
74
75function runTestSet(options, foldername, verifyFunction, nameModifier, doReplacements) {
76    foldername = foldername || "";
77
78    if(!doReplacements)
79        doReplacements = globalReplacements;
80
81    fs.readdirSync(path.join('test/less/', foldername)).forEach(function (file) {
82        if (! /\.less/.test(file)) { return }
83       
84        var name = foldername + path.basename(file, '.less');
85       
86        if (oneTestOnly && name !== oneTestOnly) { return; }
87       
88        totalTests++;
89
90        toCSS(options, path.join('test/less/', foldername + file), function (err, less) {
91
92            if (verifyFunction) {
93                return verifyFunction(name, err, less, doReplacements);
94            }
95            var css_name = name;
96            if(nameModifier) css_name=nameModifier(name);
97            fs.readFile(path.join('test/css', css_name) + '.css', 'utf8', function (e, css) {
98                sys.print("- " + css_name + ": ")
99               
100                css = css && doReplacements(css, 'test/less/' + foldername);
101                if (less === css) { ok('OK'); }
102                else if (err) {
103                    fail("ERROR: " + (err && err.message));
104                } else {
105                    difference("FAIL", css, less);
106                }
107                sys.puts("");
108            });
109        });
110    });
111}
112
113function diff(left, right) {
114    sys.puts("");
115    require('diff').diffLines(left, right).forEach(function(item) {
116      if(item.added || item.removed) {
117        sys.print(stylize(item.value, item.added ? 'green' : 'red'));
118      } else {
119        sys.print(item.value);
120      }
121    });
122}
123
124function fail(msg) {
125    sys.print(stylize(msg, 'red'));
126    failedTests++;
127    endTest();
128}
129
130function difference(msg, left, right) {
131    sys.print(stylize(msg, 'yellow'));
132    failedTests++;
133               
134    diff(left, right);
135    endTest();
136}
137
138function ok(msg) {
139    sys.print(stylize(msg, 'green'));
140    passedTests++;
141    endTest();
142}
143
144function endTest() {
145    if (failedTests + passedTests === totalTests) {
146        sys.puts("");
147        sys.puts("");
148        if (failedTests > 0) {
149            sys.print(failedTests);
150            sys.print(stylize(" Failed", "red"));
151            sys.print(", " + passedTests + " passed");
152        } else {
153            sys.print(stylize("All Passed ", "green"));
154            sys.print(passedTests + " run");
155        }
156    }
157}
158
159function toCSS(options, path, callback) {
160    var tree, css;
161    options = options || {};
162    fs.readFile(path, 'utf8', function (e, str) {
163        if (e) { return callback(e) }
164       
165        options.paths = [require('path').dirname(path)];
166        options.filename = require('path').resolve(process.cwd(), path);
167        options.optimization = options.optimization || 0;
168
169        new(less.Parser)(options).parse(str, function (err, tree) {
170            if (err) {
171                callback(err);
172            } else {
173                try {
174                    css = tree.toCSS();
175                    callback(null, css);
176                } catch (e) {
177                    callback(e);
178                }
179            }
180        });
181    });
182}
Note: See TracBrowser for help on using the repository browser.