|
@@ -17,7 +17,7 @@ define([
|
|
|
'knockout',
|
|
'knockout',
|
|
|
'desktop/js/sqlAutocompleter',
|
|
'desktop/js/sqlAutocompleter',
|
|
|
'desktop/js/assist/assistHelper',
|
|
'desktop/js/assist/assistHelper',
|
|
|
- 'desktop/spec/autocompleterTestUtils'
|
|
|
|
|
|
|
+ 'desktop/spec/autocompleterTestUtils',
|
|
|
], function(ko, SqlAutocompleter, AssistHelper, testUtils) {
|
|
], function(ko, SqlAutocompleter, AssistHelper, testUtils) {
|
|
|
describe("sqlAutocompleter.js", function() {
|
|
describe("sqlAutocompleter.js", function() {
|
|
|
var subject;
|
|
var subject;
|
|
@@ -96,21 +96,50 @@ define([
|
|
|
})
|
|
})
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
|
|
+ var getCompleter = function (options) {
|
|
|
|
|
+ var langTools = ace.require("ace/ext/language_tools")
|
|
|
|
|
+ langTools.textCompleter.setSqlMode(true)
|
|
|
|
|
+ sqlAutocompleter = new SqlAutocompleter(options);
|
|
|
|
|
+ return {
|
|
|
|
|
+ autocomplete: function (before, after, callback) {
|
|
|
|
|
+ var textCompleterCallback = function (values) {
|
|
|
|
|
+ langTools.textCompleter.getCompletions(null, {
|
|
|
|
|
+ getValue: function () {
|
|
|
|
|
+ return before+after;
|
|
|
|
|
+ },
|
|
|
|
|
+ getTextRange: function () {
|
|
|
|
|
+ return before;
|
|
|
|
|
+ }
|
|
|
|
|
+ }, before.length, null, function (ignore, textCompletions) {
|
|
|
|
|
+ callback(textCompletions.concat(values))
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+ return sqlAutocompleter.autocomplete(before, after, textCompleterCallback);
|
|
|
|
|
+ }
|
|
|
|
|
+ };
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
beforeEach(function(done) {
|
|
beforeEach(function(done) {
|
|
|
changeType("genericSqlType", done);
|
|
changeType("genericSqlType", done);
|
|
|
- subject = new SqlAutocompleter({ snippet: snippet, optEnabled: false });
|
|
|
|
|
|
|
+ subject = getCompleter({ snippet: snippet, optEnabled: false });
|
|
|
ajaxHelper.responseForUrls = {};
|
|
ajaxHelper.responseForUrls = {};
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
- var createCallbackSpyForValues = function(values, name) {
|
|
|
|
|
- return jasmine.createSpy(name ? name : 'callback', function (value) {
|
|
|
|
|
- expect(value).toEqualAutocompleteValues(values)
|
|
|
|
|
|
|
+ var createCallbackSpyForValues = function(values, includeLocal) {
|
|
|
|
|
+ return jasmine.createSpy('callback', function (value) {
|
|
|
|
|
+ if (!includeLocal) {
|
|
|
|
|
+ expect(value.filter(function (val) {
|
|
|
|
|
+ return val.meta !== 'local';
|
|
|
|
|
+ })).toEqualAutocompleteValues(values, includeLocal)
|
|
|
|
|
+ } else {
|
|
|
|
|
+ expect(value).toEqualAutocompleteValues(values, includeLocal)
|
|
|
|
|
+ }
|
|
|
}).and.callThrough();
|
|
}).and.callThrough();
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
var assertAutoComplete = function(testDefinition) {
|
|
var assertAutoComplete = function(testDefinition) {
|
|
|
ajaxHelper.responseForUrls = testDefinition.serverResponses;
|
|
ajaxHelper.responseForUrls = testDefinition.serverResponses;
|
|
|
- var callback = createCallbackSpyForValues(testDefinition.expectedSuggestions);
|
|
|
|
|
|
|
+ var callback = createCallbackSpyForValues(testDefinition.expectedSuggestions, testDefinition.includeLocal);
|
|
|
subject.autocomplete(testDefinition.beforeCursor, testDefinition.afterCursor, callback);
|
|
subject.autocomplete(testDefinition.beforeCursor, testDefinition.afterCursor, callback);
|
|
|
expect(callback).toHaveBeenCalled();
|
|
expect(callback).toHaveBeenCalled();
|
|
|
};
|
|
};
|
|
@@ -183,6 +212,28 @@ define([
|
|
|
});
|
|
});
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
|
|
+ describe("text completer", function() {
|
|
|
|
|
+ it("should ignore line comments for local suggestions", function () {
|
|
|
|
|
+ assertAutoComplete({
|
|
|
|
|
+ serverResponses: { },
|
|
|
|
|
+ includeLocal: true,
|
|
|
|
|
+ beforeCursor: "-- line comment'\nSELECT * from testTable1;\n",
|
|
|
|
|
+ afterCursor: "\n-- other line comment",
|
|
|
|
|
+ expectedSuggestions: ["SELECT", "from", "testTable1"]
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ it("should ignore multi-line comments for local suggestions", function () {
|
|
|
|
|
+ assertAutoComplete({
|
|
|
|
|
+ serverResponses: { },
|
|
|
|
|
+ includeLocal: true,
|
|
|
|
|
+ beforeCursor: "/* line 1\nline 2\n*/\nSELECT * from testTable1;\n",
|
|
|
|
|
+ afterCursor: "",
|
|
|
|
|
+ expectedSuggestions: ["SELECT", "from", "testTable1"]
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
describe("table completion", function() {
|
|
describe("table completion", function() {
|
|
|
it("should suggest table names with no columns", function() {
|
|
it("should suggest table names with no columns", function() {
|
|
|
assertAutoComplete({
|
|
assertAutoComplete({
|
|
@@ -334,7 +385,7 @@ define([
|
|
|
|
|
|
|
|
describe("HDFS autocompletion", function () {
|
|
describe("HDFS autocompletion", function () {
|
|
|
beforeEach(function() {
|
|
beforeEach(function() {
|
|
|
- subject = new SqlAutocompleter({
|
|
|
|
|
|
|
+ subject = getCompleter({
|
|
|
hdfsAutocompleter: {
|
|
hdfsAutocompleter: {
|
|
|
autocomplete: function(before, after, callback) {
|
|
autocomplete: function(before, after, callback) {
|
|
|
callback([
|
|
callback([
|
|
@@ -675,7 +726,7 @@ define([
|
|
|
|
|
|
|
|
describe("HDFS autocompletion", function () {
|
|
describe("HDFS autocompletion", function () {
|
|
|
beforeEach(function() {
|
|
beforeEach(function() {
|
|
|
- subject = new SqlAutocompleter({
|
|
|
|
|
|
|
+ subject = getCompleter({
|
|
|
hdfsAutocompleter: {
|
|
hdfsAutocompleter: {
|
|
|
autocomplete: function(before, after, callback) {
|
|
autocomplete: function(before, after, callback) {
|
|
|
callback([
|
|
callback([
|