blob: 7fb9ca9f20111c5af476fcfc8675b2bee7fef4b0 [file] [log] [blame]
import 'package:observable/observable.dart';
import 'package:test/test.dart';
main() {
group('$MapDiffer', () {
final diff = const MapDiffer<String, String>().diff;
test('should emit no changes for identical maps', () {
final map = new Map<String, String>.fromIterable(
new Iterable.generate(10, (i) => '$i'),
);
expect(diff(map, map), isEmpty);
});
test('should emit no changes for maps with identical content', () {
final map1 = new Map<String, String>.fromIterable(
new Iterable.generate(10, (i) => '$i'),
);
final map2 = new Map<String, String>.fromIterable(
new Iterable.generate(10, (i) => '$i'),
);
expect(diff(map1, map2), isEmpty);
});
test('should detect insertions', () {
expect(
diff({
'key-a': 'value-a',
'key-b': 'value-b',
}, {
'key-a': 'value-a',
'key-b': 'value-b',
'key-c': 'value-c',
}),
[
new MapChangeRecord.insert('key-c', 'value-c'),
],
);
});
test('should detect removals', () {
expect(
diff({
'key-a': 'value-a',
'key-b': 'value-b',
'key-c': 'value-c',
}, {
'key-a': 'value-a',
'key-b': 'value-b',
}),
[
new MapChangeRecord.remove('key-c', 'value-c'),
],
);
});
test('should detect updates', () {
expect(
diff({
'key-a': 'value-a',
'key-b': 'value-b-old',
}, {
'key-a': 'value-a',
'key-b': 'value-b-new',
}),
[
new MapChangeRecord('key-b', 'value-b-old', 'value-b-new'),
],
);
});
});
group('$MapChangeRecord', () {
test('should reply an insertion', () {
final map1 = {
'key-a': 'value-a',
'key-b': 'value-b',
};
final map2 = {
'key-a': 'value-a',
'key-b': 'value-b',
'key-c': 'value-c',
};
new MapChangeRecord.insert('key-c', 'value-c').apply(map1);
expect(map1, map2);
});
test('should replay a removal', () {
final map1 = {
'key-a': 'value-a',
'key-b': 'value-b',
'key-c': 'value-c',
};
final map2 = {
'key-a': 'value-a',
'key-b': 'value-b',
};
new MapChangeRecord.remove('key-c', 'value-c').apply(map1);
expect(map1, map2);
});
test('should replay an update', () {
final map1 = {
'key-a': 'value-a',
'key-b': 'value-b-old',
};
final map2 = {
'key-a': 'value-a',
'key-b': 'value-b-new',
};
new MapChangeRecord('key-b', 'value-b-old', 'value-b-new').apply(map1);
expect(map1, map2);
});
});
}