blob: 8298a9de17c5bcfa02245e71c1ae28bff45412ea [file] [log] [blame]
#!/usr/bin/env dart
// Copyright (c) 2018, 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:fixnum/fixnum.dart';
import 'package:test/test.dart' show test, expect;
import '../out/protos/foo.pb.dart' as pb;
void main() {
test('merges child message', () {
final top = pb.Outer()
..id = Int64(1)
..value = 'sss'
..strings.addAll(['s1', 's2'])
..inner = (pb.Inner()
..id = Int64(2)
..value = 'sub'
..strings.addAll(['sub1', 'sub2']));
final update = pb.Outer()
..id = Int64(1)
..value = 'new'
..inner = (pb.Inner()..id = Int64(3));
top.mergeFromMessage(update);
final expected = pb.Outer()
..id = Int64(1)
..value = 'new'
..strings.addAll(['s1', 's2'])
// This is properly merged.
..inner = (pb.Inner()
..id = Int64(3)
..value = 'sub'
..strings.addAll(['sub1', 'sub2']));
expect(top, expected);
});
test('merges grandchild message', () {
final empty = pb.Outer();
final mergeMe1 = pb.Outer()
..inner = (pb.Inner()..inner = (pb.Inner()..id = Int64(1)));
final mergeMe2 = pb.Outer()
..inner = (pb.Inner()..inner = (pb.Inner()..value = 'new'));
empty.mergeFromMessage(mergeMe1);
empty.mergeFromMessage(mergeMe2);
final expected = pb.Outer()
..inner = (pb.Inner()
..inner = (pb.Inner()
..id = Int64(1)
..value = 'new'));
expect(empty, expected);
});
test('merges repeated element of child', () {
final empty = pb.Outer();
final mergeMe = pb.Outer()..inner = (pb.Inner()..strings.add('one'));
empty.mergeFromMessage(mergeMe);
final expected = pb.Outer()..inner = (pb.Inner()..strings.add('one'));
expect(empty, expected);
});
}