174 lines
2.9 KiB
Dart
174 lines
2.9 KiB
Dart
|
|
// 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 │ -
|
||
|
|
│ ^
|
||
|
|
╵''');
|
||
|
|
});
|
||
|
|
});
|
||
|
|
}
|