Test of: Multiple list of primitive types (#1665)
* Adding tests for nested lists * Updated to Realm Sync 2.2.12.
This commit is contained in:
parent
dbd543d891
commit
a90e9ec45f
15
CHANGELOG.md
15
CHANGELOG.md
|
@ -1,3 +1,18 @@
|
||||||
|
X.Y.Z Release notes
|
||||||
|
=============================================================
|
||||||
|
### Breaking changes
|
||||||
|
* None.
|
||||||
|
|
||||||
|
### Enhancements
|
||||||
|
* None.
|
||||||
|
|
||||||
|
### Bug fixes
|
||||||
|
* [Object Server] A use-after-free bug was fixed which could cause arrays of primitives to behave unexpectedly.
|
||||||
|
|
||||||
|
### Internal
|
||||||
|
* Updated to Realm Sync 2.2.12.
|
||||||
|
|
||||||
|
|
||||||
2.2.9 Release notes (2018-2-19)
|
2.2.9 Release notes (2018-2-19)
|
||||||
=============================================================
|
=============================================================
|
||||||
### Breaking changes
|
### Breaking changes
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PACKAGE_NAME=realm-js
|
PACKAGE_NAME=realm-js
|
||||||
VERSION=2.2.9
|
VERSION=2.2.9
|
||||||
REALM_CORE_VERSION=5.1.2
|
REALM_CORE_VERSION=5.1.2
|
||||||
REALM_SYNC_VERSION=2.2.11
|
REALM_SYNC_VERSION=2.2.12
|
||||||
REALM_OBJECT_SERVER_VERSION=2.5.1
|
REALM_OBJECT_SERVER_VERSION=2.5.1
|
||||||
|
|
|
@ -44,7 +44,7 @@ var TESTS = {
|
||||||
MigrationTests: require('./migration-tests'),
|
MigrationTests: require('./migration-tests'),
|
||||||
EncryptionTests: require('./encryption-tests'),
|
EncryptionTests: require('./encryption-tests'),
|
||||||
ObjectIDTests: require('./object-id-tests'),
|
ObjectIDTests: require('./object-id-tests'),
|
||||||
// GarbageCollectionTests: require('./garbage-collection'),
|
// Garbagecollectiontests: require('./garbage-collection'),
|
||||||
};
|
};
|
||||||
|
|
||||||
// If sync is enabled, run the sync tests
|
// If sync is enabled, run the sync tests
|
||||||
|
|
|
@ -1223,4 +1223,83 @@ module.exports = {
|
||||||
TestCase.assertThrowsContaining(() => object.list.avg(),
|
TestCase.assertThrowsContaining(() => object.list.avg(),
|
||||||
"JS value must be of type 'string', got (undefined)");
|
"JS value must be of type 'string', got (undefined)");
|
||||||
},
|
},
|
||||||
|
|
||||||
|
testListNested: function() {
|
||||||
|
const realm = new Realm({schema: [schemas.ParentObject, schemas.NameObject]});
|
||||||
|
realm.write(() => {
|
||||||
|
realm.create('ParentObject', {
|
||||||
|
id: 1,
|
||||||
|
name: [
|
||||||
|
{ family: 'Larsen', given: ['Hans', 'Jørgen'], prefix: [] },
|
||||||
|
{ family: 'Hansen', given: ['Ib'], prefix: [] }
|
||||||
|
]
|
||||||
|
});
|
||||||
|
realm.create('ParentObject', {
|
||||||
|
id: 2,
|
||||||
|
name: [
|
||||||
|
{family: 'Petersen', given: ['Gurli', 'Margrete'], prefix: [] }
|
||||||
|
]
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
let objects = realm.objects('ParentObject');
|
||||||
|
TestCase.assertEqual(objects.length, 2);
|
||||||
|
TestCase.assertEqual(objects[0].name.length, 2);
|
||||||
|
TestCase.assertEqual(objects[0].name[0].given.length, 2);
|
||||||
|
TestCase.assertEqual(objects[0].name[0].prefix.length, 0);
|
||||||
|
TestCase.assertEqual(objects[0].name[0].given[0], 'Hans');
|
||||||
|
TestCase.assertEqual(objects[0].name[0].given[1], 'Jørgen')
|
||||||
|
TestCase.assertEqual(objects[0].name[1].given.length, 1);
|
||||||
|
TestCase.assertEqual(objects[0].name[1].given[0], 'Ib');
|
||||||
|
TestCase.assertEqual(objects[0].name[1].prefix.length, 0);
|
||||||
|
|
||||||
|
TestCase.assertEqual(objects[1].name.length, 1);
|
||||||
|
TestCase.assertEqual(objects[1].name[0].given.length, 2);
|
||||||
|
TestCase.assertEqual(objects[1].name[0].prefix.length, 0);
|
||||||
|
TestCase.assertEqual(objects[1].name[0].given[0], 'Gurli');
|
||||||
|
TestCase.assertEqual(objects[1].name[0].given[1], 'Margrete');
|
||||||
|
},
|
||||||
|
|
||||||
|
testListNestedFromJSON: function() {
|
||||||
|
let json = '{"id":1, "name": [{ "family": "Larsen", "given": ["Hans", "Jørgen"], "prefix": [] }, { "family": "Hansen", "given": ["Ib"], "prefix": [] }] }';
|
||||||
|
let parent = JSON.parse(json);
|
||||||
|
const realm = new Realm({schema: [schemas.ParentObject, schemas.NameObject]});
|
||||||
|
realm.write(() => {
|
||||||
|
realm.create('ParentObject', parent);
|
||||||
|
});
|
||||||
|
|
||||||
|
let objects = realm.objects('ParentObject');
|
||||||
|
TestCase.assertEqual(objects.length, 1);
|
||||||
|
TestCase.assertEqual(objects[0].name.length, 2);
|
||||||
|
TestCase.assertEqual(objects[0].name[0].given.length, 2);
|
||||||
|
TestCase.assertEqual(objects[0].name[0].prefix.length, 0);
|
||||||
|
TestCase.assertEqual(objects[0].name[0].given[0], 'Hans');
|
||||||
|
TestCase.assertEqual(objects[0].name[0].given[1], 'Jørgen');
|
||||||
|
|
||||||
|
TestCase.assertEqual(objects[0].name[1].given.length, 1);
|
||||||
|
TestCase.assertEqual(objects[0].name[1].prefix.length, 0);
|
||||||
|
TestCase.assertEqual(objects[0].name[1].given[0], 'Ib');
|
||||||
|
},
|
||||||
|
|
||||||
|
testMultipleLists: function() {
|
||||||
|
const realm = new Realm({schema: [schemas.MultiListObject]});
|
||||||
|
realm.write(() => {
|
||||||
|
realm.create('MultiListObject', { id: 0, list1: ["Hello"], list2: ["World"] });
|
||||||
|
realm.create('MultiListObject', { id: 1, list1: ["Foo"], list2: ["Bar"] });
|
||||||
|
});
|
||||||
|
|
||||||
|
let objects = realm.objects('MultiListObject');
|
||||||
|
TestCase.assertEqual(objects.length, 2);
|
||||||
|
TestCase.assertEqual(objects[0].id, 0);
|
||||||
|
TestCase.assertEqual(objects[0].list1.length, 1);
|
||||||
|
TestCase.assertEqual(objects[0].list1[0], "Hello");
|
||||||
|
TestCase.assertEqual(objects[0].list2.length, 1);
|
||||||
|
TestCase.assertEqual(objects[0].list2[0], "World");
|
||||||
|
|
||||||
|
TestCase.assertEqual(objects[1].id, 1);
|
||||||
|
TestCase.assertEqual(objects[1].list1.length, 1);
|
||||||
|
TestCase.assertEqual(objects[1].list1[0], "Foo");
|
||||||
|
TestCase.assertEqual(objects[1].list2.length, 1);
|
||||||
|
TestCase.assertEqual(objects[1].list2[0], "Bar");
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -0,0 +1,67 @@
|
||||||
|
/*
|
||||||
|
This script creates new nested objects into a new Realm.
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
console.log("nested-list-helper started");
|
||||||
|
const username = process.argv[3];
|
||||||
|
const realmName = process.argv[4];
|
||||||
|
const realmModule = process.argv[5];
|
||||||
|
|
||||||
|
const Realm = require(realmModule);
|
||||||
|
let schemas = require(process.argv[2]);
|
||||||
|
|
||||||
|
function createObjects(user) {
|
||||||
|
const config = {
|
||||||
|
sync: { user,
|
||||||
|
url: `realm://localhost:9080/~/${realmName}`,
|
||||||
|
error: err => console.log(err)
|
||||||
|
},
|
||||||
|
schema: [schemas.ParentObject, schemas.NameObject],
|
||||||
|
};
|
||||||
|
|
||||||
|
const realm = new Realm(config);
|
||||||
|
|
||||||
|
realm.write(() => {
|
||||||
|
realm.create('ParentObject', {
|
||||||
|
id: 1,
|
||||||
|
name: [
|
||||||
|
{ family: 'Larsen', given: ['Hans', 'Jørgen'], prefix: [] },
|
||||||
|
{ family: 'Hansen', given: ['Ib'], prefix: [] }
|
||||||
|
]
|
||||||
|
});
|
||||||
|
realm.create('ParentObject', {
|
||||||
|
id: 2,
|
||||||
|
name: [
|
||||||
|
{family: 'Petersen', given: ['Gurli', 'Margrete'], prefix: [] }
|
||||||
|
]
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log("JSON: " + JSON.stringify(realm.objects('ParentObject')));
|
||||||
|
|
||||||
|
let session = realm.syncSession;
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
let callback = (transferred, total) => {
|
||||||
|
if (transferred === total) {
|
||||||
|
session.removeProgressNotification(callback);
|
||||||
|
resolve(realm);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
session.addProgressNotification('upload', 'forCurrentlyOutstandingWork', callback);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
let registrationError;
|
||||||
|
Realm.Sync.User.register('http://localhost:9080', username, 'password')
|
||||||
|
.catch((error) => {
|
||||||
|
registrationError = JSON.stringify(error);
|
||||||
|
return Realm.Sync.User.login('http://localhost:9080', username, 'password')
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
const loginError = JSON.stringify(error);
|
||||||
|
console.error(`nested-list-helper failed:\n User.register() error:\n${registrationError}\n User.login() error:\n${registrationError}`);
|
||||||
|
process.exit(-2);
|
||||||
|
})
|
||||||
|
.then((user) => createObjects(user))
|
||||||
|
.then(() => process.exit(0));
|
|
@ -280,4 +280,30 @@ exports.LinkingObjectsObject = {
|
||||||
links: 'LinkingObjectsObject[]',
|
links: 'LinkingObjectsObject[]',
|
||||||
linkingObjects: {type: 'linkingObjects', objectType: 'LinkingObjectsObject', property: 'links'}
|
linkingObjects: {type: 'linkingObjects', objectType: 'LinkingObjectsObject', property: 'links'}
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
|
exports.ParentObject = {
|
||||||
|
name: 'ParentObject',
|
||||||
|
properties: {
|
||||||
|
id: 'int',
|
||||||
|
name: 'NameObject[]'
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.NameObject = {
|
||||||
|
name: 'NameObject',
|
||||||
|
properties: {
|
||||||
|
family: 'string',
|
||||||
|
given: 'string[]',
|
||||||
|
prefix: 'string[]'
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.MultiListObject = {
|
||||||
|
name: 'MultiListObject',
|
||||||
|
properties: {
|
||||||
|
'id': 'int',
|
||||||
|
'list1': 'string[]',
|
||||||
|
'list2': 'string[]'
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
|
|
||||||
const Realm = require('realm');
|
const Realm = require('realm');
|
||||||
const TestCase = require('./asserts');
|
const TestCase = require('./asserts');
|
||||||
|
let schemas = require('./schemas');
|
||||||
|
|
||||||
const isNodeProccess = (typeof process === 'object' && process + '' === '[object process]');
|
const isNodeProccess = (typeof process === 'object' && process + '' === '[object process]');
|
||||||
|
|
||||||
|
@ -402,6 +403,49 @@ module.exports = {
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
testListNestedSync() {
|
||||||
|
if (!isNodeProccess) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const username = uuid();
|
||||||
|
const realmName = uuid();
|
||||||
|
|
||||||
|
return runOutOfProcess(__dirname + '/nested-list-helper.js', __dirname + '/schemas.js', username, realmName, REALM_MODULE_PATH)
|
||||||
|
.then(() => {
|
||||||
|
return Realm.Sync.User.login('http://localhost:9080', username, 'password').then(user => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
let config = {
|
||||||
|
schema: [schemas.ParentObject, schemas.NameObject],
|
||||||
|
sync: { user, url: `realm://localhost:9080/~/${realmName}` }
|
||||||
|
};
|
||||||
|
Realm.open(config).then(realm => {
|
||||||
|
let objects = realm.objects('ParentObject');
|
||||||
|
|
||||||
|
let json = JSON.stringify(objects);
|
||||||
|
TestCase.assertEqual(json, '{"0":{"id":1,"name":{"0":{"family":"Larsen","given":{"0":"Hans","1":"Jørgen"},"prefix":{}},"1":{"family":"Hansen","given":{"0":"Ib"},"prefix":{}}}},"1":{"id":2,"name":{"0":{"family":"Petersen","given":{"0":"Gurli","1":"Margrete"},"prefix":{}}}}}');
|
||||||
|
TestCase.assertEqual(objects.length, 2);
|
||||||
|
TestCase.assertEqual(objects[0].name.length, 2);
|
||||||
|
TestCase.assertEqual(objects[0].name[0].given.length, 2);
|
||||||
|
TestCase.assertEqual(objects[0].name[0].prefix.length, 0);
|
||||||
|
TestCase.assertEqual(objects[0].name[0].given[0], 'Hans');
|
||||||
|
TestCase.assertEqual(objects[0].name[0].given[1], 'Jørgen')
|
||||||
|
TestCase.assertEqual(objects[0].name[1].given.length, 1);
|
||||||
|
TestCase.assertEqual(objects[0].name[1].given[0], 'Ib');
|
||||||
|
TestCase.assertEqual(objects[0].name[1].prefix.length, 0);
|
||||||
|
|
||||||
|
TestCase.assertEqual(objects[1].name.length, 1);
|
||||||
|
TestCase.assertEqual(objects[1].name[0].given.length, 2);
|
||||||
|
TestCase.assertEqual(objects[1].name[0].prefix.length, 0);
|
||||||
|
TestCase.assertEqual(objects[1].name[0].given[0], 'Gurli');
|
||||||
|
TestCase.assertEqual(objects[1].name[0].given[1], 'Margrete');
|
||||||
|
resolve();
|
||||||
|
}).catch(() => reject());
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
testIncompatibleSyncedRealmOpen() {
|
testIncompatibleSyncedRealmOpen() {
|
||||||
let realm = "sync-v1.realm";
|
let realm = "sync-v1.realm";
|
||||||
if (isNodeProccess) {
|
if (isNodeProccess) {
|
||||||
|
|
Loading…
Reference in New Issue