Index: pkg/yaml/test/yaml_test.dart |
diff --git a/pkg/yaml/test/yaml_test.dart b/pkg/yaml/test/yaml_test.dart |
index 4fbb10878ad6fbd773f94f7c51b755651b80e48b..2d9a0e806bfffffe7f2dac96702b21e231d872e2 100644 |
--- a/pkg/yaml/test/yaml_test.dart |
+++ b/pkg/yaml/test/yaml_test.dart |
@@ -4,7 +4,6 @@ |
library yaml.test; |
-// TODO(rnystrom): rewrite tests so that they don't need "Expect". |
import 'package:unittest/unittest.dart'; |
import 'package:yaml/yaml.dart'; |
@@ -16,7 +15,7 @@ main() { |
group('has a friendly error message for', () { |
var tabError = predicate((e) => |
- e.toString().contains('tab characters are not allowed as indentation')); |
+ e.toString().contains('Tab characters are not allowed as indentation')); |
test('using a tab as indentation', () { |
expect(() => loadYaml('foo:\n\tbar'), |
@@ -32,6 +31,29 @@ main() { |
}); |
}); |
+ group("refuses documents that declare version", () { |
+ test("1.0", () { |
+ expectYamlFails(""" |
+ %YAML 1.0 |
+ --- text |
+ """); |
+ }); |
+ |
+ test("1.3", () { |
+ expectYamlFails(""" |
+ %YAML 1.3 |
+ --- text |
+ """); |
+ }); |
+ |
+ test("2.0", () { |
+ expectYamlFails(""" |
+ %YAML 2.0 |
+ --- text |
+ """); |
+ }); |
+ }); |
+ |
// 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 |
@@ -173,21 +195,21 @@ main() { |
- 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.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 = deepEqualsMap(); |
@@ -536,12 +558,12 @@ main() { |
"""); |
}); |
- // test('[Example 5.9]', () { |
- // expectYamlLoads("text", |
- // """ |
- // %YAML 1.2 |
- // --- text"""); |
- // }); |
+ test('[Example 5.9]', () { |
+ expectYamlLoads("text", |
+ """ |
+ %YAML 1.2 |
+ --- text"""); |
+ }); |
test('[Example 5.10]', () { |
expectYamlFails("commercial-at: @text"); |
@@ -886,179 +908,179 @@ main() { |
}); |
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.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"'''); |
- // }); |
+ // 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]', () { |
- // expectYamlFails( |
- // """ |
- // %YAML 1.2 |
- // %YAML 1.1 |
- // foo"""); |
- // }); |
+ test('[Example 6.15]', () { |
+ expectYamlFails( |
+ """ |
+ %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.16]', () { |
+ expectYamlLoads("foo", |
+ ''' |
+ %TAG !yaml! tag:yaml.org,2002: |
+ --- |
+ !yaml!str "foo"'''); |
+ }); |
- // test('[Example 6.17]', () { |
- // ExpectYamlFails( |
- // """ |
- // %TAG ! !foo |
- // %TAG ! !foo |
- // bar"""); |
- // }); |
+ test('[Example 6.17]', () { |
+ expectYamlFails( |
+ """ |
+ %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('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'''); |
- // }); |
+ 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. |
+ // Example 6.24 tests custom tag URIs, which this implementation currently |
+ // doesn't plan to support. |
- // test('[Example 6.25]', () { |
- // expectYamlFails("- !<!> foo"); |
- // expectYamlFails("- !<\$:?> foo"); |
- // }); |
+ test('[Example 6.25]', () { |
+ expectYamlFails("- !<!> foo"); |
+ expectYamlFails("- !<\$:?> foo"); |
+ }); |
- // // Examples 6.26 and 6.27 test custom tag URIs, which this implementation |
- // // currently doesn't plan to support. |
+ // 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.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"""); |
- // }); |
+ test('[Example 6.29]', () { |
+ expectYamlLoads({ |
+ "First occurrence": "Value", |
+ "Second occurrence": "Value" |
+ }, |
+ """ |
+ 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", () { |
- // expectYamlFails( |
- // """ |
- // - *anchor |
- // - &anchor foo"""); |
- // }); |
+ test("must not use an anchor that doesn't previously occur", () { |
+ expectYamlFails( |
+ """ |
+ - *anchor |
+ - &anchor foo"""); |
+ }); |
- // test("don't have to exist for a given anchor node", () { |
- // expectYamlLoads(["foo"], "- &anchor foo"); |
- // }); |
+ test("don't have to exist for a given anchor node", () { |
+ expectYamlLoads(["foo"], "- &anchor foo"); |
+ }); |
- // group('must not specify', () { |
- // test('tag properties', () => expectYamlFails( |
- // """ |
- // - &anchor foo |
- // - !str *anchor"""); |
+ group('must not specify', () { |
+ test('tag properties', () => expectYamlFails( |
+ """ |
+ - &anchor foo |
+ - !str *anchor""")); |
- // test('anchor properties', () => expectYamlFails( |
- // """ |
- // - &anchor foo |
- // - &anchor2 *anchor"""); |
+ test('anchor properties', () => expectYamlFails( |
+ """ |
+ - &anchor foo |
+ - &anchor2 *anchor""")); |
- // test('content', () => expectYamlFails( |
- // """ |
- // - &anchor foo |
- // - *anchor bar"""))); |
- // }); |
+ test('content', () => expectYamlFails( |
+ """ |
+ - &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(anchorList, same(aliasList)); |
+ 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(anchorList, same(aliasList)); |
- // doc = loadYaml(cleanUpLiteral( |
- // """ |
- // ? &anchor [a, b, c] |
- // : ? *anchor |
- // : bar"""); |
- // anchorList = doc.keys[0]; |
- // aliasList = doc[['a', 'b', 'c']].keys[0]; |
- // expect(anchorList, same(aliasList)); |
- // }); |
+ doc = loadYaml(cleanUpLiteral( |
+ """ |
+ ? &anchor [a, b, c] |
+ : ? *anchor |
+ : bar""")); |
+ anchorList = doc.keys.first; |
+ aliasList = doc[['a', 'b', 'c']].keys.first; |
+ expect(anchorList, same(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"""); |
- // }); |
+ test('[Example 7.1]', () { |
+ expectYamlLoads({ |
+ "First occurrence": "Foo", |
+ "Second occurrence": "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.2]', () { |
+ expectYamlLoads({ |
+ "foo": "", |
+ "": "bar" |
+ }, |
+ """ |
+ { |
+ foo : !!str, |
+ !!str : bar, |
+ }"""); |
+ }); |
test('[Example 7.3]', () { |
var doc = deepEqualsMap({"foo": null}); |
@@ -1284,17 +1306,18 @@ main() { |
- [ {JSON: like}:adjacent ]"""); |
}); |
- test('[Example 7.22]', () { |
- expectYamlFails( |
- """ |
- [ foo |
- bar: invalid ]"""); |
- |
- // TODO(nweiz): enable this when we throw an error for long keys |
- // var dotList = new List.filled(1024, ' '); |
- // var dots = dotList.join(); |
- // expectYamlFails('[ "foo...$dots...bar": invalid ]'); |
- }); |
+ // TODO(nweiz): enable this when we throw an error for long or multiline |
+ // keys. |
+ // test('[Example 7.22]', () { |
+ // expectYamlFails( |
+ // """ |
+ // [ foo |
+ // bar: invalid ]"""); |
+ // |
+ // var dotList = new List.filled(1024, ' '); |
+ // var dots = dotList.join(); |
+ // expectYamlFails('[ "foo...$dots...bar": invalid ]'); |
+ // }); |
}); |
group('7.5: Flow Nodes', () { |
@@ -1308,15 +1331,15 @@ main() { |
- c"""); |
}); |
- // test('[Example 7.24]', () { |
- // expectYamlLoads(["a", "b", "c", "c", ""], |
- // """ |
- // - !!str "a" |
- // - 'b' |
- // - &anchor "c" |
- // - *anchor |
- // - !!str"""); |
- // }); |
+ test('[Example 7.24]', () { |
+ expectYamlLoads(["a", "b", "c", "c", ""], |
+ """ |
+ - !!str "a" |
+ - 'b' |
+ - &anchor "c" |
+ - *anchor |
+ - !!str"""); |
+ }); |
}); |
// Chapter 8: Block Styles |
@@ -1569,41 +1592,43 @@ main() { |
: 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.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.21]', () { |
+ // The spec doesn't include a newline after "value" in the parsed map, but |
+ // the block scalar is clipped so it should be retained. |
+ expectYamlLoads({"literal": "value\n", "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"""); |
- // }); |
+ 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 |
@@ -1611,14 +1636,14 @@ main() { |
// 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.2]', () { |
+ expectYamlLoads("Document", |
+ """ |
+ %YAML 1.2 |
+ --- |
+ Document |
+ ... # Suffix"""); |
+ }); |
test('[Example 9.3]', () { |
// The spec example indicates that the comment after "%!PS-Adobe-2.0" |
@@ -1653,81 +1678,83 @@ main() { |
..."""); |
}); |
- // test('[Example 9.5]', () { |
- // expectYamlStreamLoads(["%!PS-Adobe-2.0\n", null], |
- // """ |
- // %YAML 1.2 |
- // --- | |
- // %!PS-Adobe-2.0 |
- // ... |
- // %YAML1.2 |
- // --- |
- // # Empty |
- // ..."""); |
- // }); |
+ test('[Example 9.5]', () { |
+ // The spec doesn't have a space between the second |
+ // "YAML" and "1.2", but this seems to be a typo. |
+ expectYamlStreamLoads(["%!PS-Adobe-2.0\n", null], |
+ """ |
+ %YAML 1.2 |
+ --- | |
+ %!PS-Adobe-2.0 |
+ ... |
+ %YAML 1.2 |
+ --- |
+ # Empty |
+ ..."""); |
+ }); |
- // test('[Example 9.6]', () { |
- // expectYamlStreamLoads(["Document", null, {"matches %": 20}], |
- // """ |
- // Document |
- // --- |
- // # Empty |
- // ... |
- // %YAML 1.2 |
- // --- |
- // matches %: 20"""); |
- // }); |
+ 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 |
+ test('[Example 10.1]', () { |
+ expectYamlLoads({ |
+ "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 }"""); |
- // }); |
+ 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 |
+ test('[Example 10.2]', () { |
+ expectYamlLoads({ |
+ "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 ]"""); |
- // }); |
+ 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. |
+ test('[Example 10.3]', () { |
+ expectYamlLoads({ |
+ "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."'''); |
- // }); |
+ Flow style: !!str "String: just a theory."'''); |
+ }); |
}); |
group('10.2: JSON Schema', () { |