mirror of https://gitee.com/bigwinds/arangodb
404 lines
14 KiB
JavaScript
404 lines
14 KiB
JavaScript
/*jshint globalstrict:false, strict:false, maxlen: 500 */
|
|
/*global assertUndefined, assertEqual, assertTrue, assertFalse, fail, db._query */
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// DISCLAIMER
|
|
///
|
|
/// Copyright 2017 ArangoDB GmbH, Cologne, Germany
|
|
///
|
|
/// 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.
|
|
///
|
|
/// Copyright holder is ArangoDB GmbH, Cologne, Germany
|
|
///
|
|
/// @author Andrey Abramov
|
|
/// @author Vasiliy Nabatchikov
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
var jsunity = require("jsunity");
|
|
var db = require("@arangodb").db;
|
|
var analyzers = require("@arangodb/analyzers");
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief test suite
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
function iResearchFeatureAqlTestSuite () {
|
|
return {
|
|
setUpAll : function () {
|
|
},
|
|
|
|
tearDownAll : function () {
|
|
},
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief IResearchAnalyzerFeature tests
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
testAnalyzers: function() {
|
|
let oldList = analyzers.toArray();
|
|
assertTrue(Array === oldList.constructor);
|
|
|
|
// creation
|
|
analyzers.save("testAnalyzer", "identity", "test properties", [ "frequency" ]);
|
|
|
|
// properties
|
|
let analyzer = analyzers.analyzer(db._name() + "::testAnalyzer");
|
|
assertTrue(null !== analyzer);
|
|
assertEqual(db._name() + "::testAnalyzer", analyzer.name());
|
|
assertEqual("identity", analyzer.type());
|
|
assertEqual("test properties", analyzer.properties());
|
|
assertTrue(Array === analyzer.features().constructor);
|
|
assertEqual(1, analyzer.features().length);
|
|
assertEqual([ "frequency" ], analyzer.features());
|
|
analyzer = undefined; // release reference
|
|
|
|
// listing
|
|
let list = analyzers.toArray();
|
|
assertTrue(Array === list.constructor);
|
|
assertEqual(oldList.length + 1, list.length);
|
|
list = undefined; // release reference
|
|
|
|
// force server-side V8 garbage collection
|
|
if (db._connection !== undefined) { // client test
|
|
let url = require('internal').arango.getEndpoint().replace('tcp', 'http');
|
|
url += '/_admin/execute?returnAsJSON=true';
|
|
let options = require('@arangodb/process-utils').makeAuthorizationHeaders({
|
|
username: 'root',
|
|
password: ''
|
|
});
|
|
options.method = 'POST';
|
|
require('internal').download(url, 'require("internal").wait(0.1, true);', options);
|
|
} else {
|
|
require("internal").wait(0.1, true);
|
|
}
|
|
|
|
// removal
|
|
analyzers.remove(db._name() + "::testAnalyzer");
|
|
assertTrue(null === analyzers.analyzer(db._name() + "::testAnalyzer"));
|
|
assertEqual(oldList.length, analyzers.toArray().length);
|
|
},
|
|
|
|
testAnalyzersFeatures: function() {
|
|
try {
|
|
analyzers.save("testAnalyzer", "identity", "test properties", [ "unknown" ]);
|
|
fail(); // unsupported feature
|
|
} catch(e) {
|
|
}
|
|
|
|
try {
|
|
analyzers.save("testAnalyzer", "identity", "test properties", [ "position" ]);
|
|
fail(); // feature with dependency
|
|
} catch(e) {
|
|
}
|
|
|
|
// feature with dependency satisfied
|
|
analyzers.save("testAnalyzer", "identity", "test properties", [ "frequency", "position" ]);
|
|
analyzers.remove("testAnalyzer", true);
|
|
},
|
|
|
|
testAnalyzersPrefix: function() {
|
|
let dbName = "TestDB";
|
|
|
|
try { db._dropDatabase(dbName); } catch (e) {}
|
|
db._createDatabase(dbName);
|
|
db._useDatabase(dbName);
|
|
|
|
let oldList = analyzers.toArray();
|
|
assertTrue(Array === oldList.constructor);
|
|
|
|
// creation
|
|
db._useDatabase("_system");
|
|
analyzers.save("testAnalyzer", "identity", "system properties", [ "frequency" ]);
|
|
db._useDatabase(dbName);
|
|
analyzers.save("testAnalyzer", "identity", "user properties", [ "norm" ]);
|
|
|
|
// retrieval (system)
|
|
db._useDatabase("_system");
|
|
|
|
{
|
|
let analyzer = analyzers.analyzer("testAnalyzer");
|
|
assertTrue(null !== analyzer);
|
|
assertEqual(db._name() + "::testAnalyzer", analyzer.name());
|
|
assertEqual("identity", analyzer.type());
|
|
assertEqual("system properties", analyzer.properties());
|
|
assertTrue(Array === analyzer.features().constructor);
|
|
assertEqual(1, analyzer.features().length);
|
|
assertEqual([ "frequency" ], analyzer.features());
|
|
}
|
|
|
|
{
|
|
let analyzer = analyzers.analyzer(dbName + "::testAnalyzer");
|
|
assertTrue(null !== analyzer);
|
|
assertEqual(dbName + "::testAnalyzer", analyzer.name());
|
|
assertEqual("identity", analyzer.type());
|
|
assertEqual("user properties", analyzer.properties());
|
|
assertTrue(Array === analyzer.features().constructor);
|
|
assertEqual(1, analyzer.features().length);
|
|
assertEqual([ "norm" ], analyzer.features());
|
|
}
|
|
|
|
// retrieval (dbName)
|
|
db._useDatabase(dbName);
|
|
|
|
{
|
|
let analyzer = analyzers.analyzer("testAnalyzer");
|
|
assertTrue(null !== analyzer);
|
|
assertEqual(db._name() + "::testAnalyzer", analyzer.name());
|
|
assertEqual("identity", analyzer.type());
|
|
assertEqual("user properties", analyzer.properties());
|
|
assertTrue(Array === analyzer.features().constructor);
|
|
assertEqual(1, analyzer.features().length);
|
|
assertEqual([ "norm" ], analyzer.features());
|
|
}
|
|
|
|
{
|
|
let analyzer = analyzers.analyzer("::testAnalyzer");
|
|
assertTrue(null !== analyzer);
|
|
assertEqual("_system::testAnalyzer", analyzer.name());
|
|
assertEqual("identity", analyzer.type());
|
|
assertEqual("system properties", analyzer.properties());
|
|
assertTrue(Array === analyzer.features().constructor);
|
|
assertEqual(1, analyzer.features().length);
|
|
assertEqual([ "frequency" ], analyzer.features());
|
|
}
|
|
|
|
// listing
|
|
let list = analyzers.toArray();
|
|
assertTrue(Array === list.constructor);
|
|
assertEqual(oldList.length + 2, list.length);
|
|
|
|
// removal
|
|
analyzers.remove("testAnalyzer", true);
|
|
assertTrue(null === analyzers.analyzer("testAnalyzer"));
|
|
analyzers.remove("::testAnalyzer", true);
|
|
assertTrue(null === analyzers.analyzer("::testAnalyzer"));
|
|
assertEqual(oldList.length, analyzers.toArray().length);
|
|
|
|
db._useDatabase("_system");
|
|
db._dropDatabase(dbName);
|
|
},
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief IResearchFeature tests
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
testDefaultAnalyzers : function() {
|
|
// invalid
|
|
{
|
|
try {
|
|
db._query("RETURN TOKENS('a quick brown fox jumps', 'invalid')").toArray();
|
|
fail();
|
|
} catch (err) {
|
|
assertEqual(err.errorNum, require("internal").errors.ERROR_BAD_PARAMETER.code);
|
|
}
|
|
}
|
|
|
|
// text_de
|
|
{
|
|
let result = db._query(
|
|
"RETURN TOKENS('a quick brown fox jumps', 'text_de')",
|
|
null,
|
|
{ }
|
|
).toArray();
|
|
assertEqual(1, result.length);
|
|
assertTrue(Array === result[0].constructor);
|
|
assertEqual(5, result[0].length);
|
|
assertEqual([ "a", "quick", "brown", "fox", "jumps" ], result[0]);
|
|
}
|
|
|
|
// text_en
|
|
{
|
|
let result = db._query(
|
|
"RETURN TOKENS('a quick brown fox jumps', 'text_en')",
|
|
null,
|
|
{ }
|
|
).toArray();
|
|
assertEqual(1, result.length);
|
|
assertTrue(Array === result[0].constructor);
|
|
assertEqual(5, result[0].length);
|
|
assertEqual([ "a", "quick", "brown", "fox", "jump" ], result[0]);
|
|
}
|
|
|
|
// text_es
|
|
{
|
|
let result = db._query(
|
|
"RETURN TOKENS('a quick brown fox jumps', 'text_es')",
|
|
null,
|
|
{ }
|
|
).toArray();
|
|
assertEqual(1, result.length);
|
|
assertTrue(Array === result[0].constructor);
|
|
assertEqual(5, result[0].length);
|
|
assertEqual([ "a", "quick", "brown", "fox", "jumps" ], result[0]);
|
|
}
|
|
|
|
// text_fi
|
|
{
|
|
let result = db._query(
|
|
"RETURN TOKENS('a quick brown fox jumps', 'text_fi')",
|
|
null,
|
|
{ }
|
|
).toArray();
|
|
assertEqual(1, result.length);
|
|
assertTrue(Array === result[0].constructor);
|
|
assertEqual(5, result[0].length);
|
|
assertEqual([ "a", "quick", "brow", "fox", "jumps" ], result[0]);
|
|
}
|
|
|
|
// text_fr
|
|
{
|
|
let result = db._query(
|
|
"RETURN TOKENS('a quick brown fox jumps', 'text_fr')",
|
|
null,
|
|
{ }
|
|
).toArray();
|
|
assertEqual(1, result.length);
|
|
assertTrue(Array === result[0].constructor);
|
|
assertEqual(5, result[0].length);
|
|
assertEqual([ "a", "quick", "brown", "fox", "jump" ], result[0]);
|
|
}
|
|
|
|
// text_it
|
|
{
|
|
let result = db._query(
|
|
"RETURN TOKENS('a quick brown fox jumps', 'text_it')",
|
|
null,
|
|
{ }
|
|
).toArray();
|
|
assertEqual(1, result.length);
|
|
assertTrue(Array === result[0].constructor);
|
|
assertEqual(5, result[0].length);
|
|
assertEqual([ "a", "quick", "brown", "fox", "jumps" ], result[0]);
|
|
}
|
|
|
|
// text_nl
|
|
{
|
|
let result = db._query(
|
|
"RETURN TOKENS('a quick brown fox jumps', 'text_nl')",
|
|
null,
|
|
{ }
|
|
).toArray();
|
|
assertEqual(1, result.length);
|
|
assertTrue(Array === result[0].constructor);
|
|
assertEqual(5, result[0].length);
|
|
assertEqual([ "a", "quick", "brown", "fox", "jump" ], result[0]);
|
|
}
|
|
|
|
// text_no
|
|
{
|
|
let result = db._query(
|
|
"RETURN TOKENS('a quick brown fox jumps', 'text_no')",
|
|
null,
|
|
{ }
|
|
).toArray();
|
|
assertEqual(1, result.length);
|
|
assertTrue(Array === result[0].constructor);
|
|
assertEqual(5, result[0].length);
|
|
assertEqual([ "a", "quick", "brown", "fox", "jump" ], result[0]);
|
|
}
|
|
|
|
// text_pt
|
|
{
|
|
let result = db._query(
|
|
"RETURN TOKENS('a quick brown fox jumps', 'text_pt')",
|
|
null,
|
|
{ }
|
|
).toArray();
|
|
assertEqual(1, result.length);
|
|
assertTrue(Array === result[0].constructor);
|
|
assertEqual(5, result[0].length);
|
|
assertEqual([ "a", "quick", "brown", "fox", "jumps" ], result[0]);
|
|
}
|
|
|
|
// text_ru (codepoints)
|
|
{
|
|
let result = db._query(
|
|
"RETURN TOKENS('ArangoDB - \u044D\u0442\u043E \u043C\u043D\u043E\u0433\u043E\u043C\u043E\u0434\u0435\u043B\u044C\u043D\u0430\u044F \u0431\u0430\u0437\u0430 \u0434\u0430\u043D\u043D\u044B\u0445', 'text_ru')",
|
|
null,
|
|
{ }
|
|
).toArray();
|
|
assertEqual(1, result.length);
|
|
assertTrue(Array === result[0].constructor);
|
|
assertEqual(5, result[0].length);
|
|
assertEqual([ "arangodb", "\u044D\u0442", "\u043C\u043D\u043E\u0433\u043E\u043C\u043E\u0434\u0435\u043B\u044C\u043D", "\u0431\u0430\u0437", "\u0434\u0430\u043D" ], result[0]);
|
|
assertEqual([ "arangodb", "эт", "многомодельн", "баз", "дан" ], result[0]);
|
|
}
|
|
|
|
// text_ru (unicode)
|
|
{
|
|
let result = db._query(
|
|
"RETURN TOKENS('ArangoDB - это многомодельная база данных', 'text_ru')",
|
|
null,
|
|
{ }
|
|
).toArray();
|
|
assertEqual(1, result.length);
|
|
assertTrue(Array === result[0].constructor);
|
|
assertEqual(5, result[0].length);
|
|
assertEqual([ "arangodb", "\u044D\u0442", "\u043C\u043D\u043E\u0433\u043E\u043C\u043E\u0434\u0435\u043B\u044C\u043D", "\u0431\u0430\u0437", "\u0434\u0430\u043D" ], result[0]);
|
|
assertEqual([ "arangodb", "эт", "многомодельн", "баз", "дан" ], result[0]);
|
|
}
|
|
|
|
// text_sv
|
|
{
|
|
let result = db._query(
|
|
"RETURN TOKENS('a quick brown fox jumps', 'text_sv')",
|
|
null,
|
|
{ }
|
|
).toArray();
|
|
assertEqual(1, result.length);
|
|
assertTrue(Array === result[0].constructor);
|
|
assertEqual(5, result[0].length);
|
|
assertEqual([ "a", "quick", "brown", "fox", "jump" ], result[0]);
|
|
}
|
|
|
|
// text_zh (codepoints)
|
|
{
|
|
let result = db._query(
|
|
"RETURN TOKENS('ArangoDB \u662F\u4E00\u4E2A\u591A\u6A21\u578B\u6570\u636E\u5E93\u3002', 'text_zh')",
|
|
null,
|
|
{ }
|
|
).toArray();
|
|
assertEqual(1, result.length);
|
|
assertTrue(Array === result[0].constructor);
|
|
assertEqual(7, result[0].length);
|
|
assertEqual([ "arangodb", "\u662F", "\u4E00\u4E2A", "\u591A", "\u6A21\u578B", "\u6570\u636E", "\u5E93" ], result[0]);
|
|
assertEqual([ "arangodb", "是", "一个", "多", "模型", "数据", "库" ], result[0]);
|
|
}
|
|
|
|
// text_zh (unicode)
|
|
{
|
|
let result = db._query(
|
|
"RETURN TOKENS('ArangoDB 是一个多模型数据库。', 'text_zh')",
|
|
null,
|
|
{ }
|
|
).toArray();
|
|
assertEqual(1, result.length);
|
|
assertTrue(Array === result[0].constructor);
|
|
assertEqual(7, result[0].length);
|
|
assertEqual([ "arangodb", "\u662F", "\u4E00\u4E2A", "\u591A", "\u6A21\u578B", "\u6570\u636E", "\u5E93" ], result[0]);
|
|
assertEqual([ "arangodb", "是", "一个", "多", "模型", "数据", "库" ], result[0]);
|
|
}
|
|
|
|
},
|
|
|
|
};
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief executes the test suite
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
jsunity.run(iResearchFeatureAqlTestSuite);
|
|
|
|
return jsunity.done();
|