| // Copyright (c) 2020, 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. |
| |
| import 'package:test/test.dart'; |
| import 'package:yaml_edit/yaml_edit.dart'; |
| |
| import 'test_utils.dart'; |
| |
| void main() { |
| group('throws', () { |
| test('PathError if collectionPath points to a scalar', () { |
| final doc = YamlEditor(''' |
| a: 1 |
| b: 2 |
| c: 3 |
| '''); |
| |
| expect(() => doc.remove(['a', 0]), throwsPathError); |
| }); |
| |
| test('PathError if collectionPath is invalid', () { |
| final doc = YamlEditor(''' |
| a: 1 |
| b: 2 |
| c: 3 |
| '''); |
| |
| expect(() => doc.remove(['d']), throwsPathError); |
| }); |
| |
| test('PathError if collectionPath is invalid in nested path', () { |
| final doc = YamlEditor(''' |
| a: |
| b: 'foo' |
| '''); |
| |
| expect(() => doc.remove(['d']), throwsPathError); |
| }); |
| |
| test('PathError if collectionPath is invalid - list', () { |
| final doc = YamlEditor(''' |
| [1, 2, 3] |
| '''); |
| |
| expect(() => doc.remove([4]), throwsPathError); |
| }); |
| |
| test('PathError in list if using a non-integer as index', () { |
| final doc = YamlEditor("{ a: ['b', 'c'] }"); |
| expect(() => doc.remove(['a', 'b']), throwsPathError); |
| }); |
| |
| test('PathError if path is invalid', () { |
| final doc = YamlEditor("{ a: ['b', 'c'] }"); |
| expect(() => doc.remove(['a', 0, '1']), throwsPathError); |
| }); |
| }); |
| |
| group('returns', () { |
| test('returns the removed node when successful', () { |
| final doc = YamlEditor('{ a: { b: foo } }'); |
| final node = doc.remove(['a', 'b']); |
| expect(node.value, equals('foo')); |
| }); |
| |
| test('returns null-value node when doc is empty and path is empty', () { |
| final doc = YamlEditor(''); |
| final node = doc.remove([]); |
| expect(node.value, equals(null)); |
| }); |
| }); |
| |
| test('empty path should clear string', () { |
| final doc = YamlEditor(''' |
| a: 1 |
| b: 2 |
| c: [3, 4] |
| '''); |
| doc.remove([]); |
| expect(doc.toString(), equals('')); |
| }); |
| |
| group('block map', () { |
| test('(1)', () { |
| final doc = YamlEditor(''' |
| a: 1 |
| b: 2 |
| c: 3 |
| '''); |
| doc.remove(['b']); |
| expect(doc.toString(), equals(''' |
| a: 1 |
| c: 3 |
| ''')); |
| }); |
| |
| test('empty value', () { |
| final doc = YamlEditor(''' |
| a: 1 |
| b: |
| c: 3 |
| '''); |
| doc.remove(['b']); |
| expect(doc.toString(), equals(''' |
| a: 1 |
| c: 3 |
| ''')); |
| }); |
| |
| test('empty value (2)', () { |
| final doc = YamlEditor(''' |
| - a: 1 |
| b: |
| c: 3 |
| '''); |
| doc.remove([0, 'b']); |
| expect(doc.toString(), equals(''' |
| - a: 1 |
| c: 3 |
| ''')); |
| }); |
| |
| test('empty value (3)', () { |
| final doc = YamlEditor(''' |
| - a: 1 |
| b: |
| |
| c: 3 |
| '''); |
| doc.remove([0, 'b']); |
| expect(doc.toString(), equals(''' |
| - a: 1 |
| |
| c: 3 |
| ''')); |
| }); |
| |
| test('preserves comments', () { |
| final doc = YamlEditor(''' |
| a: 1 # preserved 1 |
| # preserved 2 |
| b: 2 |
| # preserved 3 |
| c: 3 # preserved 4 |
| '''); |
| doc.remove(['b']); |
| expect(doc.toString(), equals(''' |
| a: 1 # preserved 1 |
| # preserved 2 |
| # preserved 3 |
| c: 3 # preserved 4 |
| ''')); |
| }); |
| |
| test('final element in map', () { |
| final doc = YamlEditor(''' |
| a: 1 |
| b: 2 |
| '''); |
| doc.remove(['b']); |
| expect(doc.toString(), equals(''' |
| a: 1 |
| ''')); |
| }); |
| |
| test('final element in nested map', () { |
| final doc = YamlEditor(''' |
| a: |
| aa: 11 |
| bb: 22 |
| b: 2 |
| '''); |
| doc.remove(['a', 'bb']); |
| expect(doc.toString(), equals(''' |
| a: |
| aa: 11 |
| b: 2 |
| ''')); |
| }); |
| |
| test('last element should return flow empty map', () { |
| final doc = YamlEditor(''' |
| a: 1 |
| '''); |
| doc.remove(['a']); |
| expect(doc.toString(), equals(''' |
| {} |
| ''')); |
| }); |
| |
| test('last element should return flow empty map (2)', () { |
| final doc = YamlEditor(''' |
| - a: 1 |
| - b: 2 |
| '''); |
| doc.remove([0, 'a']); |
| expect(doc.toString(), equals(''' |
| - {} |
| - b: 2 |
| ''')); |
| }); |
| |
| test('nested', () { |
| final doc = YamlEditor(''' |
| a: 1 |
| b: |
| d: 4 |
| e: 5 |
| c: 3 |
| '''); |
| doc.remove(['b', 'd']); |
| expect(doc.toString(), equals(''' |
| a: 1 |
| b: |
| e: 5 |
| c: 3 |
| ''')); |
| }); |
| }); |
| |
| group('flow map', () { |
| test('(1)', () { |
| final doc = YamlEditor('{a: 1, b: 2, c: 3}'); |
| doc.remove(['b']); |
| expect(doc.toString(), equals('{a: 1, c: 3}')); |
| }); |
| |
| test('(2) ', () { |
| final doc = YamlEditor('{a: 1}'); |
| doc.remove(['a']); |
| expect(doc.toString(), equals('{}')); |
| }); |
| |
| test('(3) ', () { |
| final doc = YamlEditor('{a: 1, b: 2}'); |
| doc.remove(['a']); |
| expect(doc.toString(), equals('{ b: 2}')); |
| }); |
| |
| test('(4) ', () { |
| final doc = |
| YamlEditor('{"{}[],": {"{}[],": 1, b: "}{[]},", "}{[],": 3}}'); |
| doc.remove(['{}[],', 'b']); |
| expect(doc.toString(), equals('{"{}[],": {"{}[],": 1, "}{[],": 3}}')); |
| }); |
| |
| test('empty value', () { |
| final doc = YamlEditor('{a: 1, b:, c: 3}'); |
| doc.remove(['b']); |
| expect(doc.toString(), equals('{a: 1, c: 3}')); |
| }); |
| |
| test('nested flow map ', () { |
| final doc = YamlEditor('{a: 1, b: {d: 4, e: 5}, c: 3}'); |
| doc.remove(['b', 'd']); |
| expect(doc.toString(), equals('{a: 1, b: { e: 5}, c: 3}')); |
| }); |
| |
| test('nested flow map (2)', () { |
| final doc = YamlEditor('{a: {{[1] : 2}: 3, b: 2}}'); |
| doc.remove([ |
| 'a', |
| { |
| [1]: 2 |
| } |
| ]); |
| expect(doc.toString(), equals('{a: { b: 2}}')); |
| }); |
| }); |
| |
| group('block list', () { |
| test('empty value', () { |
| final doc = YamlEditor(''' |
| - 0 |
| - |
| - 2 |
| '''); |
| doc.remove([1]); |
| expect(doc.toString(), equals(''' |
| - 0 |
| - 2 |
| ''')); |
| }); |
| |
| test('last element should return flow empty list', () { |
| final doc = YamlEditor(''' |
| - 0 |
| '''); |
| doc.remove([0]); |
| expect(doc.toString(), equals(''' |
| [] |
| ''')); |
| }); |
| |
| test('last element should return flow empty list (2)', () { |
| final doc = YamlEditor(''' |
| a: |
| - 1 |
| b: [3] |
| '''); |
| doc.remove(['a', 0]); |
| expect(doc.toString(), equals(''' |
| a: |
| [] |
| b: [3] |
| ''')); |
| }); |
| |
| test('last element should return flow empty list (3)', () { |
| final doc = YamlEditor(''' |
| a: |
| - 1 |
| b: |
| - 3 |
| '''); |
| doc.remove(['a', 0]); |
| expect(doc.toString(), equals(''' |
| a: |
| [] |
| b: |
| - 3 |
| ''')); |
| }); |
| |
| test('(1) ', () { |
| final doc = YamlEditor(''' |
| - 0 |
| - 1 |
| - 2 |
| - 3 |
| '''); |
| doc.remove([1]); |
| expect(doc.toString(), equals(''' |
| - 0 |
| - 2 |
| - 3 |
| ''')); |
| expectYamlBuilderValue(doc, [0, 2, 3]); |
| }); |
| |
| test('(2)', () { |
| final doc = YamlEditor(''' |
| - 0 |
| - [1,2,3] |
| - 2 |
| - 3 |
| '''); |
| doc.remove([1]); |
| expect(doc.toString(), equals(''' |
| - 0 |
| - 2 |
| - 3 |
| ''')); |
| expectYamlBuilderValue(doc, [0, 2, 3]); |
| }); |
| |
| test('(3)', () { |
| final doc = YamlEditor(''' |
| - 0 |
| - {a: 1, b: 2} |
| - 2 |
| - 3 |
| '''); |
| doc.remove([1]); |
| expect(doc.toString(), equals(''' |
| - 0 |
| - 2 |
| - 3 |
| ''')); |
| expectYamlBuilderValue(doc, [0, 2, 3]); |
| }); |
| |
| test('last element', () { |
| final doc = YamlEditor(''' |
| - 0 |
| - 1 |
| '''); |
| doc.remove([1]); |
| expect(doc.toString(), equals(''' |
| - 0 |
| ''')); |
| expectYamlBuilderValue(doc, [0]); |
| }); |
| |
| test('with comments', () { |
| final doc = YamlEditor(''' |
| - 0 # comment 0 |
| # comment 1 |
| - 1 # comment 2 |
| # comment 3 |
| - 2 # comment 4 |
| - 3 |
| '''); |
| doc.remove([1]); |
| expect(doc.toString(), equals(''' |
| - 0 # comment 0 |
| # comment 1 |
| # comment 3 |
| - 2 # comment 4 |
| - 3 |
| ''')); |
| expectYamlBuilderValue(doc, [0, 2, 3]); |
| }); |
| |
| test('nested list', () { |
| final doc = YamlEditor(''' |
| - - - 0 |
| - 1 |
| '''); |
| doc.remove([0, 0, 0]); |
| expect(doc.toString(), equals(''' |
| - - - 1 |
| ''')); |
| expectYamlBuilderValue(doc, [ |
| [ |
| [1] |
| ] |
| ]); |
| }); |
| |
| test('nested list (2)', () { |
| final doc = YamlEditor(''' |
| - - 0 |
| - 1 |
| - 2 |
| '''); |
| doc.remove([0]); |
| expect(doc.toString(), equals(''' |
| - 2 |
| ''')); |
| expectYamlBuilderValue(doc, [2]); |
| }); |
| |
| test('nested list (3)', () { |
| final doc = YamlEditor(''' |
| - - 0 |
| - 1 |
| - 2 |
| '''); |
| doc.remove([0, 1]); |
| expect(doc.toString(), equals(''' |
| - - 0 |
| - 2 |
| ''')); |
| expectYamlBuilderValue(doc, [ |
| [0], |
| 2 |
| ]); |
| }); |
| |
| test('nested list (4)', () { |
| final doc = YamlEditor(''' |
| - |
| - - 0 |
| - 1 |
| - 2 |
| '''); |
| doc.remove([0, 0, 1]); |
| expect(doc.toString(), equals(''' |
| - |
| - - 0 |
| - 2 |
| ''')); |
| expectYamlBuilderValue(doc, [ |
| [ |
| [0], |
| 2 |
| ] |
| ]); |
| }); |
| |
| test('nested list (5)', () { |
| final doc = YamlEditor(''' |
| - - 0 |
| - |
| 1 |
| '''); |
| doc.remove([0, 0]); |
| expect(doc.toString(), equals(''' |
| - - |
| 1 |
| ''')); |
| expectYamlBuilderValue(doc, [ |
| [1] |
| ]); |
| }); |
| |
| test('nested list (6)', () { |
| final doc = YamlEditor(''' |
| - - 0 # - |
| # - |
| - |
| 1 |
| '''); |
| doc.remove([0, 0]); |
| expect(doc.toString(), equals(''' |
| - # - |
| - |
| 1 |
| ''')); |
| expectYamlBuilderValue(doc, [ |
| [1] |
| ]); |
| }); |
| |
| test('nested map', () { |
| final doc = YamlEditor(''' |
| - - a: b |
| c: d |
| '''); |
| doc.remove([0, 0, 'a']); |
| expect(doc.toString(), equals(''' |
| - - c: d |
| ''')); |
| expectYamlBuilderValue(doc, [ |
| [ |
| {'c': 'd'} |
| ] |
| ]); |
| }); |
| |
| test('nested map (2)', () { |
| final doc = YamlEditor(''' |
| - a: |
| - 0 |
| - 1 |
| c: d |
| '''); |
| doc.remove([0, 'a', 1]); |
| expect(doc.toString(), equals(''' |
| - a: |
| - 0 |
| c: d |
| ''')); |
| expectYamlBuilderValue(doc, [ |
| { |
| 'a': [0], |
| 'c': 'd' |
| } |
| ]); |
| }); |
| }); |
| |
| group('flow list', () { |
| test('(1)', () { |
| final doc = YamlEditor('[1, 2, 3]'); |
| doc.remove([1]); |
| expect(doc.toString(), equals('[1, 3]')); |
| expectYamlBuilderValue(doc, [1, 3]); |
| }); |
| |
| test('(2)', () { |
| final doc = YamlEditor('[1, "b", "c"]'); |
| doc.remove([0]); |
| expect(doc.toString(), equals('[ "b", "c"]')); |
| expectYamlBuilderValue(doc, ['b', 'c']); |
| }); |
| |
| test('(3)', () { |
| final doc = YamlEditor('[1, {a: 1}, "c"]'); |
| doc.remove([1]); |
| expect(doc.toString(), equals('[1, "c"]')); |
| expectYamlBuilderValue(doc, [1, 'c']); |
| }); |
| |
| test('(4) ', () { |
| final doc = YamlEditor('["{}", b, "}{"]'); |
| doc.remove([1]); |
| expect(doc.toString(), equals('["{}", "}{"]')); |
| }); |
| |
| test('(5) ', () { |
| final doc = YamlEditor('["{}[],", [test, "{}[],", "{}[],"], "{}[],"]'); |
| doc.remove([1, 0]); |
| expect(doc.toString(), equals('["{}[],", [ "{}[],", "{}[],"], "{}[],"]')); |
| }); |
| }); |
| } |