// 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'; void main() { group('SourceEdit', () { group('fromJson', () { test('converts from jsonEncode', () { final sourceEditMap = { 'offset': 1, 'length': 2, 'replacement': 'replacement string' }; final sourceEdit = SourceEdit.fromJson(sourceEditMap); expect(sourceEdit.offset, 1); expect(sourceEdit.length, 2); expect(sourceEdit.replacement, 'replacement string'); }); test('throws formatException if offset is non-int', () { final sourceEditJson = { 'offset': '1', 'length': 2, 'replacement': 'replacement string' }; expect( () => SourceEdit.fromJson(sourceEditJson), throwsFormatException); }); test('throws formatException if length is non-int', () { final sourceEditJson = { 'offset': 1, 'length': '2', 'replacement': 'replacement string' }; expect( () => SourceEdit.fromJson(sourceEditJson), throwsFormatException); }); test('throws formatException if replacement is non-string', () { final sourceEditJson = {'offset': 1, 'length': 2, 'replacement': 3}; expect( () => SourceEdit.fromJson(sourceEditJson), throwsFormatException); }); test('throws formatException if a field is not present', () { final sourceEditJson = {'offset': 1, 'length': 2}; expect( () => SourceEdit.fromJson(sourceEditJson), throwsFormatException); }); }); test('toString returns a nice string representation', () { final sourceEdit = SourceEdit(1, 2, 'replacement string'); expect(sourceEdit.toString(), equals('SourceEdit(1, 2, "replacement string")')); }); group('hashCode', () { test('returns same value for equal SourceEdits', () { final sourceEdit1 = SourceEdit(1, 2, 'replacement string'); final sourceEdit2 = SourceEdit(1, 2, 'replacement string'); expect(sourceEdit1.hashCode, equals(sourceEdit2.hashCode)); }); test('returns different value for equal SourceEdits', () { final sourceEdit1 = SourceEdit(1, 2, 'replacement string'); final sourceEdit2 = SourceEdit(1, 3, 'replacement string'); expect(sourceEdit1.hashCode == sourceEdit2.hashCode, equals(false)); }); }); group('toJson', () { test('behaves as expected', () { final sourceEdit = SourceEdit(1, 2, 'replacement string'); final sourceEditJson = sourceEdit.toJson(); expect( sourceEditJson, equals({ 'offset': 1, 'length': 2, 'replacement': 'replacement string' })); }); test('is compatible with fromJson', () { final sourceEdit = SourceEdit(1, 2, 'replacement string'); final sourceEditJson = sourceEdit.toJson(); final newSourceEdit = SourceEdit.fromJson(sourceEditJson); expect(newSourceEdit.offset, 1); expect(newSourceEdit.length, 2); expect(newSourceEdit.replacement, 'replacement string'); }); }); group('applyAll', () { test('returns original string when empty list is passed in', () { const original = 'YAML: YAML'; final result = SourceEdit.applyAll(original, []); expect(result, original); }); test('works with list of one SourceEdit', () { const original = 'YAML: YAML'; final sourceEdits = [SourceEdit(6, 4, 'YAML Ain\'t Markup Language')]; final result = SourceEdit.applyAll(original, sourceEdits); expect(result, "YAML: YAML Ain't Markup Language"); }); test('works with list of multiple SourceEdits', () { const original = 'YAML: YAML'; final sourceEdits = [ SourceEdit(6, 4, "YAML Ain't Markup Language"), SourceEdit(6, 4, "YAML Ain't Markup Language"), SourceEdit(0, 4, "YAML Ain't Markup Language") ]; final result = SourceEdit.applyAll(original, sourceEdits); expect( result, "YAML Ain't Markup Language: YAML Ain't Markup Language Ain't Markup " 'Language', ); }); }); }); }