Add tests for Android library
This commit is contained in:
parent
08387d4754
commit
a4fa7fc385
4 changed files with 2776 additions and 0 deletions
2021
sdks/android/Mentat/library/src/androidTest/assets/all_seattle.edn
Normal file
2021
sdks/android/Mentat/library/src/androidTest/assets/all_seattle.edn
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1 @@
|
||||||
|
[
{:db/ident :community/name
:db/valueType :db.type/string
:db/cardinality :db.cardinality/one
:db/index true
:db/fulltext true
:db/doc "A community's name"}
{:db/ident :community/url
:db/valueType :db.type/string
:db/cardinality :db.cardinality/one
:db/doc "A community's url"}
{:db/ident :community/neighborhood
:db/valueType :db.type/ref
:db/cardinality :db.cardinality/one
:db/doc "A community's neighborhood"}
{:db/ident :community/category
:db/valueType :db.type/string
:db/cardinality :db.cardinality/many
:db/index true
:db/fulltext true
:db/doc "All community categories"}
{:db/ident :community/orgtype
:db/valueType :db.type/ref
:db/cardinality :db.cardinality/one
:db/doc "A community orgtype enum value"}
{:db/ident :community/type
:db/valueType :db.type/ref
:db/cardinality :db.cardinality/many
:db/doc "Community type enum values"}
{:db/ident :community.orgtype/community}
{:db/ident :community.orgtype/commercial}
{:db/ident :community.orgtype/nonprofit}
{:db/ident :community.orgtype/personal}
{:db/ident :community.type/email-list}
{:db/ident :community.type/twitter}
{:db/ident :community.type/facebook-page}
{:db/ident :community.type/blog}
{:db/ident :community.type/website}
{:db/ident :community.type/wiki}
{:db/ident :community.type/myspace}
{:db/ident :community.type/ning}
;; district/region enum values
{:db/ident :region/n}
{:db/ident :region/ne}
{:db/ident :region/e}
{:db/ident :region/se}
{:db/ident :region/s}
{:db/ident :region/sw}
{:db/ident :region/w}
{:db/ident :region/nw}
{:db/ident :neighborhood/name
:db/valueType :db.type/string
:db/cardinality :db.cardinality/one
:db/index true
:db/unique :db.unique/identity
:db/doc "A unique neighborhood name (upsertable)"}
{:db/ident :neighborhood/district
:db/valueType :db.type/ref
:db/cardinality :db.cardinality/one
:db/doc "A neighborhood's district"}
;; district
{:db/ident :district/name
:db/valueType :db.type/string
:db/cardinality :db.cardinality/one
:db/index true
:db/unique :db.unique/identity
:db/doc "A unique district name (upsertable)"}
{:db/ident :district/region
:db/valueType :db.type/ref
:db/cardinality :db.cardinality/one
:db/doc "A district region enum value"}
]
|
|
@ -0,0 +1,27 @@
|
||||||
|
/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
|
||||||
|
* Copyright 2018 Mozilla
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use
|
||||||
|
* this file except in compliance with the License. You may obtain a copy of the
|
||||||
|
* License at http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* Unless required by applicable law or agreed to in writing, software distributed
|
||||||
|
* under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
||||||
|
* CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations under the License. */
|
||||||
|
|
||||||
|
package com.mozilla.mentat;
|
||||||
|
|
||||||
|
import java.util.EventListener;
|
||||||
|
|
||||||
|
interface ExpectationEventListener extends EventListener {
|
||||||
|
public void fulfill();
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Expectation implements ExpectationEventListener {
|
||||||
|
public boolean isFulfilled = false;
|
||||||
|
public void fulfill() {
|
||||||
|
this.isFulfilled = true;
|
||||||
|
synchronized (this) {
|
||||||
|
notifyAll( );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,727 @@
|
||||||
|
/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
|
||||||
|
* Copyright 2018 Mozilla
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use
|
||||||
|
* this file except in compliance with the License. You may obtain a copy of the
|
||||||
|
* License at http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* Unless required by applicable law or agreed to in writing, software distributed
|
||||||
|
* under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
||||||
|
* CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations under the License. */
|
||||||
|
|
||||||
|
package com.mozilla.mentat;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.res.AssetManager;
|
||||||
|
import android.support.test.InstrumentationRegistry;
|
||||||
|
import android.support.test.runner.AndroidJUnit4;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
|
import java.text.DateFormat;
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Calendar;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instrumentation test, which will execute on an Android device.
|
||||||
|
*
|
||||||
|
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||||
|
*/
|
||||||
|
@RunWith(AndroidJUnit4.class)
|
||||||
|
public class FFIIntegrationTest {
|
||||||
|
|
||||||
|
Mentat mentat = null;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void openInMemoryStoreSucceeds() throws Exception {
|
||||||
|
Mentat mentat = new Mentat();
|
||||||
|
assertNotNull(mentat);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void openStoreInLocationSucceeds() throws Exception {
|
||||||
|
Context context = InstrumentationRegistry.getTargetContext();
|
||||||
|
String path = context.getDatabasePath("test.db").getAbsolutePath();
|
||||||
|
Mentat mentat = new Mentat(path);
|
||||||
|
assertNotNull(mentat);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String readFile(String fileName) {
|
||||||
|
Context testContext = InstrumentationRegistry.getInstrumentation().getContext();
|
||||||
|
AssetManager assetManager = testContext.getAssets();
|
||||||
|
try {
|
||||||
|
InputStream inputStream = assetManager.open(fileName);
|
||||||
|
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
|
||||||
|
StringBuilder out = new StringBuilder();
|
||||||
|
String line;
|
||||||
|
while ((line = reader.readLine()) != null) {
|
||||||
|
out.append(line + "\n");
|
||||||
|
}
|
||||||
|
return out.toString();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TxReport transactCitiesSchema(Mentat mentat) {
|
||||||
|
String citiesSchema = this.readFile("cities.schema");
|
||||||
|
return mentat.transact(citiesSchema);
|
||||||
|
}
|
||||||
|
|
||||||
|
public TxReport transactSeattleData(Mentat mentat) {
|
||||||
|
String seattleData = this.readFile("all_seattle.edn");
|
||||||
|
return mentat.transact(seattleData);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Mentat openAndInitializeCitiesStore() {
|
||||||
|
if (this.mentat == null) {
|
||||||
|
this.mentat = new Mentat();
|
||||||
|
this.transactCitiesSchema(mentat);
|
||||||
|
this.transactSeattleData(mentat);
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.mentat;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TxReport populateWithTypesSchema(Mentat mentat) {
|
||||||
|
String schema = "[\n" +
|
||||||
|
" [:db/add \"b\" :db/ident :foo/boolean]\n" +
|
||||||
|
" [:db/add \"b\" :db/valueType :db.type/boolean]\n" +
|
||||||
|
" [:db/add \"b\" :db/cardinality :db.cardinality/one]\n" +
|
||||||
|
" [:db/add \"l\" :db/ident :foo/long]\n" +
|
||||||
|
" [:db/add \"l\" :db/valueType :db.type/long]\n" +
|
||||||
|
" [:db/add \"l\" :db/cardinality :db.cardinality/one]\n" +
|
||||||
|
" [:db/add \"r\" :db/ident :foo/ref]\n" +
|
||||||
|
" [:db/add \"r\" :db/valueType :db.type/ref]\n" +
|
||||||
|
" [:db/add \"r\" :db/cardinality :db.cardinality/one]\n" +
|
||||||
|
" [:db/add \"i\" :db/ident :foo/instant]\n" +
|
||||||
|
" [:db/add \"i\" :db/valueType :db.type/instant]\n" +
|
||||||
|
" [:db/add \"i\" :db/cardinality :db.cardinality/one]\n" +
|
||||||
|
" [:db/add \"d\" :db/ident :foo/double]\n" +
|
||||||
|
" [:db/add \"d\" :db/valueType :db.type/double]\n" +
|
||||||
|
" [:db/add \"d\" :db/cardinality :db.cardinality/one]\n" +
|
||||||
|
" [:db/add \"s\" :db/ident :foo/string]\n" +
|
||||||
|
" [:db/add \"s\" :db/valueType :db.type/string]\n" +
|
||||||
|
" [:db/add \"s\" :db/cardinality :db.cardinality/one]\n" +
|
||||||
|
" [:db/add \"k\" :db/ident :foo/keyword]\n" +
|
||||||
|
" [:db/add \"k\" :db/valueType :db.type/keyword]\n" +
|
||||||
|
" [:db/add \"k\" :db/cardinality :db.cardinality/one]\n" +
|
||||||
|
" [:db/add \"u\" :db/ident :foo/uuid]\n" +
|
||||||
|
" [:db/add \"u\" :db/valueType :db.type/uuid]\n" +
|
||||||
|
" [:db/add \"u\" :db/cardinality :db.cardinality/one]\n" +
|
||||||
|
" ]";
|
||||||
|
TxReport report = mentat.transact(schema);
|
||||||
|
Long stringEntid = report.getEntidForTempId("s");
|
||||||
|
|
||||||
|
String data = "[\n" +
|
||||||
|
" [:db/add \"a\" :foo/boolean true]\n" +
|
||||||
|
" [:db/add \"a\" :foo/long 25]\n" +
|
||||||
|
" [:db/add \"a\" :foo/instant #inst \"2017-01-01T11:00:00.000Z\"]\n" +
|
||||||
|
" [:db/add \"a\" :foo/double 11.23]\n" +
|
||||||
|
" [:db/add \"a\" :foo/string \"The higher we soar the smaller we appear to those who cannot fly.\"]\n" +
|
||||||
|
" [:db/add \"a\" :foo/keyword :foo/string]\n" +
|
||||||
|
" [:db/add \"a\" :foo/uuid #uuid \"550e8400-e29b-41d4-a716-446655440000\"]\n" +
|
||||||
|
" [:db/add \"b\" :foo/boolean false]\n" +
|
||||||
|
" [:db/add \"b\" :foo/ref "+ stringEntid +"]\n" +
|
||||||
|
" [:db/add \"b\" :foo/long 50]\n" +
|
||||||
|
" [:db/add \"b\" :foo/instant #inst \"2018-01-01T11:00:00.000Z\"]\n" +
|
||||||
|
" [:db/add \"b\" :foo/double 22.46]\n" +
|
||||||
|
" [:db/add \"b\" :foo/string \"Silence is worse; all truths that are kept silent become poisonous.\"]\n" +
|
||||||
|
" [:db/add \"b\" :foo/uuid #uuid \"4cb3f828-752d-497a-90c9-b1fd516d5644\"]\n" +
|
||||||
|
" ]";
|
||||||
|
return mentat.transact(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void transactingVocabularySucceeds() {
|
||||||
|
Mentat mentat = new Mentat();
|
||||||
|
TxReport schemaReport = this.transactCitiesSchema(mentat);
|
||||||
|
assertNotNull(schemaReport);
|
||||||
|
assertTrue(schemaReport.getTxId() > 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void transactingEntitiesSucceeds() {
|
||||||
|
Mentat mentat = new Mentat();
|
||||||
|
this.transactCitiesSchema(mentat);
|
||||||
|
TxReport dataReport = this.transactSeattleData(mentat);
|
||||||
|
assertNotNull(dataReport);
|
||||||
|
assertTrue(dataReport.getTxId() > 0);
|
||||||
|
Long entid = dataReport.getEntidForTempId("a17592186045605");
|
||||||
|
assertEquals(65733, entid.longValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void runScalarSucceeds() throws InterruptedException {
|
||||||
|
Mentat mentat = openAndInitializeCitiesStore();
|
||||||
|
String query = "[:find ?n . :in ?name :where [(fulltext $ :community/name ?name) [[?e ?n]]]]";
|
||||||
|
final Expectation expectation = new Expectation();
|
||||||
|
mentat.query(query).bindString("?name", "Wallingford").runScalar(new ScalarResultHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleValue(TypedValue value) {
|
||||||
|
assertNotNull(value);
|
||||||
|
assertEquals("KOMO Communities - Wallingford", value.asString());
|
||||||
|
expectation.fulfill();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
synchronized (expectation) {
|
||||||
|
expectation.wait(1000);
|
||||||
|
}
|
||||||
|
assertTrue(expectation.isFulfilled);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void runCollSucceeds() throws InterruptedException {
|
||||||
|
Mentat mentat = openAndInitializeCitiesStore();
|
||||||
|
String query = "[:find [?when ...] :where [_ :db/txInstant ?when] :order (asc ?when)]";
|
||||||
|
final Expectation expectation = new Expectation();
|
||||||
|
mentat.query(query).runColl(new CollResultHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleList(CollResult list) {
|
||||||
|
assertNotNull(list);
|
||||||
|
for (int i = 0; i < 3; ++i) {
|
||||||
|
assertNotNull(list.asDate(i));
|
||||||
|
}
|
||||||
|
expectation.fulfill();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
synchronized (expectation) {
|
||||||
|
expectation.wait(1000);
|
||||||
|
}
|
||||||
|
assertTrue(expectation.isFulfilled);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void runCollResultIteratorSucceeds() throws InterruptedException {
|
||||||
|
Mentat mentat = openAndInitializeCitiesStore();
|
||||||
|
String query = "[:find [?when ...] :where [_ :db/txInstant ?when] :order (asc ?when)]";
|
||||||
|
final Expectation expectation = new Expectation();
|
||||||
|
mentat.query(query).runColl(new CollResultHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleList(CollResult list) {
|
||||||
|
assertNotNull(list);
|
||||||
|
|
||||||
|
for(TypedValue value: list) {
|
||||||
|
assertNotNull(value.asDate());
|
||||||
|
}
|
||||||
|
expectation.fulfill();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
synchronized (expectation) {
|
||||||
|
expectation.wait(1000);
|
||||||
|
}
|
||||||
|
assertTrue(expectation.isFulfilled);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void runTupleSucceeds() throws InterruptedException {
|
||||||
|
Mentat mentat = openAndInitializeCitiesStore();
|
||||||
|
String query = "[:find [?name ?cat]\n" +
|
||||||
|
" :where\n" +
|
||||||
|
" [?c :community/name ?name]\n" +
|
||||||
|
" [?c :community/type :community.type/website]\n" +
|
||||||
|
" [(fulltext $ :community/category \"food\") [[?c ?cat]]]]";
|
||||||
|
final Expectation expectation = new Expectation();
|
||||||
|
mentat.query(query).runTuple(new TupleResultHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleRow(TupleResult row) {
|
||||||
|
assertNotNull(row);
|
||||||
|
String name = row.asString(0);
|
||||||
|
String category = row.asString(1);
|
||||||
|
assert(name == "Community Harvest of Southwest Seattle");
|
||||||
|
assert(category == "sustainable food");
|
||||||
|
expectation.fulfill();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
synchronized (expectation) {
|
||||||
|
expectation.wait(1000);
|
||||||
|
}
|
||||||
|
assertTrue(expectation.isFulfilled);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void runRelIteratorSucceeds() throws InterruptedException {
|
||||||
|
Mentat mentat = openAndInitializeCitiesStore();
|
||||||
|
String query = "[:find ?name ?cat\n" +
|
||||||
|
" :where\n" +
|
||||||
|
" [?c :community/name ?name]\n" +
|
||||||
|
" [?c :community/type :community.type/website]\n" +
|
||||||
|
" [(fulltext $ :community/category \"food\") [[?c ?cat]]]]";
|
||||||
|
|
||||||
|
final LinkedHashMap expectedResults = new LinkedHashMap<String, String>();
|
||||||
|
expectedResults.put("InBallard", "food");
|
||||||
|
expectedResults.put("Seattle Chinatown Guide", "food");
|
||||||
|
expectedResults.put("Community Harvest of Southwest Seattle", "sustainable food");
|
||||||
|
expectedResults.put("University District Food Bank", "food bank");
|
||||||
|
final Expectation expectation = new Expectation();
|
||||||
|
mentat.query(query).run(new RelResultHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleRows(RelResult rows) {
|
||||||
|
assertNotNull(rows);
|
||||||
|
int index = 0;
|
||||||
|
for (TupleResult row: rows) {
|
||||||
|
String name = row.asString(0);
|
||||||
|
assertNotNull(name);
|
||||||
|
String category = row.asString(1);
|
||||||
|
assertNotNull(category);
|
||||||
|
String expectedCategory = expectedResults.get(name).toString();
|
||||||
|
assertNotNull(expectedCategory);
|
||||||
|
assertEquals(expectedCategory, category);
|
||||||
|
++index;
|
||||||
|
}
|
||||||
|
assertEquals(expectedResults.size(), index);
|
||||||
|
expectation.fulfill();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
synchronized (expectation) {
|
||||||
|
expectation.wait(1000);
|
||||||
|
}
|
||||||
|
assertTrue(expectation.isFulfilled);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void runRelSucceeds() throws InterruptedException {
|
||||||
|
Mentat mentat = openAndInitializeCitiesStore();
|
||||||
|
String query = "[:find ?name ?cat\n" +
|
||||||
|
" :where\n" +
|
||||||
|
" [?c :community/name ?name]\n" +
|
||||||
|
" [?c :community/type :community.type/website]\n" +
|
||||||
|
" [(fulltext $ :community/category \"food\") [[?c ?cat]]]]";
|
||||||
|
|
||||||
|
final LinkedHashMap expectedResults = new LinkedHashMap<String, String>();
|
||||||
|
expectedResults.put("InBallard", "food");
|
||||||
|
expectedResults.put("Seattle Chinatown Guide", "food");
|
||||||
|
expectedResults.put("Community Harvest of Southwest Seattle", "sustainable food");
|
||||||
|
expectedResults.put("University District Food Bank", "food bank");
|
||||||
|
final Expectation expectation = new Expectation();
|
||||||
|
mentat.query(query).run(new RelResultHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleRows(RelResult rows) {
|
||||||
|
assertNotNull(rows);
|
||||||
|
for (int i = 0; i < expectedResults.size(); ++i) {
|
||||||
|
TupleResult row = rows.rowAtIndex(i);
|
||||||
|
assertNotNull(row);
|
||||||
|
String name = row.asString(0);
|
||||||
|
assertNotNull(name);
|
||||||
|
String category = row.asString(1);
|
||||||
|
assertNotNull(category);
|
||||||
|
String expectedCategory = expectedResults.get(name).toString();
|
||||||
|
assertNotNull(expectedCategory);
|
||||||
|
assertEquals(expectedCategory, category);
|
||||||
|
}
|
||||||
|
expectation.fulfill();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
synchronized (expectation) {
|
||||||
|
expectation.wait(1000);
|
||||||
|
}
|
||||||
|
assertTrue(expectation.isFulfilled);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void bindingLongValueSucceeds() throws InterruptedException {
|
||||||
|
Mentat mentat = new Mentat();
|
||||||
|
TxReport report = this.populateWithTypesSchema(mentat);
|
||||||
|
final Long aEntid = report.getEntidForTempId("a");
|
||||||
|
String query = "[:find ?e . :in ?long :where [?e :foo/long ?long]]";
|
||||||
|
final Expectation expectation = new Expectation();
|
||||||
|
mentat.query(query).bindLong("?long", 25).runScalar(new ScalarResultHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleValue(TypedValue value) {
|
||||||
|
assertNotNull(value);
|
||||||
|
assertEquals(aEntid, value.asEntid());
|
||||||
|
expectation.fulfill();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
synchronized (expectation) {
|
||||||
|
expectation.wait(1000);
|
||||||
|
}
|
||||||
|
assertTrue(expectation.isFulfilled);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void bindingRefValueSucceeds() throws InterruptedException {
|
||||||
|
Mentat mentat = new Mentat();
|
||||||
|
TxReport report = this.populateWithTypesSchema(mentat);
|
||||||
|
long stringEntid = mentat.entIdForAttribute(":foo/string");
|
||||||
|
final Long bEntid = report.getEntidForTempId("b");
|
||||||
|
String query = "[:find ?e . :in ?ref :where [?e :foo/ref ?ref]]";
|
||||||
|
final Expectation expectation = new Expectation();
|
||||||
|
mentat.query(query).bindEntidReference("?ref", stringEntid).runScalar(new ScalarResultHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleValue(TypedValue value) {
|
||||||
|
assertNotNull(value);
|
||||||
|
assertEquals(bEntid, value.asEntid());
|
||||||
|
expectation.fulfill();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
synchronized (expectation) {
|
||||||
|
expectation.wait(1000);
|
||||||
|
}
|
||||||
|
assertTrue(expectation.isFulfilled);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void bindingRefKwValueSucceeds() throws InterruptedException {
|
||||||
|
Mentat mentat = new Mentat();
|
||||||
|
TxReport report = this.populateWithTypesSchema(mentat);
|
||||||
|
String refKeyword = ":foo/string";
|
||||||
|
final Long bEntid = report.getEntidForTempId("b");
|
||||||
|
String query = "[:find ?e . :in ?ref :where [?e :foo/ref ?ref]]";
|
||||||
|
final Expectation expectation = new Expectation();
|
||||||
|
mentat.query(query).bindKeywordReference("?ref", refKeyword).runScalar(new ScalarResultHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleValue(TypedValue value) {
|
||||||
|
assertNotNull(value);
|
||||||
|
assertEquals(bEntid, value.asEntid());
|
||||||
|
expectation.fulfill();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
synchronized (expectation) {
|
||||||
|
expectation.wait(1000);
|
||||||
|
}
|
||||||
|
assertTrue(expectation.isFulfilled);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void bindingKwValueSucceeds() throws InterruptedException {
|
||||||
|
Mentat mentat = new Mentat();
|
||||||
|
TxReport report = this.populateWithTypesSchema(mentat);
|
||||||
|
final Long aEntid = report.getEntidForTempId("a");
|
||||||
|
String query = "[:find ?e . :in ?kw :where [?e :foo/keyword ?kw]]";
|
||||||
|
final Expectation expectation = new Expectation();
|
||||||
|
mentat.query(query).bindKeyword("?kw", ":foo/string").runScalar(new ScalarResultHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleValue(TypedValue value) {
|
||||||
|
assertNotNull(value);
|
||||||
|
assertEquals(aEntid, value.asEntid());
|
||||||
|
expectation.fulfill();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
synchronized (expectation) {
|
||||||
|
expectation.wait(1000);
|
||||||
|
}
|
||||||
|
assertTrue(expectation.isFulfilled);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void bindingDateValueSucceeds() throws InterruptedException, ParseException {
|
||||||
|
Mentat mentat = new Mentat();
|
||||||
|
TxReport report = this.populateWithTypesSchema(mentat);
|
||||||
|
final Long aEntid = report.getEntidForTempId("a");
|
||||||
|
|
||||||
|
Date date = new Date(1523896758000L);
|
||||||
|
String query = "[:find [?e ?d] :in ?now :where [?e :foo/instant ?d] [(< ?d ?now)]]";
|
||||||
|
final Expectation expectation = new Expectation();
|
||||||
|
mentat.query(query).bindDate("?now", date).runTuple(new TupleResultHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleRow(TupleResult row) {
|
||||||
|
assertNotNull(row);
|
||||||
|
TypedValue value = row.get(0);
|
||||||
|
assertNotNull(value);
|
||||||
|
assertEquals(aEntid, value.asEntid());
|
||||||
|
expectation.fulfill();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
synchronized (expectation) {
|
||||||
|
expectation.wait(1000);
|
||||||
|
}
|
||||||
|
assertTrue(expectation.isFulfilled);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void bindingStringValueSucceeds() throws InterruptedException {
|
||||||
|
Mentat mentat = this.openAndInitializeCitiesStore();
|
||||||
|
String query = "[:find ?n . :in ?name :where [(fulltext $ :community/name ?name) [[?e ?n]]]]";
|
||||||
|
final Expectation expectation = new Expectation();
|
||||||
|
mentat.query(query).bindString("?name", "Wallingford").runScalar(new ScalarResultHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleValue(TypedValue value) {
|
||||||
|
assertNotNull(value);
|
||||||
|
assertEquals("KOMO Communities - Wallingford", value.asString());
|
||||||
|
expectation.fulfill();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
synchronized (expectation) {
|
||||||
|
expectation.wait(1000);
|
||||||
|
}
|
||||||
|
assertTrue(expectation.isFulfilled);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void bindingUuidValueSucceeds() throws InterruptedException {
|
||||||
|
Mentat mentat = new Mentat();
|
||||||
|
TxReport report = this.populateWithTypesSchema(mentat);
|
||||||
|
final Long aEntid = report.getEntidForTempId("a");
|
||||||
|
String query = "[:find ?e . :in ?uuid :where [?e :foo/uuid ?uuid]]";
|
||||||
|
UUID uuid = UUID.fromString("550e8400-e29b-41d4-a716-446655440000");
|
||||||
|
final Expectation expectation = new Expectation();
|
||||||
|
mentat.query(query).bindUUID("?uuid", uuid).runScalar(new ScalarResultHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleValue(TypedValue value) {
|
||||||
|
assertNotNull(value);
|
||||||
|
assertEquals(aEntid, value.asEntid());
|
||||||
|
expectation.fulfill();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
synchronized (expectation) {
|
||||||
|
expectation.wait(1000);
|
||||||
|
}
|
||||||
|
assertTrue(expectation.isFulfilled);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void bindingBooleanValueSucceeds() throws InterruptedException {
|
||||||
|
Mentat mentat = new Mentat();
|
||||||
|
TxReport report = this.populateWithTypesSchema(mentat);
|
||||||
|
final Long aEntid = report.getEntidForTempId("a");
|
||||||
|
String query = "[:find ?e . :in ?bool :where [?e :foo/boolean ?bool]]";
|
||||||
|
final Expectation expectation = new Expectation();
|
||||||
|
mentat.query(query).bindBoolean("?bool", true).runScalar(new ScalarResultHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleValue(TypedValue value) {
|
||||||
|
assertNotNull(value);
|
||||||
|
assertEquals(aEntid, value.asEntid());
|
||||||
|
expectation.fulfill();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
synchronized (expectation) {
|
||||||
|
expectation.wait(1000);
|
||||||
|
}
|
||||||
|
assertTrue(expectation.isFulfilled);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void bindingDoubleValueSucceeds() throws InterruptedException {
|
||||||
|
Mentat mentat = new Mentat();
|
||||||
|
TxReport report = this.populateWithTypesSchema(mentat);
|
||||||
|
final Long aEntid = report.getEntidForTempId("a");
|
||||||
|
String query = "[:find ?e . :in ?double :where [?e :foo/double ?double]]";
|
||||||
|
final Expectation expectation = new Expectation();
|
||||||
|
mentat.query(query).bindDouble("?double", 11.23).runScalar(new ScalarResultHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleValue(TypedValue value) {
|
||||||
|
assertNotNull(value);
|
||||||
|
assertEquals(aEntid, value.asEntid());
|
||||||
|
expectation.fulfill();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
synchronized (expectation) {
|
||||||
|
expectation.wait(1000);
|
||||||
|
}
|
||||||
|
assertTrue(expectation.isFulfilled);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void typedValueConvertsToLong() throws InterruptedException {
|
||||||
|
Mentat mentat = new Mentat();
|
||||||
|
TxReport report = this.populateWithTypesSchema(mentat);
|
||||||
|
final Long aEntid = report.getEntidForTempId("a");
|
||||||
|
String query = "[:find ?v . :in ?e :where [?e :foo/long ?v]]";
|
||||||
|
final Expectation expectation = new Expectation();
|
||||||
|
mentat.query(query).bindEntidReference("?e", aEntid).runScalar(new ScalarResultHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleValue(TypedValue value) {
|
||||||
|
assertNotNull(value);
|
||||||
|
assertEquals(25, value.asLong().longValue());
|
||||||
|
assertEquals(25, value.asLong().longValue());
|
||||||
|
expectation.fulfill();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
synchronized (expectation) {
|
||||||
|
expectation.wait(1000);
|
||||||
|
}
|
||||||
|
assertTrue(expectation.isFulfilled);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void typedValueConvertsToRef() throws InterruptedException {
|
||||||
|
Mentat mentat = new Mentat();
|
||||||
|
TxReport report = this.populateWithTypesSchema(mentat);
|
||||||
|
final Long aEntid = report.getEntidForTempId("a");
|
||||||
|
String query = "[:find ?e . :where [?e :foo/long 25]]";
|
||||||
|
final Expectation expectation = new Expectation();
|
||||||
|
mentat.query(query).runScalar(new ScalarResultHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleValue(TypedValue value) {
|
||||||
|
assertNotNull(value);
|
||||||
|
assertEquals(aEntid, value.asEntid());
|
||||||
|
assertEquals(aEntid, value.asEntid());
|
||||||
|
expectation.fulfill();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
synchronized (expectation) {
|
||||||
|
expectation.wait(1000);
|
||||||
|
}
|
||||||
|
assertTrue(expectation.isFulfilled);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void typedValueConvertsToKeyword() throws InterruptedException {
|
||||||
|
Mentat mentat = new Mentat();
|
||||||
|
TxReport report = this.populateWithTypesSchema(mentat);
|
||||||
|
final Long aEntid = report.getEntidForTempId("a");
|
||||||
|
String query = "[:find ?v . :in ?e :where [?e :foo/keyword ?v]]";
|
||||||
|
final Expectation expectation = new Expectation();
|
||||||
|
mentat.query(query).bindEntidReference("?e", aEntid).runScalar(new ScalarResultHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleValue(TypedValue value) {
|
||||||
|
assertNotNull(value);
|
||||||
|
assertEquals(":foo/string", value.asKeyword());
|
||||||
|
assertEquals(":foo/string", value.asKeyword());
|
||||||
|
expectation.fulfill();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
synchronized (expectation) {
|
||||||
|
expectation.wait(1000);
|
||||||
|
}
|
||||||
|
assertTrue(expectation.isFulfilled);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void typedValueConvertsToBoolean() throws InterruptedException {
|
||||||
|
Mentat mentat = new Mentat();
|
||||||
|
TxReport report = this.populateWithTypesSchema(mentat);
|
||||||
|
final Long aEntid = report.getEntidForTempId("a");
|
||||||
|
String query = "[:find ?v . :in ?e :where [?e :foo/boolean ?v]]";
|
||||||
|
final Expectation expectation = new Expectation();
|
||||||
|
mentat.query(query).bindEntidReference("?e", aEntid).runScalar(new ScalarResultHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleValue(TypedValue value) {
|
||||||
|
assertNotNull(value);
|
||||||
|
assertEquals(true, value.asBoolean());
|
||||||
|
assertEquals(true, value.asBoolean());
|
||||||
|
expectation.fulfill();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
synchronized (expectation) {
|
||||||
|
expectation.wait(1000);
|
||||||
|
}
|
||||||
|
assertTrue(expectation.isFulfilled);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void typedValueConvertsToDouble() throws InterruptedException {
|
||||||
|
Mentat mentat = new Mentat();
|
||||||
|
TxReport report = this.populateWithTypesSchema(mentat);
|
||||||
|
final Long aEntid = report.getEntidForTempId("a");
|
||||||
|
String query = "[:find ?v . :in ?e :where [?e :foo/double ?v]]";
|
||||||
|
final Expectation expectation = new Expectation();
|
||||||
|
mentat.query(query).bindEntidReference("?e", aEntid).runScalar(new ScalarResultHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleValue(TypedValue value) {
|
||||||
|
assertNotNull(value);
|
||||||
|
assertEquals(new Double(11.23), value.asDouble());
|
||||||
|
assertEquals(new Double(11.23), value.asDouble());
|
||||||
|
expectation.fulfill();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
synchronized (expectation) {
|
||||||
|
expectation.wait(1000);
|
||||||
|
}
|
||||||
|
assertTrue(expectation.isFulfilled);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void typedValueConvertsToDate() throws InterruptedException, ParseException {
|
||||||
|
Mentat mentat = new Mentat();
|
||||||
|
TxReport report = this.populateWithTypesSchema(mentat);
|
||||||
|
final Long aEntid = report.getEntidForTempId("a");
|
||||||
|
String query = "[:find ?v . :in ?e :where [?e :foo/instant ?v]]";
|
||||||
|
final Expectation expectation = new Expectation();
|
||||||
|
DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZZZZZ", Locale.ENGLISH);
|
||||||
|
format.parse("2017-01-01T11:00:00+00:00");
|
||||||
|
final Calendar expectedDate = format.getCalendar();
|
||||||
|
mentat.query(query).bindEntidReference("?e", aEntid).runScalar(new ScalarResultHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleValue(TypedValue value) {
|
||||||
|
assertNotNull(value);
|
||||||
|
assertEquals(expectedDate.getTime(), value.asDate());
|
||||||
|
assertEquals(expectedDate.getTime(), value.asDate());
|
||||||
|
expectation.fulfill();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
synchronized (expectation) {
|
||||||
|
expectation.wait(1000);
|
||||||
|
}
|
||||||
|
assertTrue(expectation.isFulfilled);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void typedValueConvertsToString() throws InterruptedException {
|
||||||
|
Mentat mentat = new Mentat();
|
||||||
|
TxReport report = this.populateWithTypesSchema(mentat);
|
||||||
|
final Long aEntid = report.getEntidForTempId("a");
|
||||||
|
String query = "[:find ?v . :in ?e :where [?e :foo/string ?v]]";
|
||||||
|
final Expectation expectation = new Expectation();
|
||||||
|
mentat.query(query).bindEntidReference("?e", aEntid).runScalar(new ScalarResultHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleValue(TypedValue value) {
|
||||||
|
assertNotNull(value);
|
||||||
|
assertEquals("The higher we soar the smaller we appear to those who cannot fly.", value.asString());
|
||||||
|
assertEquals("The higher we soar the smaller we appear to those who cannot fly.", value.asString());
|
||||||
|
expectation.fulfill();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
synchronized (expectation) {
|
||||||
|
expectation.wait(1000);
|
||||||
|
}
|
||||||
|
assertTrue(expectation.isFulfilled);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void typedValueConvertsToUUID() throws InterruptedException {
|
||||||
|
Mentat mentat = new Mentat();
|
||||||
|
TxReport report = this.populateWithTypesSchema(mentat);
|
||||||
|
final Long aEntid = report.getEntidForTempId("a");
|
||||||
|
String query = "[:find ?v . :in ?e :where [?e :foo/uuid ?v]]";
|
||||||
|
final UUID expectedUUID = UUID.fromString("550e8400-e29b-41d4-a716-446655440000");
|
||||||
|
final Expectation expectation = new Expectation();
|
||||||
|
mentat.query(query).bindEntidReference("?e", aEntid).runScalar(new ScalarResultHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleValue(TypedValue value) {
|
||||||
|
assertNotNull(value);
|
||||||
|
assertEquals(expectedUUID, value.asUUID());
|
||||||
|
assertEquals(expectedUUID, value.asUUID());
|
||||||
|
expectation.fulfill();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
synchronized (expectation) {
|
||||||
|
expectation.wait(1000);
|
||||||
|
}
|
||||||
|
assertTrue(expectation.isFulfilled);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void valueForAttributeOfEntitySucceeds() throws InterruptedException {
|
||||||
|
Mentat mentat = new Mentat();
|
||||||
|
TxReport report = this.populateWithTypesSchema(mentat);
|
||||||
|
final Long aEntid = report.getEntidForTempId("a");
|
||||||
|
TypedValue value = mentat.valueForAttributeOfEntity(":foo/long", aEntid);
|
||||||
|
assertNotNull(value);
|
||||||
|
assertEquals(25, value.asLong().longValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void entidForAttributeSucceeds() {
|
||||||
|
Mentat mentat = new Mentat();
|
||||||
|
this.populateWithTypesSchema(mentat);
|
||||||
|
long entid = mentat.entIdForAttribute(":foo/long");
|
||||||
|
assertEquals(65540, entid);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue