test_compile.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. var oc = require("oc");
  2. var fs = require("fs");
  3. var path = require("path");
  4. var Test = require("test.js");
  5. function normalizeLineEndings(text){
  6. return text.replace(/\r\n/g, '\n');
  7. }
  8. function compareResults(result, name, dirs){
  9. fs.writeFileSync(dirs.output + "/" + name, result);
  10. var expected = fs.readFileSync(dirs.expected + "/" + name, "utf8");
  11. if (normalizeLineEndings(result) != normalizeLineEndings(expected))
  12. throw new Test.TestError("Failed");
  13. }
  14. function expectOk(src, dirs){
  15. var text = fs.readFileSync(src, "utf8");
  16. var result = oc.compile(text);
  17. var resultName = path.basename(src).replace(".ob", ".js");
  18. compareResults(result, resultName, dirs);
  19. }
  20. function expectError(src, dirs){
  21. var text = fs.readFileSync(src, "utf8");
  22. var errors = "";
  23. try {
  24. oc.compile(text, function(e){errors += e + "\n";});
  25. }
  26. catch (e){
  27. errors += e;
  28. }
  29. if (!errors.length)
  30. throw new Test.TestError("compiler error expected");
  31. var resultName = path.basename(src).replace(".ob", ".txt");
  32. compareResults(errors, resultName, dirs);
  33. }
  34. function makeTest(test, src, dirs){
  35. return function(){test(src, dirs);};
  36. }
  37. function makeTests(test, dirs){
  38. var sources = fs.readdirSync(dirs.input);
  39. var tests = {};
  40. for(var i = 0; i < sources.length; ++i){
  41. var source = sources[i];
  42. var path = dirs.input + "/" + source;
  43. if (fs.statSync(path).isFile())
  44. tests[source] = makeTest(test, path, dirs);
  45. }
  46. return tests;
  47. }
  48. var okDirs = {input: "input", output: "output", expected: "expected"};
  49. var errDirs = {};
  50. for(var p in okDirs)
  51. errDirs[p] = okDirs[p] + "/errors";
  52. if (!fs.existsSync(okDirs.output))
  53. fs.mkdirSync(okDirs.output);
  54. if (!fs.existsSync(errDirs.output))
  55. fs.mkdirSync(errDirs.output);
  56. Test.run({"expect OK": makeTests(expectOk, okDirs),
  57. "expect compile error": makeTests(expectError, errDirs)}
  58. );