You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
cryptpad/www/code/codemirror-5.7/test/sql-hint-test.js

190 lines
4.5 KiB
JavaScript

// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE
(function() {
var Pos = CodeMirror.Pos;
var simpleTables = {
"users": ["name", "score", "birthDate"],
"xcountries": ["name", "population", "size"]
};
var schemaTables = {
"schema.users": ["name", "score", "birthDate"],
"schema.countries": ["name", "population", "size"]
};
var displayTextTables = [{
text: "mytable",
displayText: "mytable | The main table",
columns: [{text: "id", displayText: "id | Unique ID"},
{text: "name", displayText: "name | The name"}]
}];
namespace = "sql-hint_";
function test(name, spec) {
testCM(name, function(cm) {
cm.setValue(spec.value);
cm.setCursor(spec.cursor);
var completion = CodeMirror.hint.sql(cm, {tables: spec.tables});
if (!deepCompare(completion.list, spec.list))
throw new Failure("Wrong completion results " + JSON.stringify(completion.list) + " vs " + JSON.stringify(spec.list));
eqPos(completion.from, spec.from);
eqPos(completion.to, spec.to);
}, {
value: spec.value,
mode: "text/x-mysql"
});
}
test("keywords", {
value: "SEL",
cursor: Pos(0, 3),
list: ["SELECT"],
from: Pos(0, 0),
to: Pos(0, 3)
});
test("from", {
value: "SELECT * fr",
cursor: Pos(0, 11),
list: ["FROM"],
from: Pos(0, 9),
to: Pos(0, 11)
});
test("table", {
value: "SELECT xc",
cursor: Pos(0, 9),
tables: simpleTables,
list: ["xcountries"],
from: Pos(0, 7),
to: Pos(0, 9)
});
test("columns", {
value: "SELECT users.",
cursor: Pos(0, 13),
tables: simpleTables,
list: ["users.name", "users.score", "users.birthDate"],
from: Pos(0, 7),
to: Pos(0, 13)
});
test("singlecolumn", {
value: "SELECT users.na",
cursor: Pos(0, 15),
tables: simpleTables,
list: ["users.name"],
from: Pos(0, 7),
to: Pos(0, 15)
});
test("quoted", {
value: "SELECT `users`.`na",
cursor: Pos(0, 18),
tables: simpleTables,
list: ["`users`.`name`"],
from: Pos(0, 7),
to: Pos(0, 18)
});
test("quotedcolumn", {
value: "SELECT users.`na",
cursor: Pos(0, 16),
tables: simpleTables,
list: ["`users`.`name`"],
from: Pos(0, 7),
to: Pos(0, 16)
});
test("schema", {
value: "SELECT schem",
cursor: Pos(0, 12),
tables: schemaTables,
list: ["schema.users", "schema.countries",
"SCHEMA", "SCHEMA_NAME", "SCHEMAS"],
from: Pos(0, 7),
to: Pos(0, 12)
});
test("schemaquoted", {
value: "SELECT `sch",
cursor: Pos(0, 11),
tables: schemaTables,
list: ["`schema`.`users`", "`schema`.`countries`"],
from: Pos(0, 7),
to: Pos(0, 11)
});
test("schemacolumn", {
value: "SELECT schema.users.",
cursor: Pos(0, 20),
tables: schemaTables,
list: ["schema.users.name",
"schema.users.score",
"schema.users.birthDate"],
from: Pos(0, 7),
to: Pos(0, 20)
});
test("schemacolumnquoted", {
value: "SELECT `schema`.`users`.",
cursor: Pos(0, 24),
tables: schemaTables,
list: ["`schema`.`users`.`name`",
"`schema`.`users`.`score`",
"`schema`.`users`.`birthDate`"],
from: Pos(0, 7),
to: Pos(0, 24)
});
test("displayText_table", {
value: "SELECT myt",
cursor: Pos(0, 10),
tables: displayTextTables,
list: displayTextTables,
from: Pos(0, 7),
to: Pos(0, 10)
});
test("displayText_column", {
value: "SELECT mytable.",
cursor: Pos(0, 15),
tables: displayTextTables,
list: [{text: "mytable.id", displayText: "id | Unique ID"},
{text: "mytable.name", displayText: "name | The name"}],
from: Pos(0, 7),
to: Pos(0, 15)
});
test("alias_complete", {
value: "SELECT t. FROM users t",
cursor: Pos(0, 9),
tables: simpleTables,
list: ["t.name", "t.score", "t.birthDate"],
from: Pos(0, 7),
to: Pos(0, 9)
});
test("alias_complete_with_displayText", {
value: "SELECT t. FROM mytable t",
cursor: Pos(0, 9),
tables: displayTextTables,
list: [{text: "t.id", displayText: "id | Unique ID"},
{text: "t.name", displayText: "name | The name"}],
from: Pos(0, 7),
to: Pos(0, 9)
})
function deepCompare(a, b) {
if (!a || typeof a != "object")
return a === b;
if (!b || typeof b != "object")
return false;
for (var prop in a) if (!deepCompare(a[prop], b[prop])) return false;
return true;
}
})();