123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764 |
- // Generated by CoffeeScript 1.12.4
- var YAML, examplePath, ref, url;
- if (typeof YAML === "undefined" || YAML === null) {
- YAML = require('../../src/Yaml');
- }
- describe('Parsed YAML Collections', function() {
- it('can be simple sequence', function() {
- return expect(YAML.parse("- apple\n- banana\n- carrot")).toEqual(['apple', 'banana', 'carrot']);
- });
- it('can be nested sequences', function() {
- return expect(YAML.parse("-\n - foo\n - bar\n - baz")).toEqual([['foo', 'bar', 'baz']]);
- });
- it('can be mixed sequences', function() {
- return expect(YAML.parse("- apple\n-\n - foo\n - bar\n - x123\n- banana\n- carrot")).toEqual(['apple', ['foo', 'bar', 'x123'], 'banana', 'carrot']);
- });
- it('can be deeply nested sequences', function() {
- return expect(YAML.parse("-\n -\n - uno\n - dos")).toEqual([[['uno', 'dos']]]);
- });
- it('can be simple mapping', function() {
- return expect(YAML.parse("foo: whatever\nbar: stuff")).toEqual({
- foo: 'whatever',
- bar: 'stuff'
- });
- });
- it('can be sequence in a mapping', function() {
- return expect(YAML.parse("foo: whatever\nbar:\n - uno\n - dos")).toEqual({
- foo: 'whatever',
- bar: ['uno', 'dos']
- });
- });
- it('can be nested mappings', function() {
- return expect(YAML.parse("foo: whatever\nbar:\n fruit: apple\n name: steve\n sport: baseball")).toEqual({
- foo: 'whatever',
- bar: {
- fruit: 'apple',
- name: 'steve',
- sport: 'baseball'
- }
- });
- });
- it('can be mixed mapping', function() {
- return expect(YAML.parse("foo: whatever\nbar:\n -\n fruit: apple\n name: steve\n sport: baseball\n - more\n -\n python: rocks\n perl: papers\n ruby: scissorses")).toEqual({
- foo: 'whatever',
- bar: [
- {
- fruit: 'apple',
- name: 'steve',
- sport: 'baseball'
- }, 'more', {
- python: 'rocks',
- perl: 'papers',
- ruby: 'scissorses'
- }
- ]
- });
- });
- it('can have mapping-in-sequence shortcut', function() {
- return expect(YAML.parse("- work on YAML.py:\n - work on Store")).toEqual([
- {
- 'work on YAML.py': ['work on Store']
- }
- ]);
- });
- it('can have unindented sequence-in-mapping shortcut', function() {
- return expect(YAML.parse("allow:\n- 'localhost'\n- '%.sourceforge.net'\n- '%.freepan.org'")).toEqual({
- allow: ['localhost', '%.sourceforge.net', '%.freepan.org']
- });
- });
- it('can merge key', function() {
- return expect(YAML.parse("mapping:\n name: Joe\n job: Accountant\n <<:\n age: 38")).toEqual({
- mapping: {
- name: 'Joe',
- job: 'Accountant',
- age: 38
- }
- });
- });
- return it('can ignore trailing empty lines for smallest indent', function() {
- return expect(YAML.parse(" trailing: empty lines\n")).toEqual({
- trailing: 'empty lines'
- });
- });
- });
- describe('Parsed YAML Inline Collections', function() {
- it('can be simple inline array', function() {
- return expect(YAML.parse("---\nseq: [ a, b, c ]")).toEqual({
- seq: ['a', 'b', 'c']
- });
- });
- it('can be simple inline hash', function() {
- return expect(YAML.parse("---\nhash: { name: Steve, foo: bar }")).toEqual({
- hash: {
- name: 'Steve',
- foo: 'bar'
- }
- });
- });
- it('can be nested inline hash', function() {
- return expect(YAML.parse("---\nhash: { val1: \"string\", val2: { v2k1: \"v2k1v\" } }")).toEqual({
- hash: {
- val1: 'string',
- val2: {
- v2k1: 'v2k1v'
- }
- }
- });
- });
- return it('can be multi-line inline collections', function() {
- return expect(YAML.parse("languages: [ Ruby,\n Perl,\n Python ]\nwebsites: { YAML: yaml.org,\n Ruby: ruby-lang.org,\n Python: python.org,\n Perl: use.perl.org }")).toEqual({
- languages: ['Ruby', 'Perl', 'Python'],
- websites: {
- YAML: 'yaml.org',
- Ruby: 'ruby-lang.org',
- Python: 'python.org',
- Perl: 'use.perl.org'
- }
- });
- });
- });
- describe('Parsed YAML Basic Types', function() {
- it('can be strings', function() {
- return expect(YAML.parse("---\nString")).toEqual('String');
- });
- it('can be double-quoted strings with backslashes', function() {
- return expect(YAML.parse("str:\n \"string with \\\\ inside\"")).toEqual({
- str: 'string with \\ inside'
- });
- });
- it('can be single-quoted strings with backslashes', function() {
- return expect(YAML.parse("str:\n 'string with \\\\ inside'")).toEqual({
- str: 'string with \\\\ inside'
- });
- });
- it('can be double-quoted strings with line breaks', function() {
- return expect(YAML.parse("str:\n \"string with \\n inside\"")).toEqual({
- str: 'string with \n inside'
- });
- });
- it('can be single-quoted strings with escaped line breaks', function() {
- return expect(YAML.parse("str:\n 'string with \\n inside'")).toEqual({
- str: 'string with \\n inside'
- });
- });
- it('can be double-quoted strings with line breaks and backslashes', function() {
- return expect(YAML.parse("str:\n \"string with \\n inside and \\\\ also\"")).toEqual({
- str: 'string with \n inside and \\ also'
- });
- });
- it('can be single-quoted strings with line breaks and backslashes', function() {
- return expect(YAML.parse("str:\n 'string with \\n inside and \\\\ also'")).toEqual({
- str: 'string with \\n inside and \\\\ also'
- });
- });
- it('can have string characters in sequences', function() {
- return expect(YAML.parse("- What's Yaml?\n- It's for writing data structures in plain text.\n- And?\n- And what? That's not good enough for you?\n- No, I mean, \"And what about Yaml?\"\n- Oh, oh yeah. Uh.. Yaml for JavaScript.")).toEqual(["What's Yaml?", "It's for writing data structures in plain text.", "And?", "And what? That's not good enough for you?", "No, I mean, \"And what about Yaml?\"", "Oh, oh yeah. Uh.. Yaml for JavaScript."]);
- });
- it('can have indicators in strings', function() {
- return expect(YAML.parse("the colon followed by space is an indicator: but is a string:right here\nsame for the pound sign: here we have it#in a string\nthe comma can, honestly, be used in most cases: [ but not in, inline collections ]")).toEqual({
- 'the colon followed by space is an indicator': 'but is a string:right here',
- 'same for the pound sign': 'here we have it#in a string',
- 'the comma can, honestly, be used in most cases': ['but not in', 'inline collections']
- });
- });
- it('can force strings', function() {
- return expect(YAML.parse("date string: !str 2001-08-01\nnumber string: !str 192\ndate string 2: !!str 2001-08-01\nnumber string 2: !!str 192")).toEqual({
- 'date string': '2001-08-01',
- 'number string': '192',
- 'date string 2': '2001-08-01',
- 'number string 2': '192'
- });
- });
- it('can be single-quoted strings', function() {
- return expect(YAML.parse("all my favorite symbols: '#:!/%.)'\na few i hate: '&(*'\nwhy do i hate them?: 'it''s very hard to explain'")).toEqual({
- 'all my favorite symbols': '#:!/%.)',
- 'a few i hate': '&(*',
- 'why do i hate them?': 'it\'s very hard to explain'
- });
- });
- it('can be double-quoted strings', function() {
- return expect(YAML.parse("i know where i want my line breaks: \"one here\\nand another here\\n\"")).toEqual({
- 'i know where i want my line breaks': "one here\nand another here\n"
- });
- });
- it('can be null', function() {
- return expect(YAML.parse("name: Mr. Show\nhosted by: Bob and David\ndate of next season: ~")).toEqual({
- 'name': 'Mr. Show',
- 'hosted by': 'Bob and David',
- 'date of next season': null
- });
- });
- it('can be boolean', function() {
- return expect(YAML.parse("Is Gus a Liar?: true\nDo I rely on Gus for Sustenance?: false")).toEqual({
- 'Is Gus a Liar?': true,
- 'Do I rely on Gus for Sustenance?': false
- });
- });
- it('can be integers', function() {
- return expect(YAML.parse("zero: 0\nsimple: 12\none-thousand: 1,000\nnegative one-thousand: -1,000")).toEqual({
- 'zero': 0,
- 'simple': 12,
- 'one-thousand': 1000,
- 'negative one-thousand': -1000
- });
- });
- it('can be integers as map keys', function() {
- return expect(YAML.parse("1: one\n2: two\n3: three")).toEqual({
- 1: 'one',
- 2: 'two',
- 3: 'three'
- });
- });
- it('can be floats', function() {
- return expect(YAML.parse("a simple float: 2.00\nlarger float: 1,000.09\nscientific notation: 1.00009e+3")).toEqual({
- 'a simple float': 2.0,
- 'larger float': 1000.09,
- 'scientific notation': 1000.09
- });
- });
- it('can be time', function() {
- var iso8601Date, spaceSeparatedDate, withDatesToTime;
- iso8601Date = new Date(Date.UTC(2001, 12 - 1, 14, 21, 59, 43, 10));
- iso8601Date.setTime(iso8601Date.getTime() - 5 * 3600 * 1000);
- spaceSeparatedDate = new Date(Date.UTC(2001, 12 - 1, 14, 21, 59, 43, 10));
- spaceSeparatedDate.setTime(spaceSeparatedDate.getTime() + 5 * 3600 * 1000);
- withDatesToTime = function(input) {
- var key, res, val;
- res = {};
- for (key in input) {
- val = input[key];
- res[key] = val.getTime();
- }
- return res;
- };
- return expect(withDatesToTime(YAML.parse("iso8601: 2001-12-14t21:59:43.010+05:00\nspace separated: 2001-12-14 21:59:43.010 -05:00"))).toEqual(withDatesToTime({
- 'iso8601': iso8601Date,
- 'space separated': spaceSeparatedDate
- }));
- });
- return it('can be date', function() {
- var aDate, withDatesToTime;
- aDate = new Date(Date.UTC(1976, 7 - 1, 31, 0, 0, 0, 0));
- withDatesToTime = function(input) {
- var key, res, val;
- return input;
- res = {};
- for (key in input) {
- val = input[key];
- res[key] = val.getTime();
- }
- return res;
- };
- return expect(withDatesToTime(YAML.parse("date: 1976-07-31"))).toEqual(withDatesToTime({
- 'date': aDate
- }));
- });
- });
- describe('Parsed YAML Blocks', function() {
- it('can be single ending newline', function() {
- return expect(YAML.parse("---\nthis: |\n Foo\n Bar")).toEqual({
- 'this': "Foo\nBar\n"
- });
- });
- it('can be single ending newline with \'+\' indicator', function() {
- return expect(YAML.parse("normal: |\n extra new lines not kept\n\npreserving: |+\n extra new lines are kept\n\n\ndummy: value")).toEqual({
- 'normal': "extra new lines not kept\n",
- 'preserving': "extra new lines are kept\n\n\n",
- 'dummy': 'value'
- });
- });
- it('can be multi-line block handling trailing newlines in function of \'+\', \'-\' indicators', function() {
- return expect(YAML.parse("clipped: |\n This has one newline.\n\n\n\nsame as \"clipped\" above: \"This has one newline.\\n\"\n\nstripped: |-\n This has no newline.\n\n\n\nsame as \"stripped\" above: \"This has no newline.\"\n\nkept: |+\n This has four newlines.\n\n\n\nsame as \"kept\" above: \"This has four newlines.\\n\\n\\n\\n\"")).toEqual({
- 'clipped': "This has one newline.\n",
- 'same as "clipped" above': "This has one newline.\n",
- 'stripped': 'This has no newline.',
- 'same as "stripped" above': 'This has no newline.',
- 'kept': "This has four newlines.\n\n\n\n",
- 'same as "kept" above': "This has four newlines.\n\n\n\n"
- });
- });
- it('can be folded block in a sequence', function() {
- return expect(YAML.parse("---\n- apple\n- banana\n- >\n can't you see\n the beauty of yaml?\n hmm\n- dog")).toEqual(['apple', 'banana', "can't you see the beauty of yaml? hmm\n", 'dog']);
- });
- it('can be folded block as a mapping value', function() {
- return expect(YAML.parse("---\nquote: >\n Mark McGwire's\n year was crippled\n by a knee injury.\nsource: espn")).toEqual({
- 'quote': "Mark McGwire's year was crippled by a knee injury.\n",
- 'source': 'espn'
- });
- });
- it('can be folded block handling trailing newlines in function of \'+\', \'-\' indicators', function() {
- return expect(YAML.parse("clipped: >\n This has one newline.\n\n\n\nsame as \"clipped\" above: \"This has one newline.\\n\"\n\nstripped: >-\n This has no newline.\n\n\n\nsame as \"stripped\" above: \"This has no newline.\"\n\nkept: >+\n This has four newlines.\n\n\n\nsame as \"kept\" above: \"This has four newlines.\\n\\n\\n\\n\"")).toEqual({
- 'clipped': "This has one newline.\n",
- 'same as "clipped" above': "This has one newline.\n",
- 'stripped': 'This has no newline.',
- 'same as "stripped" above': 'This has no newline.',
- 'kept': "This has four newlines.\n\n\n\n",
- 'same as "kept" above': "This has four newlines.\n\n\n\n"
- });
- });
- return it('can be the whole document as intented block', function() {
- return expect(YAML.parse("---\n foo: \"bar\"\n baz:\n - \"qux\"\n - \"quxx\"\n corge: null")).toEqual({
- 'foo': "bar",
- 'baz': ['qux', 'quxx'],
- 'corge': null
- });
- });
- });
- describe('Parsed YAML Comments', function() {
- it('can begin the document', function() {
- return expect(YAML.parse("# This is a comment\nhello: world")).toEqual({
- hello: 'world'
- });
- });
- it('can be less indented in mapping', function() {
- return expect(YAML.parse("parts:\n a: 'b'\n # normally indented comment\n c: 'd'\n# less indented comment\n e: 'f'")).toEqual({
- parts: {
- a: 'b',
- c: 'd',
- e: 'f'
- }
- });
- });
- it('can be less indented in sequence', function() {
- return expect(YAML.parse("list-header:\n - item1\n# - item2\n - item3\n # - item4")).toEqual({
- 'list-header': ['item1', 'item3']
- });
- });
- it('can finish a line', function() {
- return expect(YAML.parse("hello: world # This is a comment")).toEqual({
- hello: 'world'
- });
- });
- return it('can end the document', function() {
- return expect(YAML.parse("hello: world\n# This is a comment")).toEqual({
- hello: 'world'
- });
- });
- });
- describe('Parsed YAML Aliases and Anchors', function() {
- it('can be simple alias', function() {
- return expect(YAML.parse("- &showell Steve\n- Clark\n- Brian\n- Oren\n- *showell")).toEqual(['Steve', 'Clark', 'Brian', 'Oren', 'Steve']);
- });
- return it('can be alias of a mapping', function() {
- return expect(YAML.parse("- &hello\n Meat: pork\n Starch: potato\n- banana\n- *hello")).toEqual([
- {
- Meat: 'pork',
- Starch: 'potato'
- }, 'banana', {
- Meat: 'pork',
- Starch: 'potato'
- }
- ]);
- });
- });
- describe('Parsed YAML Documents', function() {
- it('can have YAML header', function() {
- return expect(YAML.parse("--- %YAML:1.0\nfoo: 1\nbar: 2")).toEqual({
- foo: 1,
- bar: 2
- });
- });
- it('can have leading document separator', function() {
- return expect(YAML.parse("---\n- foo: 1\n bar: 2")).toEqual([
- {
- foo: 1,
- bar: 2
- }
- ]);
- });
- return it('can have multiple document separators in block', function() {
- return expect(YAML.parse("foo: |\n ---\n foo: bar\n ---\n yo: baz\nbar: |\n fooness")).toEqual({
- foo: "---\nfoo: bar\n---\nyo: baz\n",
- bar: "fooness\n"
- });
- });
- });
- describe('Dumped YAML Collections', function() {
- it('can be simple sequence', function() {
- return expect(YAML.parse("- apple\n- banana\n- carrot")).toEqual(YAML.parse(YAML.dump(['apple', 'banana', 'carrot'])));
- });
- it('can be nested sequences', function() {
- return expect(YAML.parse("-\n - foo\n - bar\n - baz")).toEqual(YAML.parse(YAML.dump([['foo', 'bar', 'baz']])));
- });
- it('can be mixed sequences', function() {
- return expect(YAML.parse("- apple\n-\n - foo\n - bar\n - x123\n- banana\n- carrot")).toEqual(YAML.parse(YAML.dump(['apple', ['foo', 'bar', 'x123'], 'banana', 'carrot'])));
- });
- it('can be deeply nested sequences', function() {
- return expect(YAML.parse("-\n -\n - uno\n - dos")).toEqual(YAML.parse(YAML.dump([[['uno', 'dos']]])));
- });
- it('can be simple mapping', function() {
- return expect(YAML.parse("foo: whatever\nbar: stuff")).toEqual(YAML.parse(YAML.dump({
- foo: 'whatever',
- bar: 'stuff'
- })));
- });
- it('can be sequence in a mapping', function() {
- return expect(YAML.parse("foo: whatever\nbar:\n - uno\n - dos")).toEqual(YAML.parse(YAML.dump({
- foo: 'whatever',
- bar: ['uno', 'dos']
- })));
- });
- it('can be nested mappings', function() {
- return expect(YAML.parse("foo: whatever\nbar:\n fruit: apple\n name: steve\n sport: baseball")).toEqual(YAML.parse(YAML.dump({
- foo: 'whatever',
- bar: {
- fruit: 'apple',
- name: 'steve',
- sport: 'baseball'
- }
- })));
- });
- it('can be mixed mapping', function() {
- return expect(YAML.parse("foo: whatever\nbar:\n -\n fruit: apple\n name: steve\n sport: baseball\n - more\n -\n python: rocks\n perl: papers\n ruby: scissorses")).toEqual(YAML.parse(YAML.dump({
- foo: 'whatever',
- bar: [
- {
- fruit: 'apple',
- name: 'steve',
- sport: 'baseball'
- }, 'more', {
- python: 'rocks',
- perl: 'papers',
- ruby: 'scissorses'
- }
- ]
- })));
- });
- it('can have mapping-in-sequence shortcut', function() {
- return expect(YAML.parse("- work on YAML.py:\n - work on Store")).toEqual(YAML.parse(YAML.dump([
- {
- 'work on YAML.py': ['work on Store']
- }
- ])));
- });
- it('can have unindented sequence-in-mapping shortcut', function() {
- return expect(YAML.parse("allow:\n- 'localhost'\n- '%.sourceforge.net'\n- '%.freepan.org'")).toEqual(YAML.parse(YAML.dump({
- allow: ['localhost', '%.sourceforge.net', '%.freepan.org']
- })));
- });
- return it('can merge key', function() {
- return expect(YAML.parse("mapping:\n name: Joe\n job: Accountant\n <<:\n age: 38")).toEqual(YAML.parse(YAML.dump({
- mapping: {
- name: 'Joe',
- job: 'Accountant',
- age: 38
- }
- })));
- });
- });
- describe('Dumped YAML Inline Collections', function() {
- it('can be simple inline array', function() {
- return expect(YAML.parse("---\nseq: [ a, b, c ]")).toEqual(YAML.parse(YAML.dump({
- seq: ['a', 'b', 'c']
- })));
- });
- it('can be simple inline hash', function() {
- return expect(YAML.parse("---\nhash: { name: Steve, foo: bar }")).toEqual(YAML.parse(YAML.dump({
- hash: {
- name: 'Steve',
- foo: 'bar'
- }
- })));
- });
- it('can be multi-line inline collections', function() {
- return expect(YAML.parse("languages: [ Ruby,\n Perl,\n Python ]\nwebsites: { YAML: yaml.org,\n Ruby: ruby-lang.org,\n Python: python.org,\n Perl: use.perl.org }")).toEqual(YAML.parse(YAML.dump({
- languages: ['Ruby', 'Perl', 'Python'],
- websites: {
- YAML: 'yaml.org',
- Ruby: 'ruby-lang.org',
- Python: 'python.org',
- Perl: 'use.perl.org'
- }
- })));
- });
- it('can be dumped empty sequences in mappings', function() {
- return expect(YAML.parse(YAML.dump({
- key: []
- }))).toEqual({
- key: []
- });
- });
- return it('can be dumpted empty inline collections', function() {
- return expect(YAML.parse(YAML.dump({
- key: {}
- }))).toEqual({
- key: {}
- });
- });
- });
- describe('Dumped YAML Basic Types', function() {
- it('can be strings', function() {
- return expect(YAML.parse("---\nString")).toEqual(YAML.parse(YAML.dump('String')));
- });
- it('can be double-quoted strings with backslashes', function() {
- return expect(YAML.parse("str:\n \"string with \\\\ inside\"")).toEqual(YAML.parse(YAML.dump({
- str: 'string with \\ inside'
- })));
- });
- it('can be single-quoted strings with backslashes', function() {
- return expect(YAML.parse("str:\n 'string with \\\\ inside'")).toEqual(YAML.parse(YAML.dump({
- str: 'string with \\\\ inside'
- })));
- });
- it('can be double-quoted strings with line breaks', function() {
- return expect(YAML.parse("str:\n \"string with \\n inside\"")).toEqual(YAML.parse(YAML.dump({
- str: 'string with \n inside'
- })));
- });
- it('can be double-quoted strings with line breaks and backslashes', function() {
- return expect(YAML.parse("str:\n \"string with \\n inside and \\\\ also\"")).toEqual(YAML.parse(YAML.dump({
- str: 'string with \n inside and \\ also'
- })));
- });
- it('can be single-quoted strings with line breaks and backslashes', function() {
- return expect(YAML.parse("str:\n 'string with \\n inside and \\\\ also'")).toEqual(YAML.parse(YAML.dump({
- str: 'string with \\n inside and \\\\ also'
- })));
- });
- it('can be single-quoted strings with escaped line breaks', function() {
- return expect(YAML.parse("str:\n 'string with \\n inside'")).toEqual(YAML.parse(YAML.dump({
- str: 'string with \\n inside'
- })));
- });
- it('can have string characters in sequences', function() {
- return expect(YAML.parse("- What's Yaml?\n- It's for writing data structures in plain text.\n- And?\n- And what? That's not good enough for you?\n- No, I mean, \"And what about Yaml?\"\n- Oh, oh yeah. Uh.. Yaml for JavaScript.")).toEqual(YAML.parse(YAML.dump(["What's Yaml?", "It's for writing data structures in plain text.", "And?", "And what? That's not good enough for you?", "No, I mean, \"And what about Yaml?\"", "Oh, oh yeah. Uh.. Yaml for JavaScript."])));
- });
- it('can have indicators in strings', function() {
- return expect(YAML.parse("the colon followed by space is an indicator: but is a string:right here\nsame for the pound sign: here we have it#in a string\nthe comma can, honestly, be used in most cases: [ but not in, inline collections ]")).toEqual(YAML.parse(YAML.dump({
- 'the colon followed by space is an indicator': 'but is a string:right here',
- 'same for the pound sign': 'here we have it#in a string',
- 'the comma can, honestly, be used in most cases': ['but not in', 'inline collections']
- })));
- });
- it('can force strings', function() {
- return expect(YAML.parse("date string: !str 2001-08-01\nnumber string: !str 192\ndate string 2: !!str 2001-08-01\nnumber string 2: !!str 192")).toEqual(YAML.parse(YAML.dump({
- 'date string': '2001-08-01',
- 'number string': '192',
- 'date string 2': '2001-08-01',
- 'number string 2': '192'
- })));
- });
- it('can be single-quoted strings', function() {
- return expect(YAML.parse("all my favorite symbols: '#:!/%.)'\na few i hate: '&(*'\nwhy do i hate them?: 'it''s very hard to explain'")).toEqual(YAML.parse(YAML.dump({
- 'all my favorite symbols': '#:!/%.)',
- 'a few i hate': '&(*',
- 'why do i hate them?': 'it\'s very hard to explain'
- })));
- });
- it('can be double-quoted strings', function() {
- return expect(YAML.parse("i know where i want my line breaks: \"one here\\nand another here\\n\"")).toEqual(YAML.parse(YAML.dump({
- 'i know where i want my line breaks': "one here\nand another here\n"
- })));
- });
- it('can be null', function() {
- return expect(YAML.parse("name: Mr. Show\nhosted by: Bob and David\ndate of next season: ~")).toEqual(YAML.parse(YAML.dump({
- 'name': 'Mr. Show',
- 'hosted by': 'Bob and David',
- 'date of next season': null
- })));
- });
- it('can be boolean', function() {
- return expect(YAML.parse("Is Gus a Liar?: true\nDo I rely on Gus for Sustenance?: false")).toEqual(YAML.parse(YAML.dump({
- 'Is Gus a Liar?': true,
- 'Do I rely on Gus for Sustenance?': false
- })));
- });
- it('can be integers', function() {
- return expect(YAML.parse("zero: 0\nsimple: 12\none-thousand: 1,000\nnegative one-thousand: -1,000")).toEqual(YAML.parse(YAML.dump({
- 'zero': 0,
- 'simple': 12,
- 'one-thousand': 1000,
- 'negative one-thousand': -1000
- })));
- });
- it('can be integers as map keys', function() {
- return expect(YAML.parse("1: one\n2: two\n3: three")).toEqual(YAML.parse(YAML.dump({
- 1: 'one',
- 2: 'two',
- 3: 'three'
- })));
- });
- it('can be floats', function() {
- return expect(YAML.parse("a simple float: 2.00\nlarger float: 1,000.09\nscientific notation: 1.00009e+3")).toEqual(YAML.parse(YAML.dump({
- 'a simple float': 2.0,
- 'larger float': 1000.09,
- 'scientific notation': 1000.09
- })));
- });
- it('can be time', function() {
- var iso8601Date, spaceSeparatedDate, withDatesToTime;
- iso8601Date = new Date(Date.UTC(2001, 12 - 1, 14, 21, 59, 43, 10));
- iso8601Date.setTime(iso8601Date.getTime() + 5 * 3600 * 1000);
- spaceSeparatedDate = new Date(Date.UTC(2001, 12 - 1, 14, 21, 59, 43, 10));
- spaceSeparatedDate.setTime(spaceSeparatedDate.getTime() - 5 * 3600 * 1000);
- withDatesToTime = function(input) {
- var key, res, val;
- res = {};
- for (key in input) {
- val = input[key];
- res[key] = val.getTime();
- }
- return res;
- };
- return expect(withDatesToTime(YAML.parse("iso8601: 2001-12-14t21:59:43.010-05:00\nspace separated: 2001-12-14 21:59:43.010 +05:00"))).toEqual(YAML.parse(YAML.dump(withDatesToTime({
- 'iso8601': iso8601Date,
- 'space separated': spaceSeparatedDate
- }))));
- });
- return it('can be date', function() {
- var aDate, withDatesToTime;
- aDate = new Date(Date.UTC(1976, 7 - 1, 31, 0, 0, 0, 0));
- withDatesToTime = function(input) {
- var key, res, val;
- return input;
- res = {};
- for (key in input) {
- val = input[key];
- res[key] = val.getTime();
- }
- return res;
- };
- return expect(withDatesToTime(YAML.parse("date: 1976-07-31"))).toEqual(YAML.parse(YAML.dump(withDatesToTime({
- 'date': aDate
- }))));
- });
- });
- describe('Dumped YAML Blocks', function() {
- it('can be single ending newline', function() {
- return expect(YAML.parse("---\nthis: |\n Foo\n Bar")).toEqual(YAML.parse(YAML.dump({
- 'this': "Foo\nBar\n"
- })));
- });
- it('can be single ending newline with \'+\' indicator', function() {
- return expect(YAML.parse("normal: |\n extra new lines not kept\n\npreserving: |+\n extra new lines are kept\n\n\ndummy: value")).toEqual(YAML.parse(YAML.dump({
- 'normal': "extra new lines not kept\n",
- 'preserving': "extra new lines are kept\n\n\n",
- 'dummy': 'value'
- })));
- });
- it('can be multi-line block handling trailing newlines in function of \'+\', \'-\' indicators', function() {
- return expect(YAML.parse("clipped: |\n This has one newline.\n\n\n\nsame as \"clipped\" above: \"This has one newline.\\n\"\n\nstripped: |-\n This has no newline.\n\n\n\nsame as \"stripped\" above: \"This has no newline.\"\n\nkept: |+\n This has four newlines.\n\n\n\nsame as \"kept\" above: \"This has four newlines.\\n\\n\\n\\n\"")).toEqual(YAML.parse(YAML.dump({
- 'clipped': "This has one newline.\n",
- 'same as "clipped" above': "This has one newline.\n",
- 'stripped': 'This has no newline.',
- 'same as "stripped" above': 'This has no newline.',
- 'kept': "This has four newlines.\n\n\n\n",
- 'same as "kept" above': "This has four newlines.\n\n\n\n"
- })));
- });
- it('can be folded block in a sequence', function() {
- return expect(YAML.parse("---\n- apple\n- banana\n- >\n can't you see\n the beauty of yaml?\n hmm\n- dog")).toEqual(YAML.parse(YAML.dump(['apple', 'banana', "can't you see the beauty of yaml? hmm\n", 'dog'])));
- });
- it('can be folded block as a mapping value', function() {
- return expect(YAML.parse("---\nquote: >\n Mark McGwire's\n year was crippled\n by a knee injury.\nsource: espn")).toEqual(YAML.parse(YAML.dump({
- 'quote': "Mark McGwire's year was crippled by a knee injury.\n",
- 'source': 'espn'
- })));
- });
- return it('can be folded block handling trailing newlines in function of \'+\', \'-\' indicators', function() {
- return expect(YAML.parse("clipped: >\n This has one newline.\n\n\n\nsame as \"clipped\" above: \"This has one newline.\\n\"\n\nstripped: >-\n This has no newline.\n\n\n\nsame as \"stripped\" above: \"This has no newline.\"\n\nkept: >+\n This has four newlines.\n\n\n\nsame as \"kept\" above: \"This has four newlines.\\n\\n\\n\\n\"")).toEqual(YAML.parse(YAML.dump({
- 'clipped': "This has one newline.\n",
- 'same as "clipped" above': "This has one newline.\n",
- 'stripped': 'This has no newline.',
- 'same as "stripped" above': 'This has no newline.',
- 'kept': "This has four newlines.\n\n\n\n",
- 'same as "kept" above': "This has four newlines.\n\n\n\n"
- })));
- });
- });
- describe('Dumped YAML Comments', function() {
- it('can begin the document', function() {
- return expect(YAML.parse("# This is a comment\nhello: world")).toEqual(YAML.parse(YAML.dump({
- hello: 'world'
- })));
- });
- it('can finish a line', function() {
- return expect(YAML.parse("hello: world # This is a comment")).toEqual(YAML.parse(YAML.dump({
- hello: 'world'
- })));
- });
- return it('can end the document', function() {
- return expect(YAML.parse("hello: world\n# This is a comment")).toEqual(YAML.parse(YAML.dump({
- hello: 'world'
- })));
- });
- });
- describe('Dumped YAML Aliases and Anchors', function() {
- it('can be simple alias', function() {
- return expect(YAML.parse("- &showell Steve\n- Clark\n- Brian\n- Oren\n- *showell")).toEqual(YAML.parse(YAML.dump(['Steve', 'Clark', 'Brian', 'Oren', 'Steve'])));
- });
- return it('can be alias of a mapping', function() {
- return expect(YAML.parse("- &hello\n Meat: pork\n Starch: potato\n- banana\n- *hello")).toEqual(YAML.parse(YAML.dump([
- {
- Meat: 'pork',
- Starch: 'potato'
- }, 'banana', {
- Meat: 'pork',
- Starch: 'potato'
- }
- ])));
- });
- });
- describe('Dumped YAML Documents', function() {
- it('can have YAML header', function() {
- return expect(YAML.parse("--- %YAML:1.0\nfoo: 1\nbar: 2")).toEqual(YAML.parse(YAML.dump({
- foo: 1,
- bar: 2
- })));
- });
- it('can have leading document separator', function() {
- return expect(YAML.parse("---\n- foo: 1\n bar: 2")).toEqual(YAML.parse(YAML.dump([
- {
- foo: 1,
- bar: 2
- }
- ])));
- });
- return it('can have multiple document separators in block', function() {
- return expect(YAML.parse("foo: |\n ---\n foo: bar\n ---\n yo: baz\nbar: |\n fooness")).toEqual(YAML.parse(YAML.dump({
- foo: "---\nfoo: bar\n---\nyo: baz\n",
- bar: "fooness\n"
- })));
- });
- });
- url = typeof document !== "undefined" && document !== null ? (ref = document.location) != null ? ref.href : void 0 : void 0;
- if (!(url != null) || url.indexOf('file://') === -1) {
- examplePath = 'spec/example.yml';
- if (typeof __dirname !== "undefined" && __dirname !== null) {
- examplePath = __dirname + '/example.yml';
- }
- describe('YAML loading', function() {
- it('can be done synchronously', function() {
- return expect(YAML.load(examplePath)).toEqual({
- "this": 'is',
- a: ['YAML', 'example']
- });
- });
- return it('can be done asynchronously', function(done) {
- return YAML.load(examplePath, function(result) {
- expect(result).toEqual({
- "this": 'is',
- a: ['YAML', 'example']
- });
- return done();
- });
- });
- });
- }
|