| Index: pkg/appengine/test/dart-python--datastore-compatibility/dart/bin/main.dart
|
| diff --git a/pkg/appengine/test/dart-python--datastore-compatibility/dart/bin/main.dart b/pkg/appengine/test/dart-python--datastore-compatibility/dart/bin/main.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..8a9a9525d29d5f033c8369d8549f87cbd037f38b
|
| --- /dev/null
|
| +++ b/pkg/appengine/test/dart-python--datastore-compatibility/dart/bin/main.dart
|
| @@ -0,0 +1,135 @@
|
| +// Copyright (c) 2014, 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 'dart:io';
|
| +import 'dart:convert';
|
| +
|
| +import 'package:unittest/unittest.dart';
|
| +
|
| +import 'package:appengine/src/protobuf_api/rpc/rpc_service_remote_api.dart';
|
| +import 'package:appengine/src/appengine_context.dart';
|
| +import 'package:appengine/src/api_impl/raw_datastore_v3_impl.dart';
|
| +
|
| +import 'package:gcloud/db.dart';
|
| +import 'package:gcloud/db.dart' as db;
|
| +
|
| +
|
| +class AllDataTypesModelMixin {
|
| + @BoolProperty()
|
| + bool boolProp;
|
| +
|
| + @IntProperty()
|
| + int intProp;
|
| +
|
| + @StringProperty()
|
| + String stringProp;
|
| +
|
| + @ModelKeyProperty()
|
| + Key keyProp;
|
| +
|
| + @BlobProperty()
|
| + List<int> blobProp;
|
| +
|
| + @DateTimeProperty()
|
| + DateTime dateProp;
|
| +
|
| + @StringListProperty()
|
| + List<String> stringListProp;
|
| +}
|
| +
|
| +@Kind()
|
| +class NormalModel extends Model with AllDataTypesModelMixin { }
|
| +
|
| +@Kind()
|
| +class ExpandoModel extends db.ExpandoModel with AllDataTypesModelMixin { }
|
| +
|
| +
|
| +final DateTime EndOfYear = new DateTime.utc(2014, 12, 31);
|
| +customDate(int i) => EndOfYear.add(new Duration(hours: i));
|
| +
|
| +void fillData(DatastoreDB db, AllDataTypesModelMixin model, int i) {
|
| + model.boolProp = i % 2 == 0;
|
| + model.intProp = i + 42;
|
| + model.stringProp = 'foobar $i';
|
| + model.keyProp = db.emptyKey.append(NormalModel, id: 10 + i);
|
| + model.blobProp = [1, 2, 3, 4]..addAll(UTF8.encode('$i'));
|
| + model.dateProp = customDate(i);
|
| + model.stringListProp = ['a$i', 'b$i', 'c$i'];
|
| +}
|
| +
|
| +void verifyData(DatastoreDB db, AllDataTypesModelMixin model, int i) {
|
| + expect(model.boolProp, equals(i % 2 == 0));
|
| + expect(model.intProp, equals(i + 42));
|
| + expect(model.stringProp, equals('foobar $i'));
|
| + expect(model.keyProp, equals(db.emptyKey.append(NormalModel, id: 10 + i)));
|
| + expect(model.blobProp, equals(
|
| + [1, 2, 3, 4]..addAll(UTF8.encode('$i'))));
|
| + expect(model.dateProp, equals(customDate(i)));
|
| + expect(model.stringListProp, equals(['a$i', 'b$i', 'c$i']));
|
| +}
|
| +
|
| +runTests(bool writingMode, DatastoreDB db) {
|
| + var key = db.emptyKey.append(NormalModel, id: 99);
|
| + var ekey = key.append(ExpandoModel, id: 102);
|
| +
|
| + if (writingMode) {
|
| + test('writing-test', () {
|
| + var normalObj = new NormalModel();
|
| + var em = new ExpandoModel();
|
| +
|
| + em.parentKey = key;
|
| +
|
| + normalObj.id = 99;
|
| + em.id = 102;
|
| +
|
| + fillData(db, normalObj, 1);
|
| + fillData(db, em, 5);
|
| +
|
| + db.commit(inserts: [normalObj, em]).then(expectAsync((_) {
|
| + print('done');
|
| + }));
|
| + });
|
| + }
|
| +
|
| + if (!writingMode) {
|
| + test('reading-test', () {
|
| + db.lookup([key, ekey])
|
| + .then(expectAsync((List<Model> models) {
|
| + expect(models, hasLength(2));
|
| +
|
| + NormalModel model = models[0];
|
| + ExpandoModel emodel = models[1];
|
| +
|
| + expect(model, isNotNull);
|
| + expect(emodel, isNotNull);
|
| +
|
| + expect(model.id, equals(99));
|
| + expect(emodel.id, equals(102));
|
| +
|
| + expect(model.parentKey, equals(db.emptyKey));
|
| + expect(emodel.parentKey, equals(key));
|
| +
|
| + verifyData(db, model, 1);
|
| + verifyData(db, emodel, 5);
|
| + }));
|
| + });
|
| + }
|
| +}
|
| +
|
| +void main(List<String> arguments) {
|
| + if (arguments.length != 1 || !['read', 'write'].contains(arguments[0])) {
|
| + print("Usage: main.dart <read|write>");
|
| + exit(1);
|
| + }
|
| + var writingMode = arguments[0] == 'write';
|
| +
|
| + var rpcService = new RPCServiceRemoteApi('localhost', 4444);
|
| + var appengineContext = new AppengineContext(
|
| + 'dev', 'test-application', 'test-version', null, null, null);
|
| + var datastore =
|
| + new DatastoreV3RpcImpl(rpcService, appengineContext, '<invalid-ticket>');
|
| +
|
| + runTests(writingMode, new DatastoreDB(datastore));
|
| +}
|
| +
|
|
|