|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- var fs = require("fs"),
- path = require("path"),
- assert = require("assert"),
- util = require("util"),
- Parser = require("htmlparser2").Parser,
- Handler = require("../");
-
- var basePath = path.resolve(__dirname, "cases"),
- inspectOpts = { showHidden: true, depth: null };
-
- fs
- .readdirSync(basePath)
- .filter(RegExp.prototype.test, /\.json$/) //only allow .json files
- .map(function(name){
- return path.resolve(basePath, name);
- })
- .map(require)
- .forEach(function(test){
- it(test.name, function(){
- var expected = test.expected;
-
- var handler = new Handler(function(err, actual){
- assert.ifError(err);
- try {
- compare(expected, actual);
- } catch(e){
- e.expected = util.inspect(expected, inspectOpts);
- e.actual = util.inspect(actual, inspectOpts);
- throw e;
- }
- }, test.options);
-
- var data = test.html;
-
- var parser = new Parser(handler, test.options);
-
- //first, try to run the test via chunks
- if (test.streaming || test.streaming === undefined){
- for(var i = 0; i < data.length; i++){
- parser.write(data.charAt(i));
- }
- parser.done();
- }
-
- //then parse everything
- parser.parseComplete(data);
- });
- });
-
- function compare(expected, result){
- assert.equal(typeof expected, typeof result, "types didn't match");
- if(typeof expected !== "object" || expected === null){
- assert.strictEqual(expected, result, "result doesn't equal expected");
- } else {
- for(var prop in expected){
- assert.ok(prop in result, "result didn't contain property " + prop);
- compare(expected[prop], result[prop]);
- }
- }
- }
|