yaml.test.js
 1  "use strict";
 2  Object.defineProperty(exports, "__esModule", { value: true });
 3  const serialize_1 = require("../lib/serialize");
 4  // Preferred quote of the YAML library
 5  const q = '"';
 6  test('quote the word "ON"', () => {
 7      // NON NEGOTIABLE! If not quoted, will be interpreted as the boolean TRUE
 8      // eslint-disable-next-line no-console
 9      const output = serialize_1.toYAML({
10          notABoolean: 'ON',
11      });
12      expect(output.trim()).toEqual(`notABoolean: ${q}ON${q}`);
13  });
14  test('quote number-like strings with a leading 0', () => {
15      const output = serialize_1.toYAML({
16          leadingZero: '012345',
17      });
18      expect(output.trim()).toEqual(`leadingZero: ${q}012345${q}`);
19  });
20  test('do not quote octal numbers that arent really octal', () => {
21      // This is a contentious one, and something that might have changed in YAML1.2 vs YAML1.1
22      //
23      // One could make the argument that a sequence of characters that couldn't ever
24      // be an octal value doesn't need to be quoted, and pyyaml parses it correctly.
25      //
26      // However, CloudFormation's parser interprets it as a decimal number (eating the
27      // leading 0) if it's unquoted, so that's the behavior we're testing for.
28      const output = serialize_1.toYAML({
29          leadingZero: '0123456789',
30      });
31      expect(output.trim()).toEqual(`leadingZero: ${q}0123456789${q}`);
32  });
33  test('validate that our YAML correctly emits quoted colons in a list', () => {
34      // Must be quoted otherwise it's not valid YAML.
35      //
36      // 'yaml' fails this.
37      const output = serialize_1.toYAML({
38          colons: ['arn', ':', 'aws'],
39      });
40      expect(output.trim()).toEqual([
41          'colons:',
42          '  - arn',
43          `  - ${q}:${q}`,
44          '  - aws',
45      ].join('\n'));
46  });
47  test('validate emission of very long lines', () => {
48      const template = {
49          Field: ' very long line that starts with a space. very long line that starts with a space. start on a new line',
50      };
51      const output = serialize_1.toYAML(template);
52      const parsed = serialize_1.deserializeStructure(output);
53      expect(template).toEqual(parsed);
54  });
55  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWFtbC50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsieWFtbC50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsZ0RBQWdFO0FBRWhFLHNDQUFzQztBQUN0QyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFFZCxJQUFJLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFO0lBQy9CLHlFQUF5RTtJQUV6RSxzQ0FBc0M7SUFDdEMsTUFBTSxNQUFNLEdBQUcsa0JBQU0sQ0FBQztRQUNwQixXQUFXLEVBQUUsSUFBSTtLQUNsQixDQUFDLENBQUM7SUFFSCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMzRCxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyw0Q0FBNEMsRUFBRSxHQUFHLEVBQUU7SUFDdEQsTUFBTSxNQUFNLEdBQUcsa0JBQU0sQ0FBQztRQUNwQixXQUFXLEVBQUUsUUFBUTtLQUN0QixDQUFDLENBQUM7SUFFSCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMvRCxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyxvREFBb0QsRUFBRSxHQUFHLEVBQUU7SUFDOUQseUZBQXlGO0lBQ3pGLEVBQUU7SUFDRiwrRUFBK0U7SUFDL0UsK0VBQStFO0lBQy9FLEVBQUU7SUFDRixpRkFBaUY7SUFDakYseUVBQXlFO0lBRXpFLE1BQU0sTUFBTSxHQUFHLGtCQUFNLENBQUM7UUFDcEIsV0FBVyxFQUFFLFlBQVk7S0FDMUIsQ0FBQyxDQUFDO0lBRUgsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkUsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsZ0VBQWdFLEVBQUUsR0FBRyxFQUFFO0lBQzFFLGdEQUFnRDtJQUNoRCxFQUFFO0lBQ0YscUJBQXFCO0lBRXJCLE1BQU0sTUFBTSxHQUFHLGtCQUFNLENBQUM7UUFDcEIsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUM7S0FDNUIsQ0FBQyxDQUFDO0lBRUgsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUM1QixTQUFTO1FBQ1QsU0FBUztRQUNULE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNmLFNBQVM7S0FDVixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsRUFBRTtJQUNoRCxNQUFNLFFBQVEsR0FBRztRQUNmLEtBQUssRUFBRSx3R0FBd0c7S0FDaEgsQ0FBQztJQUVGLE1BQU0sTUFBTSxHQUFHLGtCQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFaEMsTUFBTSxNQUFNLEdBQUcsZ0NBQW9CLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFNUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNuQyxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlc2VyaWFsaXplU3RydWN0dXJlLCB0b1lBTUwgfSBmcm9tICcuLi9saWIvc2VyaWFsaXplJztcblxuLy8gUHJlZmVycmVkIHF1b3RlIG9mIHRoZSBZQU1MIGxpYnJhcnlcbmNvbnN0IHEgPSAnXCInO1xuXG50ZXN0KCdxdW90ZSB0aGUgd29yZCBcIk9OXCInLCAoKSA9PiB7XG4gIC8vIE5PTiBORUdPVElBQkxFISBJZiBub3QgcXVvdGVkLCB3aWxsIGJlIGludGVycHJldGVkIGFzIHRoZSBib29sZWFuIFRSVUVcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICBjb25zdCBvdXRwdXQgPSB0b1lBTUwoe1xuICAgIG5vdEFCb29sZWFuOiAnT04nLFxuICB9KTtcblxuICBleHBlY3Qob3V0cHV0LnRyaW0oKSkudG9FcXVhbChgbm90QUJvb2xlYW46ICR7cX1PTiR7cX1gKTtcbn0pO1xuXG50ZXN0KCdxdW90ZSBudW1iZXItbGlrZSBzdHJpbmdzIHdpdGggYSBsZWFkaW5nIDAnLCAoKSA9PiB7XG4gIGNvbnN0IG91dHB1dCA9IHRvWUFNTCh7XG4gICAgbGVhZGluZ1plcm86ICcwMTIzNDUnLFxuICB9KTtcblxuICBleHBlY3Qob3V0cHV0LnRyaW0oKSkudG9FcXVhbChgbGVhZGluZ1plcm86ICR7cX0wMTIzNDUke3F9YCk7XG59KTtcblxudGVzdCgnZG8gbm90IHF1b3RlIG9jdGFsIG51bWJlcnMgdGhhdCBhcmVudCByZWFsbHkgb2N0YWwnLCAoKSA9PiB7XG4gIC8vIFRoaXMgaXMgYSBjb250ZW50aW91cyBvbmUsIGFuZCBzb21ldGhpbmcgdGhhdCBtaWdodCBoYXZlIGNoYW5nZWQgaW4gWUFNTDEuMiB2cyBZQU1MMS4xXG4gIC8vXG4gIC8vIE9uZSBjb3VsZCBtYWtlIHRoZSBhcmd1bWVudCB0aGF0IGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyB0aGF0IGNvdWxkbid0IGV2ZXJcbiAgLy8gYmUgYW4gb2N0YWwgdmFsdWUgZG9lc24ndCBuZWVkIHRvIGJlIHF1b3RlZCwgYW5kIHB5eWFtbCBwYXJzZXMgaXQgY29ycmVjdGx5LlxuICAvL1xuICAvLyBIb3dldmVyLCBDbG91ZEZvcm1hdGlvbidzIHBhcnNlciBpbnRlcnByZXRzIGl0IGFzIGEgZGVjaW1hbCBudW1iZXIgKGVhdGluZyB0aGVcbiAgLy8gbGVhZGluZyAwKSBpZiBpdCdzIHVucXVvdGVkLCBzbyB0aGF0J3MgdGhlIGJlaGF2aW9yIHdlJ3JlIHRlc3RpbmcgZm9yLlxuXG4gIGNvbnN0IG91dHB1dCA9IHRvWUFNTCh7XG4gICAgbGVhZGluZ1plcm86ICcwMTIzNDU2Nzg5JyxcbiAgfSk7XG5cbiAgZXhwZWN0KG91dHB1dC50cmltKCkpLnRvRXF1YWwoYGxlYWRpbmdaZXJvOiAke3F9MDEyMzQ1Njc4OSR7cX1gKTtcbn0pO1xuXG50ZXN0KCd2YWxpZGF0ZSB0aGF0IG91ciBZQU1MIGNvcnJlY3RseSBlbWl0cyBxdW90ZWQgY29sb25zIGluIGEgbGlzdCcsICgpID0+IHtcbiAgLy8gTXVzdCBiZSBxdW90ZWQgb3RoZXJ3aXNlIGl0J3Mgbm90IHZhbGlkIFlBTUwuXG4gIC8vXG4gIC8vICd5YW1sJyBmYWlscyB0aGlzLlxuXG4gIGNvbnN0IG91dHB1dCA9IHRvWUFNTCh7XG4gICAgY29sb25zOiBbJ2FybicsICc6JywgJ2F3cyddLFxuICB9KTtcblxuICBleHBlY3Qob3V0cHV0LnRyaW0oKSkudG9FcXVhbChbXG4gICAgJ2NvbG9uczonLFxuICAgICcgIC0gYXJuJyxcbiAgICBgICAtICR7cX06JHtxfWAsXG4gICAgJyAgLSBhd3MnLFxuICBdLmpvaW4oJ1xcbicpKTtcbn0pO1xuXG50ZXN0KCd2YWxpZGF0ZSBlbWlzc2lvbiBvZiB2ZXJ5IGxvbmcgbGluZXMnLCAoKSA9PiB7XG4gIGNvbnN0IHRlbXBsYXRlID0ge1xuICAgIEZpZWxkOiAnIHZlcnkgbG9uZyBsaW5lIHRoYXQgc3RhcnRzIHdpdGggYSBzcGFjZS4gdmVyeSBsb25nIGxpbmUgdGhhdCBzdGFydHMgd2l0aCBhIHNwYWNlLiBzdGFydCBvbiBhIG5ldyBsaW5lJyxcbiAgfTtcblxuICBjb25zdCBvdXRwdXQgPSB0b1lBTUwodGVtcGxhdGUpO1xuXG4gIGNvbnN0IHBhcnNlZCA9IGRlc2VyaWFsaXplU3RydWN0dXJlKG91dHB1dCk7XG5cbiAgZXhwZWN0KHRlbXBsYXRlKS50b0VxdWFsKHBhcnNlZCk7XG59KTtcbiJdfQ==