blob: 6325a0f2a3d6c05dfbbc2ebde2b87e1555cf272a [file] [log] [blame]
#!/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.
library readonly_message_test;
import 'package:test/test.dart' show test, expect, throwsA, predicate;
import 'package:protobuf/protobuf.dart'
show GeneratedMessage, ReadonlyMessageMixin, BuilderInfo;
throwsError(Type expectedType, String expectedMessage) =>
throwsA(predicate((x) {
expect(x.runtimeType, expectedType);
expect(x.message, expectedMessage);
return true;
}));
class Rec extends GeneratedMessage with ReadonlyMessageMixin {
@override
BuilderInfo info_ = new BuilderInfo("rec");
@override
clone() => throw new UnimplementedError();
}
main() {
test("can write a read-only message", () {
expect(new Rec().writeToBuffer(), []);
expect(new Rec().writeToJson(), "{}");
});
test("can't merge to a read-only message", () {
expect(
() => new Rec().mergeFromJson("{}"),
throwsError(UnsupportedError,
"attempted to call mergeFromJson on a read-only message (rec)"));
});
test("can't set a field on a read-only message", () {
expect(
() => new Rec().setField(123, 456),
throwsError(UnsupportedError,
"attempted to call setField on a read-only message (rec)"));
});
test("can't clear a read-only message", () {
expect(
() => new Rec().clear(),
throwsError(UnsupportedError,
"attempted to call clear on a read-only message (rec)"));
});
test("can't modify unknown fields on a read-only message", () {
expect(
() => new Rec().unknownFields.clear(),
throwsError(UnsupportedError,
"attempted to call clear on a read-only UnknownFieldSet"));
});
}