Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(374)

Unified Diff: utils/tests/pub/yaml_test.dart

Issue 11622011: Restructure YAML package suitable for pub lish (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: add yaml exclude Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « utils/tests/pub/test_pub.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: utils/tests/pub/yaml_test.dart
diff --git a/utils/tests/pub/yaml_test.dart b/utils/tests/pub/yaml_test.dart
deleted file mode 100644
index 50c021450467b7e4ad7fdf4fa298d971ab018380..0000000000000000000000000000000000000000
--- a/utils/tests/pub/yaml_test.dart
+++ /dev/null
@@ -1,1877 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library yaml_test;
-
-import '../../../pkg/unittest/lib/unittest.dart';
-import '../../pub/yaml/yaml.dart';
-import '../../pub/yaml/deep_equals.dart';
-import '../../../tests/utils/test_utils.dart';
-
-/// Constructs a new yaml.YamlMap, optionally from a normal Map.
-Map yamlMap([Map from]) =>
- from == null ? new YamlMap() : new YamlMap.from(from);
-
-/// Asserts that a string containing a single YAML document produces a given
-/// value when loaded.
-expectYamlLoads(expected, String source) {
- var actual = loadYaml(cleanUpLiteral(source));
- Expect.isTrue(deepEquals(expected, actual),
- 'expectYamlLoads(expected: <$expected>, actual: <$actual>)');
-}
-
-/// Asserts that a string containing a stream of YAML documents produces a given
-/// list of values when loaded.
-expectYamlStreamLoads(List expected, String source) {
- var actual = loadYamlStream(cleanUpLiteral(source));
- Expect.isTrue(deepEquals(expected, actual),
- 'expectYamlStreamLoads(expected: <$expected>, actual: <$actual>)');
-}
-
-main() {
- var infinity = double.parse("Infinity");
- var nan = double.parse("NaN");
-
- group('YamlMap', () {
- group('accepts as a key', () {
- _expectKeyWorks(keyFn()) {
- var map = yamlMap();
- map[keyFn()] = 5;
- expect(map.containsKey(keyFn()), isTrue);
- expect(map[keyFn()], 5);
- }
-
- test('null', () => _expectKeyWorks(() => null));
- test('true', () => _expectKeyWorks(() => true));
- test('false', () => _expectKeyWorks(() => false));
- test('a list', () => _expectKeyWorks(() => [1, 2, 3]));
- test('a map', () => _expectKeyWorks(() => {'foo': 'bar'}));
- test('a YAML map', () => _expectKeyWorks(() => yamlMap({'foo': 'bar'})));
- });
-
- test('works as a hash key', () {
- var normalMap = new Map();
- normalMap[yamlMap({'foo': 'bar'})] = 'baz';
- expect(normalMap.containsKey(yamlMap({'foo': 'bar'})), isTrue);
- expect(normalMap[yamlMap({'foo': 'bar'})], 'baz');
- });
-
- test('treats YamlMap keys the same as normal maps', () {
- var map = yamlMap();
- map[{'a': 'b'}] = 5;
- expect(map[yamlMap({'a': 'b'})], 5);
- });
- });
-
- group('has a friendly error message for', () {
- var tabError = predicate((e) =>
- e.toString().contains('tab characters are not allowed as indentation'));
-
- test('using a tab as indentation', () {
- expect(() => loadYaml('foo:\n\tbar'),
- throwsA(tabError));
- });
-
- test('using a tab not as indentation', () {
- expect(() => loadYaml('''
- "foo
- \tbar"
- error'''),
- throwsA(isNot(tabError)));
- });
- });
-
- // The following tests are all taken directly from the YAML spec
- // (http://www.yaml.org/spec/1.2/spec.html). Most of them are code examples
- // that are directly included in the spec, but additional tests are derived
- // from the prose.
-
- // A few examples from the spec are deliberately excluded, because they test
- // features that this implementation doesn't intend to support (character
- // encoding detection and user-defined tags). More tests are commented out,
- // because they're intended to be supported but not yet implemented.
-
- // Chapter 2 is just a preview of various Yaml documents. It's probably not
- // necessary to test its examples, but it would be nice to test everything in
- // the spec.
- group('2.1: Collections', () {
- test('[Example 2.1]', () {
- expectYamlLoads(["Mark McGwire", "Sammy Sosa", "Ken Griffey"],
- """
- - Mark McGwire
- - Sammy Sosa
- - Ken Griffey""");
- });
-
- test('[Example 2.2]', () {
- expectYamlLoads({"hr": 65, "avg": 0.278, "rbi": 147},
- """
- hr: 65 # Home runs
- avg: 0.278 # Batting average
- rbi: 147 # Runs Batted In""");
- });
-
- test('[Example 2.3]', () {
- expectYamlLoads({
- "american": ["Boston Red Sox", "Detroit Tigers", "New York Yankees"],
- "national": ["New York Mets", "Chicago Cubs", "Atlanta Braves"],
- },
- """
- american:
- - Boston Red Sox
- - Detroit Tigers
- - New York Yankees
- national:
- - New York Mets
- - Chicago Cubs
- - Atlanta Braves""");
- });
-
- test('[Example 2.4]', () {
- expectYamlLoads([
- {"name": "Mark McGwire", "hr": 65, "avg": 0.278},
- {"name": "Sammy Sosa", "hr": 63, "avg": 0.288},
- ],
- """
- -
- name: Mark McGwire
- hr: 65
- avg: 0.278
- -
- name: Sammy Sosa
- hr: 63
- avg: 0.288""");
- });
-
- test('[Example 2.5]', () {
- expectYamlLoads([
- ["name", "hr", "avg"],
- ["Mark McGwire", 65, 0.278],
- ["Sammy Sosa", 63, 0.288]
- ],
- """
- - [name , hr, avg ]
- - [Mark McGwire, 65, 0.278]
- - [Sammy Sosa , 63, 0.288]""");
- });
-
- test('[Example 2.6]', () {
- expectYamlLoads({
- "Mark McGwire": {"hr": 65, "avg": 0.278},
- "Sammy Sosa": {"hr": 63, "avg": 0.288}
- },
- """
- Mark McGwire: {hr: 65, avg: 0.278}
- Sammy Sosa: {
- hr: 63,
- avg: 0.288
- }""");
- });
- });
-
- group('2.2: Structures', () {
- test('[Example 2.7]', () {
- expectYamlStreamLoads([
- ["Mark McGwire", "Sammy Sosa", "Ken Griffey"],
- ["Chicago Cubs", "St Louis Cardinals"]
- ],
- """
- # Ranking of 1998 home runs
- ---
- - Mark McGwire
- - Sammy Sosa
- - Ken Griffey
-
- # Team ranking
- ---
- - Chicago Cubs
- - St Louis Cardinals""");
- });
-
- test('[Example 2.8]', () {
- expectYamlStreamLoads([
- {"time": "20:03:20", "player": "Sammy Sosa", "action": "strike (miss)"},
- {"time": "20:03:47", "player": "Sammy Sosa", "action": "grand slam"},
- ],
- """
- ---
- time: 20:03:20
- player: Sammy Sosa
- action: strike (miss)
- ...
- ---
- time: 20:03:47
- player: Sammy Sosa
- action: grand slam
- ...""");
- });
-
- test('[Example 2.9]', () {
- expectYamlLoads({
- "hr": ["Mark McGwire", "Sammy Sosa"],
- "rbi": ["Sammy Sosa", "Ken Griffey"]
- },
- """
- ---
- hr: # 1998 hr ranking
- - Mark McGwire
- - Sammy Sosa
- rbi:
- # 1998 rbi ranking
- - Sammy Sosa
- - Ken Griffey""");
- });
-
- // test('[Example 2.10]', () {
- // expectYamlLoads({
- // "hr": ["Mark McGwire", "Sammy Sosa"],
- // "rbi": ["Sammy Sosa", "Ken Griffey"]
- // },
- // """
- // ---
- // hr:
- // - Mark McGwire
- // # Following node labeled SS
- // - &SS Sammy Sosa
- // rbi:
- // - *SS # Subsequent occurrence
- // - Ken Griffey""");
- // });
-
- test('[Example 2.11]', () {
- var doc = yamlMap();
- doc[["Detroit Tigers", "Chicago cubs"]] = ["2001-07-23"];
- doc[["New York Yankees", "Atlanta Braves"]] =
- ["2001-07-02", "2001-08-12", "2001-08-14"];
- expectYamlLoads(doc,
- """
- ? - Detroit Tigers
- - Chicago cubs
- :
- - 2001-07-23
-
- ? [ New York Yankees,
- Atlanta Braves ]
- : [ 2001-07-02, 2001-08-12,
- 2001-08-14 ]""");
- });
-
- test('[Example 2.12]', () {
- expectYamlLoads([
- {"item": "Super Hoop", "quantity": 1},
- {"item": "Basketball", "quantity": 4},
- {"item": "Big Shoes", "quantity": 1},
- ],
- """
- ---
- # Products purchased
- - item : Super Hoop
- quantity: 1
- - item : Basketball
- quantity: 4
- - item : Big Shoes
- quantity: 1""");
- });
- });
-
- group('2.3: Scalars', () {
- test('[Example 2.13]', () {
- expectYamlLoads(
- cleanUpLiteral(
- """
- \\//||\\/||
- // || ||__"""),
- """
- # ASCII Art
- --- |
- \\//||\\/||
- // || ||__""");
- });
-
- test('[Example 2.14]', () {
- expectYamlLoads("Mark McGwire's year was crippled by a knee injury.",
- """
- --- >
- Mark McGwire's
- year was crippled
- by a knee injury.""");
- });
-
- test('[Example 2.15]', () {
- expectYamlLoads(
- cleanUpLiteral(
- """
- Sammy Sosa completed another fine season with great stats.
-
- 63 Home Runs
- 0.288 Batting Average
-
- What a year!"""),
- """
- >
- Sammy Sosa completed another
- fine season with great stats.
-
- 63 Home Runs
- 0.288 Batting Average
-
- What a year!""");
- });
-
- test('[Example 2.16]', () {
- expectYamlLoads({
- "name": "Mark McGwire",
- "accomplishment": "Mark set a major league home run record in 1998.\n",
- "stats": "65 Home Runs\n0.278 Batting Average"
- },
- """
- name: Mark McGwire
- accomplishment: >
- Mark set a major league
- home run record in 1998.
- stats: |
- 65 Home Runs
- 0.278 Batting Average""");
- });
-
- test('[Example 2.17]', () {
- expectYamlLoads({
- "unicode": "Sosa did fine.\u263A",
- "control": "\b1998\t1999\t2000\n",
- "hex esc": "\r\n is \r\n",
- "single": '"Howdy!" he cried.',
- "quoted": " # Not a 'comment'.",
- "tie-fighter": "|\\-*-/|"
- },
- """
- unicode: "Sosa did fine.\\u263A"
- control: "\\b1998\\t1999\\t2000\\n"
- hex esc: "\\x0d\\x0a is \\r\\n"
-
- single: '"Howdy!" he cried.'
- quoted: ' # Not a ''comment''.'
- tie-fighter: '|\\-*-/|'""");
- });
-
- test('[Example 2.18]', () {
- expectYamlLoads({
- "plain": "This unquoted scalar spans many lines.",
- "quoted": "So does this quoted scalar.\n"
- },
- '''
- plain:
- This unquoted scalar
- spans many lines.
-
- quoted: "So does this
- quoted scalar.\\n"''');
- });
- });
-
- group('2.4: Tags', () {
- test('[Example 2.19]', () {
- expectYamlLoads({
- "canonical": 12345,
- "decimal": 12345,
- "octal": 12,
- "hexadecimal": 12
- },
- """
- canonical: 12345
- decimal: +12345
- octal: 0o14
- hexadecimal: 0xC""");
- });
-
- test('[Example 2.20]', () {
- expectYamlLoads({
- "canonical": 1230.15,
- "exponential": 1230.15,
- "fixed": 1230.15,
- "negative infinity": -infinity,
- "not a number": nan
- },
- """
- canonical: 1.23015e+3
- exponential: 12.3015e+02
- fixed: 1230.15
- negative infinity: -.inf
- not a number: .NaN""");
- });
-
- test('[Example 2.21]', () {
- var doc = yamlMap({
- "booleans": [true, false],
- "string": "012345"
- });
- doc[null] = null;
- expectYamlLoads(doc,
- """
- null:
- booleans: [ true, false ]
- string: '012345'""");
- });
-
- // Examples 2.22 through 2.26 test custom tag URIs, which this
- // implementation currently doesn't plan to support.
- });
-
- group('2.5 Full Length Example', () {
- // Example 2.27 tests custom tag URIs, which this implementation currently
- // doesn't plan to support.
-
- test('[Example 2.28]', () {
- expectYamlStreamLoads([
- {
- "Time": "2001-11-23 15:01:42 -5",
- "User": "ed",
- "Warning": "This is an error message for the log file"
- },
- {
- "Time": "2001-11-23 15:02:31 -5",
- "User": "ed",
- "Warning": "A slightly different error message."
- },
- {
- "DateTime": "2001-11-23 15:03:17 -5",
- "User": "ed",
- "Fatal": 'Unknown variable "bar"',
- "Stack": [
- {
- "file": "TopClass.py",
- "line": 23,
- "code": 'x = MoreObject("345\\n")\n'
- },
- {"file": "MoreClass.py", "line": 58, "code": "foo = bar"}
- ]
- }
- ],
- """
- ---
- Time: 2001-11-23 15:01:42 -5
- User: ed
- Warning:
- This is an error message
- for the log file
- ---
- Time: 2001-11-23 15:02:31 -5
- User: ed
- Warning:
- A slightly different error
- message.
- ---
- DateTime: 2001-11-23 15:03:17 -5
- User: ed
- Fatal:
- Unknown variable "bar"
- Stack:
- - file: TopClass.py
- line: 23
- code: |
- x = MoreObject("345\\n")
- - file: MoreClass.py
- line: 58
- code: |-
- foo = bar""");
- });
- });
-
- // Chapter 3 just talks about the structure of loading and dumping Yaml.
- // Chapter 4 explains conventions used in the spec.
-
- // Chapter 5: Characters
- group('5.1: Character Set', () {
- expectAllowsCharacter(int charCode) {
- var char = new String.fromCharCodes([charCode]);
- expectYamlLoads('The character "$char" is allowed',
- 'The character "$char" is allowed');
- }
-
- expectAllowsQuotedCharacter(int charCode) {
- var char = new String.fromCharCodes([charCode]);
- expectYamlLoads("The character '$char' is allowed",
- '"The character \'$char\' is allowed"');
- }
-
- expectDisallowsCharacter(int charCode) {
- var char = new String.fromCharCodes([charCode]);
- Expect.throws(() => loadYaml('The character "$char" is disallowed'));
- }
-
- test("doesn't include C0 control characters", () {
- expectDisallowsCharacter(0x0);
- expectDisallowsCharacter(0x8);
- expectDisallowsCharacter(0x1F);
- });
-
- test("includes TAB", () => expectAllowsCharacter(0x9));
- test("doesn't include DEL", () => expectDisallowsCharacter(0x7F));
-
- test("doesn't include C1 control characters", () {
- expectDisallowsCharacter(0x80);
- expectDisallowsCharacter(0x8A);
- expectDisallowsCharacter(0x9F);
- });
-
- test("includes NEL", () => expectAllowsCharacter(0x85));
-
- group("within quoted strings", () {
- test("includes DEL", () => expectAllowsQuotedCharacter(0x7F));
- test("includes C1 control characters", () {
- expectAllowsQuotedCharacter(0x80);
- expectAllowsQuotedCharacter(0x8A);
- expectAllowsQuotedCharacter(0x9F);
- });
- });
- });
-
- // Skipping section 5.2 (Character Encodings), since at the moment the module
- // assumes that the client code is providing it with a string of the proper
- // encoding.
-
- group('5.3: Indicator Characters', () {
- test('[Example 5.3]', () {
- expectYamlLoads({
- 'sequence': ['one', 'two'],
- 'mapping': {'sky': 'blue', 'sea': 'green'}
- },
- """
- sequence:
- - one
- - two
- mapping:
- ? sky
- : blue
- sea : green""");
- });
-
- test('[Example 5.4]', () {
- expectYamlLoads({
- 'sequence': ['one', 'two'],
- 'mapping': {'sky': 'blue', 'sea': 'green'}
- },
- """
- sequence: [ one, two, ]
- mapping: { sky: blue, sea: green }""");
- });
-
- test('[Example 5.5]', () => expectYamlLoads(null, "# Comment only."));
-
- // Skipping 5.6 because it uses an undefined tag.
-
- test('[Example 5.7]', () {
- expectYamlLoads({
- 'literal': "some\ntext\n",
- 'folded': "some text\n"
- },
- """
- literal: |
- some
- text
- folded: >
- some
- text
- """);
- });
-
- test('[Example 5.8]', () {
- expectYamlLoads({
- 'single': "text",
- 'double': "text"
- },
- """
- single: 'text'
- double: "text"
- """);
- });
-
- // test('[Example 5.9]', () {
- // expectYamlLoads("text",
- // """
- // %YAML 1.2
- // --- text""");
- // });
-
- test('[Example 5.10]', () {
- Expect.throws(() => loadYaml("commercial-at: @text"));
- Expect.throws(() => loadYaml("commercial-at: `text"));
- });
- });
-
- group('5.4: Line Break Characters', () {
- group('include', () {
- test('\\n', () => expectYamlLoads([1, 2], indentLiteral("- 1\n- 2")));
- test('\\r', () => expectYamlLoads([1, 2], "- 1\r- 2"));
- });
-
- group('do not include', () {
- test('form feed', () => Expect.throws(() => loadYaml("- 1\x0C- 2")));
- test('NEL', () => expectYamlLoads(["1\x85- 2"], "- 1\x85- 2"));
- test('0x2028', () => expectYamlLoads(["1\u2028- 2"], "- 1\u2028- 2"));
- test('0x2029', () => expectYamlLoads(["1\u2029- 2"], "- 1\u2029- 2"));
- });
-
- group('in a scalar context must be normalized', () {
- test("from \\r to \\n", () =>
- expectYamlLoads(["foo\nbar"], indentLiteral('- |\n foo\r bar')));
- test("from \\r\\n to \\n", () =>
- expectYamlLoads(["foo\nbar"], indentLiteral('- |\n foo\r\n bar')));
- });
-
- test('[Example 5.11]', () {
- expectYamlLoads(
- cleanUpLiteral("""
- Line break (no glyph)
- Line break (glyphed)"""),
- """
- |
- Line break (no glyph)
- Line break (glyphed)""");
- });
- });
-
- group('5.5: White Space Characters', () {
- test('[Example 5.12]', () {
- expectYamlLoads({
- "quoted": "Quoted \t",
- "block": 'void main() {\n\tprintf("Hello, world!\\n");\n}\n'
- },
- """
- # Tabs and spaces
- quoted: "Quoted \t"
- block:\t|
- void main() {
- \tprintf("Hello, world!\\n");
- }
- """);
- });
- });
-
- group('5.7: Escaped Characters', () {
- test('[Example 5.13]', () {
- expectYamlLoads(
- "Fun with \x5C "
- "\x22 \x07 \x08 \x1B \x0C "
- "\x0A \x0D \x09 \x0B \x00 "
- "\x20 \xA0 \x85 \u2028 \u2029 "
- "A A A",
- '''
- "Fun with \\\\
- \\" \\a \\b \\e \\f \\
- \\n \\r \\t \\v \\0 \\
- \\ \\_ \\N \\L \\P \\
- \\x41 \\u0041 \\U00000041"''');
- });
-
- test('[Example 5.14]', () {
- Expect.throws(() => loadYaml('Bad escape: "\\c"'));
- Expect.throws(() => loadYaml('Bad escape: "\\xq-"'));
- });
- });
-
- // Chapter 6: Basic Structures
- group('6.1: Indentation Spaces', () {
- test('may not include TAB characters', () {
- Expect.throws(() => loadYaml(cleanUpLiteral(
- """
- -
- \t- foo
- \t- bar""")));
- });
-
- test('must be the same for all sibling nodes', () {
- Expect.throws(() => loadYaml(cleanUpLiteral(
- """
- -
- - foo
- - bar""")));
- });
-
- test('may be different for the children of sibling nodes', () {
- expectYamlLoads([["foo"], ["bar"]],
- """
- -
- - foo
- -
- - bar""");
- });
-
- test('[Example 6.1]', () {
- expectYamlLoads({
- "Not indented": {
- "By one space": "By four\n spaces\n",
- "Flow style": [
- "By two",
- "Also by two",
- "Still by two"
- ]
- }
- },
- """
- # Leading comment line spaces are
- # neither content nor indentation.
-
- Not indented:
- By one space: |
- By four
- spaces
- Flow style: [ # Leading spaces
- By two, # in flow style
- Also by two, # are neither
- \tStill by two # content nor
- ] # indentation.""");
- });
-
- test('[Example 6.2]', () {
- expectYamlLoads({'a': ['b', ['c', 'd']]},
- """
- ? a
- : -\tb
- - -\tc
- - d""");
- });
- });
-
- group('6.2: Separation Spaces', () {
- test('[Example 6.3]', () {
- expectYamlLoads([{'foo': 'bar'}, ['baz', 'baz']],
- """
- - foo:\t bar
- - - baz
- -\tbaz""");
- });
- });
-
- group('6.3: Line Prefixes', () {
- test('[Example 6.4]', () {
- expectYamlLoads({
- "plain": "text lines",
- "quoted": "text lines",
- "block": "text\n \tlines\n"
- },
- """
- plain: text
- lines
- quoted: "text
- \tlines"
- block: |
- text
- \tlines
- """);
- });
- });
-
- group('6.4: Empty Lines', () {
- test('[Example 6.5]', () {
- expectYamlLoads({
- "Folding": "Empty line\nas a line feed",
- "Chomping": "Clipped empty lines\n",
- },
- """
- Folding:
- "Empty line
- \t
- as a line feed"
- Chomping: |
- Clipped empty lines
- """);
- });
- });
-
- group('6.5: Line Folding', () {
- test('[Example 6.6]', () {
- expectYamlLoads("trimmed\n\n\nas space",
- """
- >-
- trimmed
-
-
-
- as
- space
- """);
- });
-
- test('[Example 6.7]', () {
- expectYamlLoads("foo \n\n\t bar\n\nbaz\n",
- """
- >
- foo
-
- \t bar
-
- baz
- """);
- });
-
- test('[Example 6.8]', () {
- expectYamlLoads(" foo\nbar\nbaz ",
- '''
- "
- foo
-
- \t bar
-
- baz
- "''');
- });
- });
-
- group('6.6: Comments', () {
- test('must be separated from other tokens by white space characters', () {
- expectYamlLoads("foo#bar", "foo#bar");
- expectYamlLoads("foo:#bar", "foo:#bar");
- expectYamlLoads("-#bar", "-#bar");
- });
-
- test('[Example 6.9]', () {
- expectYamlLoads({'key': 'value'},
- """
- key: # Comment
- value""");
- });
-
- group('outside of scalar content', () {
- test('may appear on a line of their own', () {
- expectYamlLoads([1, 2],
- """
- - 1
- # Comment
- - 2""");
- });
-
- test('are independent of indentation level', () {
- expectYamlLoads([[1, 2]],
- """
- -
- - 1
- # Comment
- - 2""");
- });
-
- test('include lines containing only white space characters', () {
- expectYamlLoads([1, 2],
- """
- - 1
- \t
- - 2""");
- });
- });
-
- group('within scalar content', () {
- test('may not appear on a line of their own', () {
- expectYamlLoads(["foo\n# not comment\nbar\n"],
- """
- - |
- foo
- # not comment
- bar
- """);
- });
-
- test("don't include lines containing only white space characters", () {
- expectYamlLoads(["foo\n \t \nbar\n"],
- """
- - |
- foo
- \t
- bar
- """);
- });
- });
-
- test('[Example 6.10]', () {
- expectYamlLoads(null,
- """
- # Comment
-
- """);
- });
-
- test('[Example 6.11]', () {
- expectYamlLoads({'key': 'value'},
- """
- key: # Comment
- # lines
- value
- """);
- });
-
- group('ending a block scalar header', () {
- test('may not be followed by additional comment lines', () {
- expectYamlLoads(["# not comment\nfoo\n"],
- """
- - | # comment
- # not comment
- foo
- """);
- });
- });
- });
-
- group('6.7: Separation Lines', () {
- test('may not be used within implicit keys', () {
- Expect.throws(() => loadYaml(cleanUpLiteral(
- """
- [1,
- 2]: 3""")));
- });
-
- test('[Example 6.12]', () {
- var doc = yamlMap();
- doc[{'first': 'Sammy', 'last': 'Sosa'}] = {
- 'hr': 65,
- 'avg': 0.278
- };
- expectYamlLoads(doc,
- """
- { first: Sammy, last: Sosa }:
- # Statistics:
- hr: # Home runs
- 65
- avg: # Average
- 0.278""");
- });
- });
-
- group('6.8: Directives', () {
- // // TODO(nweiz): assert that this produces a warning
- // test('[Example 6.13]', () {
- // expectYamlLoads("foo",
- // '''
- // %FOO bar baz # Should be ignored
- // # with a warning.
- // --- "foo"''');
- // });
-
- // // TODO(nweiz): assert that this produces a warning
- // test('[Example 6.14]', () {
- // expectYamlLoads("foo",
- // '''
- // %YAML 1.3 # Attempt parsing
- // # with a warning
- // ---
- // "foo"''');
- // });
-
- // test('[Example 6.15]', () {
- // Expect.throws(() => loadYaml(cleanUpLiteral(
- // """
- // %YAML 1.2
- // %YAML 1.1
- // foo""")));
- // });
-
- // test('[Example 6.16]', () {
- // expectYamlLoads("foo",
- // '''
- // %TAG !yaml! tag:yaml.org,2002:
- // ---
- // !yaml!str "foo"''');
- // });
-
- // test('[Example 6.17]', () {
- // Expect.throws(() => loadYaml(cleanUpLiteral(
- // """
- // %TAG ! !foo
- // %TAG ! !foo
- // bar""")));
- // });
-
- // Examples 6.18 through 6.22 test custom tag URIs, which this
- // implementation currently doesn't plan to support.
- });
-
- group('6.9: Node Properties', () {
- // test('may be specified in any order', () {
- // expectYamlLoads(["foo", "bar"],
- // """
- // - !!str &a1 foo
- // - &a2 !!str bar""");
- // });
-
- // test('[Example 6.23]', () {
- // expectYamlLoads({
- // "foo": "bar",
- // "baz": "foo"
- // },
- // '''
- // !!str &a1 "foo":
- // !!str bar
- // &a2 baz : *a1''');
- // });
-
- // // Example 6.24 tests custom tag URIs, which this implementation currently
- // // doesn't plan to support.
-
- // test('[Example 6.25]', () {
- // Expect.throws(() => loadYaml("- !<!> foo"));
- // Expect.throws(() => loadYaml("- !<\$:?> foo"));
- // });
-
- // // Examples 6.26 and 6.27 test custom tag URIs, which this implementation
- // // currently doesn't plan to support.
-
- // test('[Example 6.28]', () {
- // expectYamlLoads(["12", 12, "12"],
- // '''
- // # Assuming conventional resolution:
- // - "12"
- // - 12
- // - ! 12''');
- // });
-
- // test('[Example 6.29]', () {
- // expectYamlLoads({
- // "First occurrence": "Value",
- // "Second occurrence": "anchor"
- // },
- // """
- // First occurrence: &anchor Value
- // Second occurrence: *anchor""");
- // });
- });
-
- // Chapter 7: Flow Styles
- group('7.1: Alias Nodes', () {
- // test("must not use an anchor that doesn't previously occur", () {
- // Expect.throws(() => loadYaml(cleanUpLiteral(
- // """
- // - *anchor
- // - &anchor foo"""));
- // });
-
- // test("don't have to exist for a given anchor node", () {
- // expectYamlLoads(["foo"], "- &anchor foo");
- // });
-
- // group('must not specify', () {
- // test('tag properties', () => Expect.throws(() => loadYaml(cleanUpLiteral(
- // """
- // - &anchor foo
- // - !str *anchor""")));
-
- // test('anchor properties', () => Expect.throws(
- // () => loadYaml(cleanUpLiteral(
- // """
- // - &anchor foo
- // - &anchor2 *anchor""")));
-
- // test('content', () => Expect.throws(() => loadYaml(cleanUpLiteral(
- // """
- // - &anchor foo
- // - *anchor bar""")));
- // });
-
- // test('must preserve structural equality', () {
- // var doc = loadYaml(cleanUpLiteral(
- // """
- // anchor: &anchor [a, b, c]
- // alias: *anchor""");
- // var anchorList = doc['anchor'];
- // var aliasList = doc['alias'];
- // Expect.isTrue(anchorList === aliasList);
- // anchorList.add('d');
- // Expect.listEquals(['a', 'b', 'c', 'd'], aliasList);
-
- // doc = loadYaml(cleanUpLiteral(
- // """
- // ? &anchor [a, b, c]
- // : ? *anchor
- // : bar""");
- // anchorList = doc.keys[0];
- // aliasList = doc[['a', 'b', 'c']].keys[0];
- // Expect.isTrue(anchorList === aliasList);
- // anchorList.add('d');
- // Expect.listEquals(['a', 'b', 'c', 'd'], aliasList);
- // });
-
- // test('[Example 7.1]', () {
- // expectYamlLoads({
- // "First occurence": "Foo",
- // "Second occurence": "Foo",
- // "Override anchor": "Bar",
- // "Reuse anchor": "Bar",
- // },
- // """
- // First occurrence: &anchor Foo
- // Second occurrence: *anchor
- // Override anchor: &anchor Bar
- // Reuse anchor: *anchor""");
- // });
- });
-
- group('7.2: Empty Nodes', () {
- // test('[Example 7.2]', () {
- // expectYamlLoads({
- // "foo": "",
- // "": "bar"
- // },
- // """
- // {
- // foo : !!str,
- // !!str : bar,
- // }""");
- // });
-
- test('[Example 7.3]', () {
- var doc = yamlMap({"foo": null});
- doc[null] = "bar";
- expectYamlLoads(doc,
- """
- {
- ? foo :,
- : bar,
- }""");
- });
- });
-
- group('7.3: Flow Scalar Styles', () {
- test('[Example 7.4]', () {
- expectYamlLoads({
- "implicit block key": [{"implicit flow key": "value"}]
- },
- '''
- "implicit block key" : [
- "implicit flow key" : value,
- ]''');
- });
-
- test('[Example 7.5]', () {
- expectYamlLoads(
- "folded to a space,\nto a line feed, or \t \tnon-content",
- '''
- "folded
- to a space,\t
-
- to a line feed, or \t\\
- \\ \tnon-content"''');
- });
-
- test('[Example 7.6]', () {
- expectYamlLoads(" 1st non-empty\n2nd non-empty 3rd non-empty ",
- '''
- " 1st non-empty
-
- 2nd non-empty
- \t3rd non-empty "''');
- });
-
- test('[Example 7.7]', () {
- expectYamlLoads("here's to \"quotes\"", "'here''s to \"quotes\"'");
- });
-
- test('[Example 7.8]', () {
- expectYamlLoads({
- "implicit block key": [{"implicit flow key": "value"}]
- },
- """
- 'implicit block key' : [
- 'implicit flow key' : value,
- ]""");
- });
-
- test('[Example 7.9]', () {
- expectYamlLoads(" 1st non-empty\n2nd non-empty 3rd non-empty ",
- """
- ' 1st non-empty
-
- 2nd non-empty
- \t3rd non-empty '""");
- });
-
- test('[Example 7.10]', () {
- expectYamlLoads([
- "::vector", ": - ()", "Up, up, and away!", -123,
- "http://example.com/foo#bar",
- [
- "::vector", ": - ()", "Up, up, and away!", -123,
- "http://example.com/foo#bar"
- ]
- ],
- '''
- # Outside flow collection:
- - ::vector
- - ": - ()"
- - Up, up, and away!
- - -123
- - http://example.com/foo#bar
- # Inside flow collection:
- - [ ::vector,
- ": - ()",
- "Up, up, and away!",
- -123,
- http://example.com/foo#bar ]''');
- });
-
- test('[Example 7.11]', () {
- expectYamlLoads({
- "implicit block key": [{"implicit flow key": "value"}]
- },
- """
- implicit block key : [
- implicit flow key : value,
- ]""");
- });
-
- test('[Example 7.12]', () {
- expectYamlLoads("1st non-empty\n2nd non-empty 3rd non-empty",
- """
- 1st non-empty
-
- 2nd non-empty
- \t3rd non-empty""");
- });
- });
-
- group('7.4: Flow Collection Styles', () {
- test('[Example 7.13]', () {
- expectYamlLoads([
- ['one', 'two'],
- ['three', 'four']
- ],
- """
- - [ one, two, ]
- - [three ,four]""");
- });
-
- test('[Example 7.14]', () {
- expectYamlLoads([
- "double quoted", "single quoted", "plain text", ["nested"],
- {"single": "pair"}
- ],
- """
- [
- "double
- quoted", 'single
- quoted',
- plain
- text, [ nested ],
- single: pair,
- ]""");
- });
-
- test('[Example 7.15]', () {
- expectYamlLoads([
- {"one": "two", "three": "four"},
- {"five": "six", "seven": "eight"},
- ],
- """
- - { one : two , three: four , }
- - {five: six,seven : eight}""");
- });
-
- test('[Example 7.16]', () {
- var doc = yamlMap({
- "explicit": "entry",
- "implicit": "entry"
- });
- doc[null] = null;
- expectYamlLoads(doc,
- """
- {
- ? explicit: entry,
- implicit: entry,
- ?
- }""");
- });
-
- test('[Example 7.17]', () {
- var doc = yamlMap({
- "unquoted": "separate",
- "http://foo.com": null,
- "omitted value": null
- });
- doc[null] = "omitted key";
- expectYamlLoads(doc,
- '''
- {
- unquoted : "separate",
- http://foo.com,
- omitted value:,
- : omitted key,
- }''');
- });
-
- test('[Example 7.18]', () {
- expectYamlLoads({
- "adjacent": "value",
- "readable": "value",
- "empty": null
- },
- '''
- {
- "adjacent":value,
- "readable": value,
- "empty":
- }''');
- });
-
- test('[Example 7.19]', () {
- expectYamlLoads([{"foo": "bar"}],
- """
- [
- foo: bar
- ]""");
- });
-
- test('[Example 7.20]', () {
- expectYamlLoads([{"foo bar": "baz"}],
- """
- [
- ? foo
- bar : baz
- ]""");
- });
-
- test('[Example 7.21]', () {
- var el1 = yamlMap();
- el1[null] = "empty key entry";
-
- var el2 = yamlMap();
- el2[{"JSON": "like"}] = "adjacent";
-
- expectYamlLoads([[{"YAML": "separate"}], [el1], [el2]],
- """
- - [ YAML : separate ]
- - [ : empty key entry ]
- - [ {JSON: like}:adjacent ]""");
- });
-
- test('[Example 7.22]', () {
- Expect.throws(() => loadYaml(cleanUpLiteral(
- """
- [ foo
- bar: invalid ]""")));
-
- // TODO(nweiz): enable this when we throw an error for long keys
- // var dotList = [];
- // dotList.insertRange(0, 1024, ' ');
- // var dots = Strings.join(dotList, '');
- // Expect.throws(() => loadYaml('[ "foo...$dots...bar": invalid ]'));
- });
- });
-
- group('7.5: Flow Nodes', () {
- test('[Example 7.23]', () {
- expectYamlLoads([["a", "b"], {"a": "b"}, "a", "b", "c"],
- """
- - [ a, b ]
- - { a: b }
- - "a"
- - 'b'
- - c""");
- });
-
- // test('[Example 7.24]', () {
- // expectYamlLoads(["a", "b", "c", "c", ""],
- // """
- // - !!str "a"
- // - 'b'
- // - &anchor "c"
- // - *anchor
- // - !!str""");
- // });
- });
-
- // Chapter 8: Block Styles
- group('8.1: Block Scalar Styles', () {
- test('[Example 8.1]', () {
- expectYamlLoads(["literal\n", " folded\n", "keep\n\n", " strip"],
- """
- - | # Empty header
- literal
- - >1 # Indentation indicator
- folded
- - |+ # Chomping indicator
- keep
-
- - >1- # Both indicators
- strip""");
- });
-
- test('[Example 8.2]', () {
- // Note: in the spec, the fourth element in this array is listed as
- // "\t detected\n", not "\t\ndetected\n". However, I'm reasonably
- // confident that "\t\ndetected\n" is correct when parsed according to the
- // rest of the spec.
- expectYamlLoads([
- "detected\n",
- "\n\n# detected\n",
- " explicit\n",
- "\t\ndetected\n"
- ],
- """
- - |
- detected
- - >
-
-
- # detected
- - |1
- explicit
- - >
- \t
- detected
- """);
- });
-
- test('[Example 8.3]', () {
- Expect.throws(() => loadYaml(cleanUpLiteral(
- """
- - |
-
- text""")));
-
- Expect.throws(() => loadYaml(cleanUpLiteral(
- """
- - >
- text
- text""")));
-
- Expect.throws(() => loadYaml(cleanUpLiteral(
- """
- - |2
- text""")));
- });
-
- test('[Example 8.4]', () {
- expectYamlLoads({"strip": "text", "clip": "text\n", "keep": "text\n"},
- """
- strip: |-
- text
- clip: |
- text
- keep: |+
- text
- """);
- });
-
- test('[Example 8.5]', () {
- // This example in the spec only includes a single newline in the "keep"
- // value, but as far as I can tell that's not how it's supposed to be
- // parsed according to the rest of the spec.
- expectYamlLoads({
- "strip": "# text",
- "clip": "# text\n",
- "keep": "# text\n\n"
- },
- """
- # Strip
- # Comments:
- strip: |-
- # text
-
- # Clip
- # comments:
-
- clip: |
- # text
-
- # Keep
- # comments:
-
- keep: |+
- # text
-
- # Trail
- # comments.
- """);
- });
-
- test('[Example 8.6]', () {
- expectYamlLoads({"strip": "", "clip": "", "keep": "\n"},
- """
- strip: >-
-
- clip: >
-
- keep: |+
-
- """);
- });
-
- test('[Example 8.7]', () {
- expectYamlLoads("literal\n\ttext\n",
- """
- |
- literal
- \ttext
- """);
- });
-
- test('[Example 8.8]', () {
- expectYamlLoads("\n\nliteral\n \n\ntext\n",
- """
- |
-
-
- literal
-
-
- text
-
- # Comment""");
- });
-
- test('[Example 8.9]', () {
- expectYamlLoads("folded text\n",
- """
- >
- folded
- text
- """);
- });
-
- test('[Example 8.10]', () {
- expectYamlLoads(
- cleanUpLiteral("""
-
- folded line
- next line
- * bullet
-
- * list
- * lines
-
- last line
- """),
- """
- >
-
- folded
- line
-
- next
- line
- * bullet
-
- * list
- * lines
-
- last
- line
-
- # Comment""");
- });
-
- // Examples 8.11 through 8.13 are duplicates of 8.10.
- });
-
- group('8.2: Block Collection Styles', () {
- test('[Example 8.14]', () {
- expectYamlLoads({"block sequence": ["one", {"two": "three"}]},
- """
- block sequence:
- - one
- - two : three""");
- });
-
- test('[Example 8.15]', () {
- expectYamlLoads([
- null, "block node\n", ["one", "two"], {"one": "two"}
- ],
- """
- - # Empty
- - |
- block node
- - - one # Compact
- - two # sequence
- - one: two # Compact mapping""");
- });
-
- test('[Example 8.16]', () {
- expectYamlLoads({"block mapping": {"key": "value"}},
- """
- block mapping:
- key: value""");
- });
-
- test('[Example 8.17]', () {
- expectYamlLoads({
- "explicit key": null,
- "block key\n": ["one", "two"]
- },
- """
- ? explicit key # Empty value
- ? |
- block key
- : - one # Explicit compact
- - two # block value""");
- });
-
- test('[Example 8.18]', () {
- var doc = yamlMap({
- 'plain key': 'in-line value',
- "quoted key": ["entry"]
- });
- doc[null] = null;
- expectYamlLoads(doc,
- '''
- plain key: in-line value
- : # Both empty
- "quoted key":
- - entry''');
- });
-
- test('[Example 8.19]', () {
- var el = yamlMap();
- el[{'earth': 'blue'}] = {'moon': 'white'};
- expectYamlLoads([{'sun': 'yellow'}, el],
- """
- - sun: yellow
- - ? earth: blue
- : moon: white""");
- });
-
- // test('[Example 8.20]', () {
- // expectYamlLoads(["flow in block", "Block scalar\n", {"foo": "bar"}],
- // '''
- // -
- // "flow in block"
- // - >
- // Block scalar
- // - !!map # Block collection
- // foo : bar''');
- // });
-
- // test('[Example 8.21]', () {
- // expectYamlLoads({"literal": "value", "folded": "value"},
- // """
- // literal: |2
- // value
- // folded:
- // !!str
- // >1
- // value""");
- // });
-
- // test('[Example 8.22]', () {
- // expectYamlLoads({
- // "sequence": ["entry", ["nested"]],
- // "mapping": {"foo": "bar"}
- // },
- // """
- // sequence: !!seq
- // - entry
- // - !!seq
- // - nested
- // mapping: !!map
- // foo: bar""");
- // });
- });
-
- // Chapter 9: YAML Character Stream
- group('9.1: Documents', () {
- // Example 9.1 tests the use of a BOM, which this implementation currently
- // doesn't plan to support.
-
- // test('[Example 9.2]', () {
- // expectYamlLoads("Document",
- // """
- // %YAML 1.2
- // ---
- // Document
- // ... # Suffix""");
- // });
-
- test('[Example 9.3]', () {
- // The spec example indicates that the comment after "%!PS-Adobe-2.0"
- // should be stripped, which would imply that that line is not part of the
- // literal defined by the "|". The rest of the spec is ambiguous on this
- // point; the allowable indentation for non-indented literal content is
- // not clearly explained. However, if both the "|" and the text were
- // indented the same amount, the text would be part of the literal, which
- // implies that the spec's parse of this document is incorrect.
- expectYamlStreamLoads(
- ["Bare document", "%!PS-Adobe-2.0 # Not the first line\n"],
- """
- Bare
- document
- ...
- # No document
- ...
- |
- %!PS-Adobe-2.0 # Not the first line
- """);
- });
-
- test('[Example 9.4]', () {
- expectYamlStreamLoads([{"matches %": 20}, null],
- """
- ---
- { matches
- % : 20 }
- ...
- ---
- # Empty
- ...""");
- });
-
- // test('[Example 9.5]', () {
- // expectYamlStreamLoads(["%!PS-Adobe-2.0\n", null],
- // """
- // %YAML 1.2
- // --- |
- // %!PS-Adobe-2.0
- // ...
- // %YAML1.2
- // ---
- // # Empty
- // ...""");
- // });
-
- // test('[Example 9.6]', () {
- // expectYamlStreamLoads(["Document", null, {"matches %": 20}],
- // """
- // Document
- // ---
- // # Empty
- // ...
- // %YAML 1.2
- // ---
- // matches %: 20""");
- // });
- });
-
- // Chapter 10: Recommended Schemas
- group('10.1: Failsafe Schema', () {
- // test('[Example 10.1]', () {
- // expectYamlStreamLoads({
- // "Block style": {
- // "Clark": "Evans",
- // "Ingy": "döt Net",
- // "Oren": "Ben-Kiki"
- // },
- // "Flow style": {
- // "Clark": "Evans",
- // "Ingy": "döt Net",
- // "Oren": "Ben-Kiki"
- // }
- // },
- // """
- // Block style: !!map
- // Clark : Evans
- // Ingy : döt Net
- // Oren : Ben-Kiki
-
- // Flow style: !!map { Clark: Evans, Ingy: döt Net, Oren: Ben-Kiki }""");
- // });
-
- // test('[Example 10.2]', () {
- // expectYamlStreamLoads({
- // "Block style": ["Clark Evans", "Ingy döt Net", "Oren Ben-Kiki"],
- // "Flow style": ["Clark Evans", "Ingy döt Net", "Oren Ben-Kiki"]
- // },
- // """
- // Block style: !!seq
- // - Clark Evans
- // - Ingy döt Net
- // - Oren Ben-Kiki
-
- // Flow style: !!seq [ Clark Evans, Ingy döt Net, Oren Ben-Kiki ]""");
- // });
-
- // test('[Example 10.3]', () {
- // expectYamlStreamLoads({
- // "Block style": "String: just a theory.",
- // "Flow style": "String: just a theory."
- // },
- // '''
- // Block style: !!str |-
- // String: just a theory.
-
- // Flow style: !!str "String: just a theory."''');
- // });
- });
-
- group('10.2: JSON Schema', () {
- // test('[Example 10.4]', () {
- // var doc = yamlMap({"key with null value": null});
- // doc[null] = "value for null key";
- // expectYamlStreamLoads(doc,
- // """
- // !!null null: value for null key
- // key with null value: !!null null""");
- // });
-
- // test('[Example 10.5]', () {
- // expectYamlStreamLoads({
- // "YAML is a superset of JSON": true,
- // "Pluto is a planet": false
- // },
- // """
- // YAML is a superset of JSON: !!bool true
- // Pluto is a planet: !!bool false""");
- // });
-
- // test('[Example 10.6]', () {
- // expectYamlStreamLoads({
- // "negative": -12,
- // "zero": 0,
- // "positive": 34
- // },
- // """
- // negative: !!int -12
- // zero: !!int 0
- // positive: !!int 34""");
- // });
-
- // test('[Example 10.7]', () {
- // expectYamlStreamLoads({
- // "negative": -1,
- // "zero": 0,
- // "positive": 23000,
- // "infinity": infinity,
- // "not a number": nan
- // },
- // """
- // negative: !!float -1
- // zero: !!float 0
- // positive: !!float 2.3e4
- // infinity: !!float .inf
- // not a number: !!float .nan""");
- // });
-
- // test('[Example 10.8]', () {
- // expectYamlStreamLoads({
- // "A null": null,
- // "Booleans": [true, false],
- // "Integers": [0, -0, 3, -19],
- // "Floats": [0, 0, 12000, -200000],
- // // Despite being invalid in the JSON schema, these values are valid in
- // // the core schema which this implementation supports.
- // "Invalid": [ true, null, 7, 0x3A, 12.3]
- // },
- // """
- // A null: null
- // Booleans: [ true, false ]
- // Integers: [ 0, -0, 3, -19 ]
- // Floats: [ 0., -0.0, 12e03, -2E+05 ]
- // Invalid: [ True, Null, 0o7, 0x3A, +12.3 ]""");
- // });
- });
-
- group('10.3: Core Schema', () {
- test('[Example 10.9]', () {
- expectYamlLoads({
- "A null": null,
- "Also a null": null,
- "Not a null": "",
- "Booleans": [true, true, false, false],
- "Integers": [0, 7, 0x3A, -19],
- "Floats": [0, 0, 0.5, 12000, -200000],
- "Also floats": [infinity, -infinity, infinity, nan]
- },
- '''
- A null: null
- Also a null: # Empty
- Not a null: ""
- Booleans: [ true, True, false, FALSE ]
- Integers: [ 0, 0o7, 0x3A, -19 ]
- Floats: [ 0., -0.0, .5, +12e03, -2E+05 ]
- Also floats: [ .inf, -.Inf, +.INF, .NAN ]''');
- });
- });
-}
« no previous file with comments | « utils/tests/pub/test_pub.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698