blob: 4dd202b0351a0507f12c774211c733b8dab36bde [file] [log] [blame]
// Esprima integration tests.
//
// These shouldn't test actual JSHint behaviour. Instead they should ensure
// that underlying Esprima parser works as expected.
"use strict";
var linter = require("../../../src/next/jshint.js");
var helpers = require("../lib/helpers.js");
var fixtures = new helpers.Fixtures(__dirname, __filename);
exports.testTree = function (test) {
test.expect(11);
var tree = linter.lint({ code: fixtures.get("simple_file.js") }).tree;
test.equal(tree.type, "Program");
test.equal(tree.body[0].type, "VariableDeclaration");
test.equal(tree.body[0].declarations[0].type, "VariableDeclarator");
test.equal(tree.body[0].declarations[0].id.name, "number");
test.equal(tree.body[1].type, "FunctionDeclaration");
test.equal(tree.body[1].id.name, "add");
test.equal(tree.body[2].type, "ExpressionStatement");
test.equal(tree.body[2].expression.callee.name, "add");
test.equal(tree.comments[0].type, "Block");
test.equal(tree.comments[0].value, " [linter] ");
test.deepEqual(tree.comments[0].range, [ 0, 14 ]);
test.done();
};
exports.testTokens = function (test) {
test.expect(1);
// The tokens.json file is a tree snapshot I got by using Esprima's
// online parser demo with the code from simple_file.js.
// * http://esprima.org/demo/parse.html
var code = fixtures.get("simple_file.js");
var tokens = JSON.parse(fixtures.get("tokens.json"));
test.deepEqual(linter.lint({ code: code }).tree.tokens, tokens);
test.done();
};
exports.testComments = function (test) {
test.expect(8);
var linterObj = new linter.Linter(fixtures.get("comments.js"));
var addIgnore = linterObj.scopes.addIgnore;
var addSwitch = linterObj.scopes.addSwitch;
var ignores = [
[ "main", "W001" ],
[ "(anon)", "E001" ]
];
var switches = [
[ "(global)", "var" ],
[ "main", "strict" ]
];
linterObj.scopes.addIgnore = function (code) {
var exp = ignores.shift();
test.equal(linterObj.scopes.current.name, exp[0]);
test.equal(code, exp[1]);
addIgnore.call(linterObj.scopes, code);
};
linterObj.scopes.addSwitch = function (name) {
var exp = switches.shift();
test.equal(linterObj.scopes.current.name, exp[0]);
test.equal(name, exp[1]);
addSwitch.call(linterObj.scopes, name);
};
linterObj.parse();
linterObj.scopes.addIgnore = addIgnore;
linterObj.scopes.addSwitch = addSwitch;
test.done();
};