Forráskód Böngészése

HUE-3495 [editor] Add jasmine tests for Ace textCompleter

This runs all the SQL tests together with the textCompleter to make sure it doesn't affect the sql completions, it also adds two tests for the textCompleter itself.
Johan Ahlen 9 éve
szülő
commit
a4a6e16

+ 59 - 8
desktop/core/src/desktop/static/desktop/spec/sqlAutocompleterSpec.js

@@ -17,7 +17,7 @@ define([
   'knockout',
   'desktop/js/sqlAutocompleter',
   'desktop/js/assist/assistHelper',
-  'desktop/spec/autocompleterTestUtils'
+  'desktop/spec/autocompleterTestUtils',
 ], function(ko, SqlAutocompleter, AssistHelper, testUtils) {
   describe("sqlAutocompleter.js", function() {
     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) {
       changeType("genericSqlType", done);
-      subject = new SqlAutocompleter({ snippet: snippet, optEnabled: false });
+      subject = getCompleter({ snippet: snippet, optEnabled: false });
       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();
     };
 
     var assertAutoComplete = function(testDefinition) {
       ajaxHelper.responseForUrls = testDefinition.serverResponses;
-      var callback = createCallbackSpyForValues(testDefinition.expectedSuggestions);
+      var callback = createCallbackSpyForValues(testDefinition.expectedSuggestions, testDefinition.includeLocal);
       subject.autocomplete(testDefinition.beforeCursor, testDefinition.afterCursor, callback);
       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() {
       it("should suggest table names with no columns", function() {
         assertAutoComplete({
@@ -334,7 +385,7 @@ define([
 
       describe("HDFS autocompletion", function () {
         beforeEach(function() {
-          subject = new SqlAutocompleter({
+          subject = getCompleter({
             hdfsAutocompleter: {
               autocomplete: function(before, after, callback) {
                 callback([
@@ -675,7 +726,7 @@ define([
 
       describe("HDFS autocompletion", function () {
         beforeEach(function() {
-          subject = new SqlAutocompleter({
+          subject = getCompleter({
             hdfsAutocompleter: {
               autocomplete: function(before, after, callback) {
                 callback([

+ 4 - 0
desktop/core/src/desktop/templates/common_jasmine.mako

@@ -30,6 +30,10 @@
   <script type="text/javascript" src="${ static('desktop/js/hue.utils.js') }"></script>
   <script type="text/javascript" src="${ static('desktop/ext/js/jquery/plugins/jquery.total-storage.min.js') }"></script>
 
+  <script src="${ static('desktop/js/ace/ace.js') }"></script>
+  <script src="${ static('desktop/js/ace/ext-language_tools.js') }"></script>
+  <script src="${ static('desktop/js/ace.extended.js') }"></script>
+
   ${ require.config() }
 
   <script type="text/javascript" charset="utf-8">