#!/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.

library merge_test;

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);
  });
}
