ajwillia-ms pushed a commit to branch master.

http://git.enlightenment.org/tools/edi.git/commit/?id=53e7419009562a58d29a98c282863bb2a43082c6

commit 53e7419009562a58d29a98c282863bb2a43082c6
Author: Andy Williams <[email protected]>
Date:   Tue Dec 27 13:26:38 2016 +0000

    autosuggest: add tests to clang suggest provider
    
    A small refactor became obvious because the lookup is not really
    using the curword passed in - we want all options then filter later!
---
 src/bin/editor/edi_editor.c                    |   6 +-
 src/bin/editor/edi_editor_suggest_provider.h   |   2 +-
 src/bin/editor/edi_editor_suggest_provider_c.c |  18 +++--
 src/tests/Makefile.am                          |   8 +-
 src/tests/edi_suite.c                          |   4 +-
 src/tests/edi_suite.h                          |   2 +
 src/tests/edi_test_editor_suggest_provider.c   |  26 ++++++
 src/tests/edi_test_editor_suggest_provider_c.c | 106 +++++++++++++++++++++++++
 src/tests/test.c                               |   3 +
 9 files changed, 164 insertions(+), 11 deletions(-)

diff --git a/src/bin/editor/edi_editor.c b/src/bin/editor/edi_editor.c
index ee64aba..23321ae 100644
--- a/src/bin/editor/edi_editor.c
+++ b/src/bin/editor/edi_editor.c
@@ -163,6 +163,7 @@ static void
 _suggest_list_update(Edi_Editor *editor, char *word)
 {
    Edi_Editor_Suggest_Item *suggest_it;
+   Edi_Editor_Suggest_Provider *provider;
    Eina_List *list, *l;
    Elm_Genlist_Item_Class *ic;
    Elm_Object_Item *item;
@@ -175,10 +176,11 @@ _suggest_list_update(Edi_Editor *editor, char *word)
    ic->item_style = "full";
    ic->func.content_get = _suggest_list_content_get;
 
+   provider = edi_editor_suggest_provider_get(editor);
    EINA_LIST_FOREACH(list, l, suggest_it)
      {
         const char *term;
-        term = edi_editor_suggest_provider_get(editor)->summary_get(editor, 
suggest_it);
+        term = provider->summary_get(editor, suggest_it);
 
         if (eina_str_has_prefix(term, word))
           {
@@ -229,7 +231,7 @@ _suggest_list_set(Edi_Editor *editor)
    elm_code_widget_cursor_position_get(editor->entry, &row, &col);
 
    curword = _edi_editor_current_word_get(editor, row, col);
-   list = edi_editor_suggest_provider_get(editor)->lookup(editor, curword);
+   list = edi_editor_suggest_provider_get(editor)->lookup(editor, row, col - 
strlen(curword));
 
    evas_object_data_set(editor->suggest_genlist, "suggest_list", list);
    _suggest_list_update(editor, curword);
diff --git a/src/bin/editor/edi_editor_suggest_provider.h 
b/src/bin/editor/edi_editor_suggest_provider.h
index ecfd114..5e80c97 100644
--- a/src/bin/editor/edi_editor_suggest_provider.h
+++ b/src/bin/editor/edi_editor_suggest_provider.h
@@ -31,7 +31,7 @@ typedef struct _Edi_Editor_Suggest_Provider
 
    void (*add)(Edi_Editor *editor);
    void (*del)(Edi_Editor *editor);
-   Eina_List *(*lookup)(Edi_Editor *editor, const char *word);
+   Eina_List *(*lookup)(Edi_Editor *editor, unsigned int row, unsigned int 
col);
    const char *(*summary_get)(Edi_Editor *editor, Edi_Editor_Suggest_Item 
*item);
    char *(*detail_get)(Edi_Editor *editor, Edi_Editor_Suggest_Item *item);
    void (*item_free)(Edi_Editor_Suggest_Item *item);
diff --git a/src/bin/editor/edi_editor_suggest_provider_c.c 
b/src/bin/editor/edi_editor_suggest_provider_c.c
index 6ddb68f..40e0e60 100644
--- a/src/bin/editor/edi_editor_suggest_provider_c.c
+++ b/src/bin/editor/edi_editor_suggest_provider_c.c
@@ -2,6 +2,13 @@
 # include "config.h"
 #endif
 
+#if HAVE_LIBCLANG
+#include <clang-c/Index.h>
+#endif
+
+#include <Eina.h>
+#include <Elementary.h>
+
 #include "edi_editor_suggest_provider.h"
 
 #include "edi_config.h"
@@ -89,7 +96,7 @@ _edi_editor_sugget_c_del(Edi_Editor *editor)
 }
 
 Eina_List *
-_edi_editor_suggest_c_lookup(Edi_Editor *editor, const char *curword)
+_edi_editor_suggest_c_lookup(Edi_Editor *editor, unsigned int row, unsigned 
int col)
 {
    Eina_List *list = NULL;
 
@@ -97,22 +104,21 @@ _edi_editor_suggest_c_lookup(Edi_Editor *editor, const 
char *curword)
    CXCodeCompleteResults *res;
    struct CXUnsavedFile unsaved_file;
    Elm_Code *code;
-   const char *path;
-   unsigned int col, row;
+   const char *path = NULL;
 
    if (!editor->as_unit)
      return list;
 
    code = elm_code_widget_code_get(editor->entry);
-   path = elm_code_file_path_get(code->file);
-   elm_code_widget_cursor_position_get(editor->entry, &row, &col);
+   if (code->file->file)
+     path = elm_code_file_path_get(code->file);
 
    unsaved_file.Filename = path;
    unsaved_file.Contents = elm_code_widget_text_between_positions_get(
                                                  editor->entry, 1, 1, col, 
row);
    unsaved_file.Length = strlen(unsaved_file.Contents);
 
-   res = clang_codeCompleteAt(editor->as_unit, path, row, col - 
strlen(curword),
+   res = clang_codeCompleteAt(editor->as_unit, path, row, col,
                               &unsaved_file, 1,
                               CXCodeComplete_IncludeMacros |
                               CXCodeComplete_IncludeCodePatterns);
diff --git a/src/tests/Makefile.am b/src/tests/Makefile.am
index 39d1935..96a49f9 100644
--- a/src/tests/Makefile.am
+++ b/src/tests/Makefile.am
@@ -4,18 +4,24 @@ CLEANFILES = check-results.xml
 if EFL_HAVE_TESTS
 
 check_PROGRAMS = edi_suite
+efl_cflags_safe = '@EFL_CFLAGS@'
+clang_include = '$(CLANG_INCLUDE)'
 
 edi_suite_SOURCES = \
 edi_test_path.c \
 edi_test_content_provider.c \
+edi_test_editor_suggest_provider.c \
+edi_test_editor_suggest_provider_c.c \
 edi_suite.c
 
 edi_suite_CPPFLAGS = -I$(top_builddir)/src/lib/ -I$(top_builddir)/src/bin/ \
 -I$(top_srcdir)/src/lib \
 -I$(top_srcdir)/src/bin \
--DPACKAGE_TESTS_DIR=\"$(top_srcdir)/src/tests/\" \
+-DPACKAGE_TESTS_DIR=\"`pwd`/$(top_srcdir)/src/tests/\" \
 -DPACKAGE_BUILD_DIR=\"`pwd`/$(top_builddir)/src/tests/\" \
 -DEFL_BETA_API_SUPPORT \
+-DEFL_CFLAGS=\"$(efl_cflags_safe)\" \
+-DCLANG_INCLUDES=\"$(clang_include)\" \
 @EFL_CFLAGS@ \
 @CHECK_CFLAGS@
 
diff --git a/src/tests/edi_suite.c b/src/tests/edi_suite.c
index 480a913..7bfda5b 100644
--- a/src/tests/edi_suite.c
+++ b/src/tests/edi_suite.c
@@ -15,7 +15,9 @@ static const struct {
 } tests[] = {
   { "basic", edi_test_basic },
   { "path", edi_test_path },
-  { "content_provider", edi_test_content_provider }
+  { "content_provider", edi_test_content_provider },
+  { "editor_suggest_provider", edi_test_editor_suggest_provider },
+  { "editor_suggest_provider_c", edi_test_editor_suggest_provider_c }
 };
 
 START_TEST(edi_initialization)
diff --git a/src/tests/edi_suite.h b/src/tests/edi_suite.h
index e5c6169..da89f51 100644
--- a/src/tests/edi_suite.h
+++ b/src/tests/edi_suite.h
@@ -9,5 +9,7 @@ void edi_test_basic(TCase *tc);
 void edi_test_console(TCase *tc);
 void edi_test_path(TCase *tc);
 void edi_test_content_provider(TCase *tc);
+void edi_test_editor_suggest_provider(TCase *tc);
+void edi_test_editor_suggest_provider_c(TCase *tc);
 
 #endif /* _EDI_SUITE_H */
diff --git a/src/tests/edi_test_editor_suggest_provider.c 
b/src/tests/edi_test_editor_suggest_provider.c
new file mode 100644
index 0000000..fab6e86
--- /dev/null
+++ b/src/tests/edi_test_editor_suggest_provider.c
@@ -0,0 +1,26 @@
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "editor/edi_editor_suggest_provider.c"
+
+#include "edi_suite.h"
+
+START_TEST (edi_test_editor_suggest_provider_lookup)
+{
+   Edi_Editor editor;
+   Edi_Editor_Suggest_Provider *provider;
+
+   editor.mimetype = "text/x-csrc";
+   provider = edi_editor_suggest_provider_get(&editor);
+
+   ck_assert(provider);
+   ck_assert_str_eq(provider->id, "c");
+}
+END_TEST
+
+void edi_test_editor_suggest_provider(TCase *tc)
+{
+   tcase_add_test(tc, edi_test_editor_suggest_provider_lookup);
+}
+
diff --git a/src/tests/edi_test_editor_suggest_provider_c.c 
b/src/tests/edi_test_editor_suggest_provider_c.c
new file mode 100644
index 0000000..a7f45c4
--- /dev/null
+++ b/src/tests/edi_test_editor_suggest_provider_c.c
@@ -0,0 +1,106 @@
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <Elementary.h>
+
+#include "../bin/edi_private.h"
+#include "editor/edi_editor_suggest_provider.h"
+
+#include "edi_suite.h"
+
+static Elm_Code *
+_setup(Edi_Editor *editor, Evas_Object *win)
+{
+   Elm_Code *code;
+   Elm_Code_Widget *widget;
+
+   code = elm_code_create();
+   elm_code_file_open(code, PACKAGE_TESTS_DIR "test.c");
+
+   widget = elm_code_widget_add(win, code);
+   editor->entry = widget;
+   elm_code_widget_cursor_position_set(widget, 3, 12);
+
+   return code;
+}
+
+static Eina_List *
+_filtered_list_get(Edi_Editor *editor, Edi_Editor_Suggest_Provider *provider,
+                   Eina_List *list, const char *word)
+{
+   Edi_Editor_Suggest_Item *suggest_it;
+   Eina_List *l, *ret = NULL;
+
+   EINA_LIST_FOREACH(list, l, suggest_it)
+     {
+        const char *term;
+        term = provider->summary_get(editor, suggest_it);
+
+        if (eina_str_has_prefix(term, word))
+          ret = eina_list_append(ret, suggest_it);
+     }
+
+   return ret;
+}
+
+START_TEST (edi_test_editor_suggest_provider_c_lookup)
+{
+   Elm_Code *code;
+   Evas_Object *win;
+   Edi_Editor editor;
+   Edi_Editor_Suggest_Provider *provider;
+   Eina_List *list;
+
+   elm_init(1, NULL);
+   win = elm_win_add(NULL, "entry", ELM_WIN_BASIC);
+   editor.mimetype = "text/x-csrc";
+   code = _setup(&editor, win);
+
+   provider = edi_editor_suggest_provider_get(&editor);
+   provider->add(&editor);
+   list = provider->lookup(&editor, 3, 12);
+   ck_assert_int_eq(eina_list_count(_filtered_list_get(&editor, provider, 
list, "_xyzabc_")), 1);
+
+   provider->del(&editor);
+   elm_code_free(code);
+   elm_shutdown();
+}
+END_TEST
+
+START_TEST (edi_test_editor_suggest_provider_c_summary)
+{
+   Elm_Code *code;
+   Evas_Object *win;
+   Edi_Editor editor;
+   Edi_Editor_Suggest_Provider *provider;
+   Edi_Editor_Suggest_Item *item;
+   Eina_List *list;
+   const char *key;
+
+   elm_init(1, NULL);
+   win = elm_win_add(NULL, "entry", ELM_WIN_BASIC);
+   editor.mimetype = "text/x-csrc";
+   code = _setup(&editor, win);
+
+   provider = edi_editor_suggest_provider_get(&editor);
+   provider->add(&editor);
+   list = provider->lookup(&editor, 3, 12);
+   item = eina_list_nth(_filtered_list_get(&editor, provider, list, 
"_xyzabc_"), 0);
+   key = provider->summary_get(&editor, item);
+   ck_assert_str_eq(key, "_xyzabc_test");
+
+   provider->del(&editor);
+   elm_code_free(code);
+   elm_shutdown();
+}
+END_TEST
+
+void edi_test_editor_suggest_provider_c(TCase *tc)
+{
+#if HAVE_LIBCLANG
+   tcase_add_test(tc, edi_test_editor_suggest_provider_c_lookup);
+   tcase_add_test(tc, edi_test_editor_suggest_provider_c_summary);
+#endif
+}
+
diff --git a/src/tests/test.c b/src/tests/test.c
new file mode 100644
index 0000000..1fc99f1
--- /dev/null
+++ b/src/tests/test.c
@@ -0,0 +1,3 @@
+static void _xyzabc_test() {}
+static void _thing() {
+   _xyzabc_

-- 


Reply via email to