| // Copyright (c) 2019, the Dart project authors. | |
| // Copyright (c) 2006, Kirill Simonov. | |
| // | |
| // Use of this source code is governed by an MIT-style | |
| // license that can be found in the LICENSE file or at | |
| // https://opensource.org/licenses/MIT. | |
| import 'dart:convert'; | |
| import 'package:source_span/source_span.dart'; | |
| import 'package:test/test.dart'; | |
| import 'package:yaml/yaml.dart'; | |
| void _expectSpan(SourceSpan source, String expected) { | |
| final result = source.message('message'); | |
| printOnFailure("r'''\n$result'''"); | |
| expect(result, expected); | |
| } | |
| void main() { | |
| late YamlMap yaml; | |
| setUpAll(() { | |
| yaml = loadYaml(const JsonEncoder.withIndent(' ').convert({ | |
| 'num': 42, | |
| 'nested': { | |
| 'null': null, | |
| 'num': 42, | |
| }, | |
| 'null': null, | |
| })) as YamlMap; | |
| }); | |
| test('first root key', () { | |
| _expectSpan( | |
| yaml.nodes['num']!.span, | |
| r''' | |
| line 2, column 9: message | |
| ╷ | |
| 2 │ "num": 42, | |
| │ ^^ | |
| ╵''', | |
| ); | |
| }); | |
| test('first root key', () { | |
| _expectSpan( | |
| yaml.nodes['null']!.span, | |
| r''' | |
| line 7, column 10: message | |
| ╷ | |
| 7 │ "null": null | |
| │ ^^^^ | |
| ╵''', | |
| ); | |
| }); | |
| group('nested', () { | |
| late YamlMap nestedMap; | |
| setUpAll(() { | |
| nestedMap = yaml.nodes['nested'] as YamlMap; | |
| }); | |
| test('first root key', () { | |
| _expectSpan( | |
| nestedMap.nodes['null']!.span, | |
| r''' | |
| line 4, column 11: message | |
| ╷ | |
| 4 │ "null": null, | |
| │ ^^^^ | |
| ╵''', | |
| ); | |
| }); | |
| test('first root key', () { | |
| _expectSpan( | |
| nestedMap.nodes['num']!.span, | |
| r''' | |
| line 5, column 10: message | |
| ╷ | |
| 5 │ "num": 42 | |
| │ ┌──────────^ | |
| 6 │ │ }, | |
| │ └─^ | |
| ╵''', | |
| ); | |
| }); | |
| }); | |
| group('block', () { | |
| late YamlList list, nestedList; | |
| setUpAll(() { | |
| const yamlStr = ''' | |
| - foo | |
| - | |
| - one | |
| - | |
| - three | |
| - | |
| - five | |
| - | |
| - | |
| a : b | |
| c : d | |
| - bar | |
| '''; | |
| list = loadYaml(yamlStr) as YamlList; | |
| nestedList = list.nodes[1] as YamlList; | |
| }); | |
| test('root nodes span', () { | |
| _expectSpan(list.nodes[0].span, r''' | |
| line 1, column 3: message | |
| ╷ | |
| 1 │ - foo | |
| │ ^^^ | |
| ╵'''); | |
| _expectSpan(list.nodes[1].span, r''' | |
| line 3, column 3: message | |
| ╷ | |
| 3 │ ┌ - one | |
| 4 │ │ - | |
| 5 │ │ - three | |
| 6 │ │ - | |
| 7 │ │ - five | |
| 8 │ └ - | |
| ╵'''); | |
| _expectSpan(list.nodes[2].span, r''' | |
| line 10, column 3: message | |
| ╷ | |
| 10 │ ┌ a : b | |
| 11 │ └ c : d | |
| ╵'''); | |
| _expectSpan(list.nodes[3].span, r''' | |
| line 12, column 3: message | |
| ╷ | |
| 12 │ - bar | |
| │ ^^^ | |
| ╵'''); | |
| }); | |
| test('null nodes span', () { | |
| _expectSpan(nestedList.nodes[1].span, r''' | |
| line 4, column 3: message | |
| ╷ | |
| 4 │ - | |
| │ ^ | |
| ╵'''); | |
| _expectSpan(nestedList.nodes[3].span, r''' | |
| line 6, column 3: message | |
| ╷ | |
| 6 │ - | |
| │ ^ | |
| ╵'''); | |
| _expectSpan(nestedList.nodes[5].span, r''' | |
| line 8, column 3: message | |
| ╷ | |
| 8 │ - | |
| │ ^ | |
| ╵'''); | |
| }); | |
| }); | |
| } |