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

Unified Diff: tests/lib/yaml_tests.dart

Issue 10153004: Add a basic YAML processor. Much of the language is still unimplemented. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 8 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
Index: tests/lib/yaml_tests.dart
diff --git a/tests/lib/yaml_tests.dart b/tests/lib/yaml_tests.dart
new file mode 100644
index 0000000000000000000000000000000000000000..a8ec4c0e488250fd2594aa872be1eb936b768445
--- /dev/null
+++ b/tests/lib/yaml_tests.dart
@@ -0,0 +1,1859 @@
+// 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('yamlTest');
Bob Nystrom 2012/04/20 20:28:55 yaml_tests
nweiz 2012/04/23 23:06:33 This is contrary to the style of the rest of tests
Bob Nystrom 2012/04/24 00:50:36 There's no consistent style in there. dartdoc and
nweiz 2012/04/25 00:26:29 Changed to yaml_tests.
+
+#import('../../lib/unittest/unittest.dart');
+#import('../../lib/yaml/yaml.dart', prefix: 'yaml');
+
+/** Constructs a new yaml.YamlMap, optionally from a normal Map. */
+Map yamlMap([Map from]) =>
+ from == null ? new yaml.YamlMap() : new yaml.YamlMap.from(from);
+
+/** Returns whether two lists have equivalent contents. */
+bool listDeepEquals(List list1, List list2) {
Bob Nystrom 2012/04/20 20:28:55 Instead of copying these here, you could move them
nweiz 2012/04/23 23:06:33 Done.
+ if (list1.length != list2.length) return false;
+
+ for (var i = 0; i < list1.length; i++) {
+ if (!deepEquals(list1[i], list2[i])) return false;
+ }
+
+ return true;
+}
+
+/** Returns whether two maps have equivalent contents. */
+bool mapDeepEquals(Map map1, Map map2) {
+ if (map1.length != map2.length) return false;
+
+ for (var key in map1.getKeys()) {
+ if (!map2.containsKey(key)) return false;
+ if (!deepEquals(map1[key], map2[key])) return false;
+ }
+
+ return true;
+}
+
+/**
+ * Returns whether two doubles are equal. This differs from `d1 == d2` in that
+ * it considers NaN to be equal to itself.
+ */
+bool doubleEquals(double d1, double d2) {
+ if (d1.isNaN() && d2.isNaN()) return true;
+ return d1 == d2;
+}
+
+/** Returns whether two objects are structurally equivalent. */
+bool deepEquals(obj1, obj2) {
+ if (obj1 is List && obj2 is List) return listDeepEquals(obj1, obj2);
+ if (obj1 is Map && obj2 is Map) return mapDeepEquals(obj1, obj2);
+ if (obj1 is double && obj2 is double) return doubleEquals(obj1, obj2);
+ return obj1 == obj2;
+}
+
+/**
+ * Asserts that a string containing a single YAML document produces a given
+ * value when loaded.
+ */
+expectYamlLoads(expected, String source) {
+ var actual = yaml.load(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 = yaml.loadStream(source);
+ Expect.isTrue(deepEquals(expected, actual),
+ 'expectYamlStreamLoads(expected: <$expected>, actual: <$actual>)');
+}
+
+main() {
+ var infinity = Math.parseDouble("Infinity");
+ var nan = Math.parseDouble("NaN");
+
+ group('YamlMap', () {
+ group('accepts as a key', () {
+ _expectKeyWorks(keyFn()) {
+ var map = yamlMap();
+ map[keyFn()] = 5;
+ Expect.isTrue(map.containsKey(keyFn()));
+ Expect.equals(5, map[keyFn()]);
+ }
+
+ 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.isTrue(normalMap.containsKey(yamlMap({'foo': 'bar'})));
+ Expect.equals('baz', normalMap[yamlMap({'foo': 'bar'})]);
+ });
+ });
+
+ // 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
Bob Nystrom 2012/04/20 20:28:55 Unindented multiline strings make the surrounding
nweiz 2012/04/23 23:06:33 I feel like this is one of those cases where we sh
Bob Nystrom 2012/04/24 00:50:36 It's maybe not ideal, but it's not particularly ha
nweiz 2012/04/25 00:26:29 Done.
+- 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("""
+// \//||\/||
+// // || ||__
+// """.trim(), """
+// # 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("""
+// 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.",
+// "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."
+// },
+// {
+// "Date": "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.
+// ---
+// Date: 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(() => yaml.load('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 text\n",
+// 'folded': "some\ntext\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(() => yaml.load("commercial-at: @text"));
+ Expect.throws(() => yaml.load("commercial-at: `text"));
+ });
+ });
+
+ group('5.4: Line Break Characters', () {
+ group('include', () {
+ test('\\n', () => expectYamlLoads([1, 2], "- 1\n- 2"));
+ test('\\r', () => expectYamlLoads([1, 2], "- 1\r- 2"));
+ });
+
+ group('do not include', () {
+ test('form feed', () => Expect.throws(() => yaml.load("- 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", '- |\n foo\r bar'));
+ // test("from \\r\\n to \\n", () =>
+ // expectYamlLoads("foo\nbar", '- |\n foo\r\n bar'));
+ });
+
+// test('[Example 5.11]', () {
+// expectYamlLoads("""
+// 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
+// """.trim(), '''
+// "Fun with \\\\
+// \\" \\a \\b \\e \\f \\
+// \\n \\r \\t \\v \\0 \\
+// \\ \\_ \\N \\L \\P \\
+// \\x41 \\u0041 \\U00000041"
+// ''');
+// });
+
+ // test('[Example 5.14]', () {
+ // Expect.throws(() => yaml.load('Bad escape: "\\c"'));
+ // Expect.throws(() => yaml.load('Bad escape: "\\xq-"'));
+ // });
+ });
+
+ // Chapter 6: Basic Structures
+ group('6.1: Indentation Spaces', () {
+ test('may not include TAB characters', () {
+ Expect.throws(() => yaml.load("""
+-
+\t- foo
+\t- bar
+"""));
+ });
+
+ test('must be the same for all sibling nodes', () {
+ Expect.throws(() => yaml.load("""
+-
+ - 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
+// """.trim());
+// });
+
+// 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(() => yaml.load("""
+// [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(() => yaml.load("""
+// %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(() => yaml.load("""
+// %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(() => yaml.load("- !<!> foo"));
+// Expect.throws(() => yaml.load("- !<\$:?> 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(() => yaml.load("""
+// - *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(() => yaml.load("""
+// - &anchor foo
+// - !str *anchor
+// """)));
+
+// test('anchor properties', () => Expect.throws(() => yaml.load("""
+// - &anchor foo
+// - &anchor2 *anchor
+// """)));
+
+// test('content', () => Expect.throws(() => yaml.load("""
+// - &anchor foo
+// - *anchor bar
+// """)));
+// });
+
+// test('must preserve structural equality', () {
+// var doc = yaml.load("""
+// 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 = yaml.load("""
+// ? &anchor [a, b, c]
+// : ? *anchor
+// : bar
+// """);
+// anchorList = doc.getKeys()[0];
+// aliasList = doc[['a', 'b', 'c']].getKeys()[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 array";
+
+// 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(() => yaml.load("""
+// [ foo
+// bar: invalid ]
+// """));
+
+// var dotList = [];
+// dotList.insertRange(0, 1024, ' ');
+// var dots = Strings.join(dotList, '');
+// Expect.throws(() => yaml.load('[ "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]', () {
+// expectYamlLoads([
+// "detected\n",
+// "\n\n# detected\n",
+// " explicit\n",
+// "\t detected\n"
+// ], """
+// - |
+// detected
+// - >
+
+
+// # detected
+// - |1
+// explicit
+// - >
+// \t
+// detected
+// """);
+// });
+
+// test('[Example 8.3]', () {
+// Expect.throws(() => yaml.load("""
+// - |
+
+// text
+// """));
+
+// Expect.throws(() => yaml.load("""
+// - >
+// text
+// text
+// """));
+
+// Expect.throws(() => yaml.load("""
+// - |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]', () {
+// expectYamlLoads({
+// "strip": "# text",
+// "clip": "# text\n",
+// "keep": "# text\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("""
+// 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]', () {
+// expectYamlStreamLoads(["Bare Document", "%!PS-Adobe-2.0\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]', () {
+// expectYamlStreamLoads({
+// "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 ]
+// """);
+// });
+ });
+}
« lib/yaml/yaml_map.dart ('K') | « tests/lib/lib.status ('k') | tools/test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698