#!/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:test/test.dart';
import 'package:fixnum/fixnum.dart';

import '../out/protos/_leading_underscores.pb.dart';

void main() {
  test('can set, read and clear all fields and refer to types', () {
    var message = A_();
    message.setExtension(Leading_underscores_.p, Int64(99));
    expect(message.getExtension(Leading_underscores_.p), Int64(99));
    message.f = 'foo';
    message.f_2 = 'foo2';
    expect(message.f, 'foo');
    expect(message.f_2, 'foo2');
    message.clearF();
    message.clearF_2();
    expect(message.hasF(), false);
    expect(message.hasF_2(), false);
    expect(message.f, '');
    expect(message.f_2, '');
    var messageA = A();
    messageA.b = message;
    messageA.b_6 = message;
    expect(messageA.b_6, message);
    messageA.amap['foo'] = message;
    expect(messageA.amap['foo'], message);

    messageA.red = 'r';
    expect(messageA.red, 'r');
    expect(messageA.green, '');
    messageA.clearColors();
    expect(messageA.red, '');
    expect(messageA.green, '');
    messageA.red = 'r';
    messageA.clearRed();
    expect(messageA.red, '');
    expect(messageA.green, '');
    messageA.green = 'g';
    expect(messageA.green, 'g');
    messageA.clearGreen();
    expect(messageA.red, '');
    expect(messageA.green, '');

    messageA.e = Enum_.constant;
    expect(messageA.e, Enum_.constant);
    messageA.clearE();
    expect(messageA.e, Enum_.default_);
    messageA.clearE();
    messageA.e = Enum_.x1digit_;
    expect(messageA.e, Enum_.x1digit_);
    messageA.r.add(message);
    expect(messageA.r, [message]);
    messageA.setExtension(Leading_underscores_.q, Int64(100));
    expect(messageA.getExtension(Leading_underscores_.q), Int64(100));

    var a = A__()..foo = 'hi';
    expect(a.foo, 'hi');
  });
}
