| Index: test/map_mixin_test.dart
|
| diff --git a/test/map_mixin_test.dart b/test/map_mixin_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..b0f9248c963e64c0ff56b7d233eb7b8f44941edc
|
| --- /dev/null
|
| +++ b/test/map_mixin_test.dart
|
| @@ -0,0 +1,127 @@
|
| +#!/usr/bin/env dart
|
| +// Copyright (c) 2015, 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.
|
| +
|
| +// Unit tests for PbMapMixin.
|
| +// There are more tests in the dart-protoc-plugin package.
|
| +library map_mixin_test;
|
| +
|
| +import 'dart:collection' show MapMixin;
|
| +
|
| +import 'package:protobuf/protobuf.dart'
|
| + show GeneratedMessage, PbMapMixin, BuilderInfo;
|
| +import 'package:protobuf/src/protobuf/mixins/map_mixin.dart';
|
| +import 'package:unittest/unittest.dart' show test, expect, predicate, same;
|
| +
|
| +// A minimal protobuf implementation compatible with PbMapMixin.
|
| +class Rec extends GeneratedMessage with MapMixin, PbMapMixin {
|
| + int val = 0;
|
| + String str = "";
|
| + Rec child;
|
| +
|
| + @override
|
| + BuilderInfo info_ = new BuilderInfo("rec")
|
| + ..a(1, "val", null)
|
| + ..a(2, "str", null)
|
| + ..a(3, "child", null);
|
| +
|
| + @override
|
| + void clear() {
|
| + val = 0;
|
| + str = "";
|
| + child = null;
|
| + }
|
| +
|
| + @override
|
| + int getTagNumber(String fieldName) {
|
| + switch (fieldName) {
|
| + case 'val':
|
| + return 1;
|
| + case 'str':
|
| + return 2;
|
| + case 'child':
|
| + return 3;
|
| + default:
|
| + return null;
|
| + }
|
| + }
|
| +
|
| + @override
|
| + getField(int tagNumber) {
|
| + switch (tagNumber) {
|
| + case 1:
|
| + return val;
|
| + case 2:
|
| + return str;
|
| + case 3:
|
| + // lazy initializaton
|
| + if (child == null) {
|
| + child = new Rec();
|
| + }
|
| + return child;
|
| + default:
|
| + return null;
|
| + }
|
| + }
|
| +
|
| + @override
|
| + void setField(int tagNumber, var value, [int fieldType = null]) {
|
| + switch (tagNumber) {
|
| + case 1:
|
| + val = value;
|
| + return;
|
| + case 2:
|
| + str = value;
|
| + return;
|
| + case 3:
|
| + child = value;
|
| + return;
|
| + default:
|
| + throw new ArgumentError("Rec doesn't support tag: ${tagNumber}");
|
| + }
|
| + }
|
| +
|
| + @override
|
| + String toString() {
|
| + return "Rec(${val}, \"${str}\", ${child})";
|
| + }
|
| +}
|
| +
|
| +main() {
|
| + test('PbMapMixin methods return default field values', () {
|
| + var r = new Rec();
|
| +
|
| + expect(r.isEmpty, false);
|
| + expect(r.isNotEmpty, true);
|
| + expect(r.keys, ["val", "str", "child"]);
|
| +
|
| + expect(r["val"], 0);
|
| + expect(r["str"], "");
|
| + expect(r["child"].runtimeType, Rec);
|
| + expect(r["child"].toString(), 'Rec(0, "", null)');
|
| +
|
| + var v = r.values;
|
| + expect(v.length, 3);
|
| + expect(v.first, 0);
|
| + expect(v.toList()[1], "");
|
| + expect(v.last.toString(), 'Rec(0, "", null)');
|
| + });
|
| +
|
| + test('operator []= sets record fields', () {
|
| + var r = new Rec();
|
| +
|
| + r["val"] = 123;
|
| + expect(r.val, 123);
|
| + expect(r["val"], 123);
|
| +
|
| + r["str"] = "hello";
|
| + expect(r.str, "hello");
|
| + expect(r["str"], "hello");
|
| +
|
| + var child = new Rec();
|
| + r["child"] = child;
|
| + expect(r.child, same(child));
|
| + expect(r["child"], same(child));
|
| + });
|
| +}
|
|
|