testing.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. var _ = require("underscore");
  2. var duck = require("duck");
  3. var Token = require("./Token");
  4. var assertIsSuccess = exports.assertIsSuccess = function(test, result, options) {
  5. test.ok(result.isSuccess(), result.errors().map(function(error) {
  6. return error.describe();
  7. }).join("\n\n"));
  8. options = options || {};
  9. if (!options.remaining) {
  10. options.remaining = [new Token("end", null)];
  11. }
  12. assertResultExtras(test, result, options);
  13. };
  14. var assertIsSuccessWithValue = exports.assertIsSuccessWithValue = function(test, result, value, source) {
  15. assertIsSuccess(test, result, {
  16. value: value,
  17. source: source
  18. });
  19. };
  20. var assertIsFailure = exports.assertIsFailure = function(test, result, options) {
  21. test.deepEqual(result.isSuccess(), false);
  22. assertResultExtras(test, result, options);
  23. };
  24. var assertRemaining = exports.assertRemaining = function(test, result, expectedRemaining) {
  25. var actualRemaining = result.remaining().toArray();
  26. assertThat(test, actualRemaining, duck.isArray(expectedRemaining.map(duck.hasProperties)));
  27. };
  28. var assertErrors = exports.assertErrors = function(test, result, expectedErrors) {
  29. test.deepEqual(result.errors(), expectedErrors);
  30. };
  31. var assertIsFailureWithRemaining = exports.assertIsFailureWithRemaining = function(test, result, expectedRemaining) {
  32. assertIsFailure(test, result);
  33. assertRemaining(test, result, expectedRemaining);
  34. };
  35. var assertIsError = exports.assertIsError = function(test, result, options) {
  36. test.ok(result.isError());
  37. assertResultExtras(test, result, options);
  38. };
  39. var assertResultExtras = function(test, result, options) {
  40. options = options || {};
  41. if (options.remaining) {
  42. assertRemaining(test, result, options.remaining);
  43. }
  44. if (options.errors) {
  45. assertErrors(test, result, options.errors);
  46. }
  47. if (options.source) {
  48. test.deepEqual(result.source(), options.source);
  49. }
  50. if (options.value) {
  51. assertThat(test, result.value(), duck.is(options.value));
  52. }
  53. }
  54. var assertThat = function(test, value, matcher) {
  55. var message = "Expected " + matcher.describeSelf() +
  56. "\nbut " + matcher.describeMismatch(value);
  57. test.ok(matcher.matches(value), message);
  58. };