functional-structure.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. 'use strict';
  2. var Assert = require('assert');
  3. var Fs = require('fs');
  4. var JsYaml = require('../../lib/js-yaml');
  5. var Loader = require('../../lib/js-yaml/loader');
  6. var Events = require('../../lib/js-yaml/events');
  7. var Helper = require('../helper');
  8. function convertStructure(loader) {
  9. var event, sequence, mapping, key, value;
  10. if (loader.checkEvent(Events.ScalarEvent)) {
  11. event = loader.getEvent();
  12. return (!!event.tag || !!event.anchor || !!event.value);
  13. } else if (loader.checkEvent(Events.SequenceStartEvent)) {
  14. sequence = [];
  15. loader.getEvent();
  16. while (!loader.checkEvent(Events.SequenceEndEvent)) {
  17. sequence.push(convertStructure(loader));
  18. }
  19. loader.getEvent();
  20. return sequence;
  21. } else if (loader.checkEvent(Events.MappingStartEvent)) {
  22. mapping = [];
  23. loader.getEvent();
  24. while (!loader.checkEvent(Events.MappingEndEvent)) {
  25. key = convertStructure(loader);
  26. value = convertStructure(loader);
  27. mapping.push([key, value]);
  28. }
  29. loader.getEvent();
  30. return mapping;
  31. } else if (loader.checkEvent(Events.AliasEvent)) {
  32. loader.getEvent();
  33. return '*';
  34. } else {
  35. loader.getEvent();
  36. return '?';
  37. }
  38. }
  39. module.exports = {
  40. "Test tokens": Helper.functional({
  41. dirname: __dirname + '/data',
  42. files: ['.data', '.structure'],
  43. test: function (dataFile, structureFile) {
  44. var result = [], expected, loader;
  45. expected = JSON.parse(Fs.readFileSync(structureFile, 'utf8'));
  46. loader = new Loader.SafeLoader(Fs.readFileSync(dataFile, 'utf8'));
  47. while (loader.checkEvent()) {
  48. if (loader.checkEvent(Events.StreamStartEvent, Events.StreamEndEvent,
  49. Events.DocumentStartEvent, Events.DocumentEndEvent)) {
  50. loader.getEvent();
  51. } else {
  52. result.push(convertStructure(loader));
  53. }
  54. }
  55. if (1 === result.length) {
  56. result = result.shift();
  57. }
  58. Assert.deepEqual(result, expected);
  59. }
  60. })
  61. };
  62. ////////////////////////////////////////////////////////////////////////////////
  63. // vim:ts=2:sw=2
  64. ////////////////////////////////////////////////////////////////////////////////