Chromium Code Reviews| 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..366fce76a93918f2db421da66f921d0e32a69d59 |
| --- /dev/null |
| +++ b/test/map_mixin_test.dart |
| @@ -0,0 +1,109 @@ |
| +#!/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 'package:protobuf/protobuf.dart' show GeneratedMessage, PbMapMixin, BuilderInfo; |
| +import 'package:unittest/unittest.dart' show test, expect, predicate, same; |
| + |
| +// A minimal protobuf implementation compatible with PbMapMixin. |
| +class Rec extends GeneratedMessage with 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 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)); |
| + }); |
|
Søren Gjesse
2015/06/22 07:25:01
Test iterators as well, and test that concurrent m
skybrian
2015/06/23 02:35:34
Obsolete because this mixin is "inheriting" MapMix
|
| +} |