
// NOTES:
//  - the errors actually still need to be reviewed to check that they
//    are fully correct interpretations of the IDLs

var wp = process.env.JSCOV ? require("../lib-cov/webidl2") : require("../lib/webidl2")
,   expect = require("expect.js")
,   pth = require("path")
,   fs = require("fs")
;
describe("Parses all of the invalid IDLs to check that they blow up correctly", function () {
    var dir = pth.join(__dirname, "invalid/idl")
    ,   skip = {}
    ,   idls = fs.readdirSync(dir)
                  .filter(function (it) { return (/\.w?idl$/).test(it) && !skip[it]; })
                  .map(function (it) { return pth.join(dir, it); })
    ,   errors = idls.map(function (it) { return pth.join(__dirname, "invalid", "json", pth.basename(it).replace(/\.w?idl/, ".json")); })
    ;
    
    for (var i = 0, n = idls.length; i < n; i++) {
        var idl = idls[i], error = JSON.parse(fs.readFileSync(errors[i], "utf8"));
        var func = (function (idl, err) {
            return function () {
                var error;
                try {
                    var ast = wp.parse(fs.readFileSync(idl, "utf8"));
                    console.log(JSON.stringify(ast, null, 4));
                }
                catch (e) {
                    error = e;
                }
                finally {
                    expect(error).to.be.ok();
                    expect(error.message).to.equal(err.message);
                    expect(error.line).to.equal(err.line);
                }
                
            };
        }(idl, error));
        it("should produce the right error for " + idl, func);
    }
});
