functional-tokens.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. 'use strict';
  2. var Assert = require('assert');
  3. var Fs = require('fs');
  4. var JsYaml = require('../../lib/js-yaml');
  5. var Common = require('../../lib/js-yaml/common');
  6. var Tokens = require('../../lib/js-yaml/tokens');
  7. var Helper = require('../helper');
  8. // Tokens mnemonic:
  9. // directive: %
  10. // document_start: ---
  11. // document_end: ...
  12. // alias: *
  13. // anchor: &
  14. // tag: !
  15. // scalar _
  16. // block_sequence_start: [[
  17. // block_mapping_start: {{
  18. // block_end: ]}
  19. // flow_sequence_start: [
  20. // flow_sequence_end: ]
  21. // flow_mapping_start: {
  22. // flow_mapping_end: }
  23. // entry: ,
  24. // key: ?
  25. // value: :
  26. var REPLACES = new Common.Hash();
  27. REPLACES.store(Tokens.DirectiveToken, '%');
  28. REPLACES.store(Tokens.DocumentStartToken, '---');
  29. REPLACES.store(Tokens.DocumentEndToken, '...');
  30. REPLACES.store(Tokens.AliasToken, '*');
  31. REPLACES.store(Tokens.AnchorToken, '&');
  32. REPLACES.store(Tokens.TagToken, '!');
  33. REPLACES.store(Tokens.ScalarToken, '_');
  34. REPLACES.store(Tokens.BlockSequenceStartToken, '[[');
  35. REPLACES.store(Tokens.BlockMappingStartToken, '{{');
  36. REPLACES.store(Tokens.BlockEndToken, ']}');
  37. REPLACES.store(Tokens.FlowSequenceStartToken, '[');
  38. REPLACES.store(Tokens.FlowSequenceEndToken, ']');
  39. REPLACES.store(Tokens.FlowMappingStartToken, '{');
  40. REPLACES.store(Tokens.FlowMappingEndToken, '}');
  41. REPLACES.store(Tokens.BlockEntryToken, ',');
  42. REPLACES.store(Tokens.FlowEntryToken, ',');
  43. REPLACES.store(Tokens.KeyToken, '?');
  44. REPLACES.store(Tokens.ValueToken, ':');
  45. module.exports = {
  46. "Test tokens": Helper.functional({
  47. dirname: __dirname + '/data',
  48. files: ['.data', '.tokens'],
  49. test: function (dataFile, tokensFile) {
  50. var result = [], expected = [];
  51. Fs.readFileSync(tokensFile, 'utf8').split(/[ \n]/).forEach(function (t) {
  52. if (!!t) { expected.push(t); }
  53. });
  54. JsYaml.scan(Fs.readFileSync(dataFile, 'utf8'), function (token) {
  55. if (Common.isInstanceOf(token, Tokens.StreamStartToken)
  56. || Common.isInstanceOf(token, Tokens.StreamEndToken)) {
  57. return;
  58. }
  59. result.push(REPLACES.get(token.constructor));
  60. });
  61. Assert.equal(result.length, expected.length);
  62. result.forEach(function (token, i) {
  63. Assert.equal(expected[i], token);
  64. });
  65. }
  66. })
  67. };
  68. ////////////////////////////////////////////////////////////////////////////////
  69. // vim:ts=2:sw=2
  70. ////////////////////////////////////////////////////////////////////////////////