Yay, finally. :)

On 22/04/14 08:21, Daniel Zaoui wrote:
> jackdanielz pushed a commit to branch master.
>
> http://git.enlightenment.org/core/efl.git/commit/?id=d95a114db7ef950fe2ded3ea9b36cad1a621e294
>
> commit d95a114db7ef950fe2ded3ea9b36cad1a621e294
> Author: Daniel Zaoui <[email protected]>
> Date:   Mon Apr 21 09:36:44 2014 +0300
>
>      Eolian: infras for tests + first test
> ---
>   src/Makefile_Eolian.am                |  28 +++++
>   src/tests/eolian/data/class_simple.eo |  31 +++++
>   src/tests/eolian/eolian_suite.c       | 206 
> ++++++++++++++++++++++++++++++++++
>   src/tests/eolian/eolian_suite.h       |  10 ++
>   4 files changed, 275 insertions(+)
>
> diff --git a/src/Makefile_Eolian.am b/src/Makefile_Eolian.am
> index 6807557..326727c 100644
> --- a/src/Makefile_Eolian.am
> +++ b/src/Makefile_Eolian.am
> @@ -55,3 +55,31 @@ am__v_RAGEL_0 = @echo "  RAGEL   " $@;
>
>   lib/eolian/eo_lexer.c: lib/eolian/eo_lexer.rl
>   endif
> +
> +### Unit tests
> +
> +if EFL_ENABLE_TESTS
> +check_PROGRAMS += \
> +tests/eolian/eolian_suite
> +
> +tests_eolian_eolian_suite_SOURCES = \
> +tests/eolian/eolian_suite.c \
> +tests/eolian/eolian_suite.h
> +
> +tests_eolian_eolian_suite_CPPFLAGS = -I$(top_builddir)/src/lib/efl \
> +-DTESTS_BUILD_DIR=\"$(top_builddir)/src/tests/eolian\" \
> +-DPACKAGE_DATA_DIR=\"$(top_srcdir)/src/tests/eolian\" \
> +@CHECK_CFLAGS@ \
> +@EOLIAN_CFLAGS@
> +TESTS += tests/eolian/eolian_suite
> +
> +tests_eolian_eolian_suite_LDADD = @CHECK_LIBS@ @USE_EOLIAN_LIBS@
> +tests_eolian_eolian_suite_DEPENDENCIES = @USE_EOLIAN_INTERNAL_LIBS@
> +
> +eoliandatafilesdir = $(datadir)/eolian/data
> +eoliandatafiles_DATA = tests/eolian/data/class_simple.eo
> +
> +endif
> +
> +EXTRA_DIST += \
> +tests/eolian/data/class_simple.eo
> diff --git a/src/tests/eolian/data/class_simple.eo 
> b/src/tests/eolian/data/class_simple.eo
> new file mode 100644
> index 0000000..3abbc3b
> --- /dev/null
> +++ b/src/tests/eolian/data/class_simple.eo
> @@ -0,0 +1,31 @@
> +class Simple {
> +   /*@ Class Desc Simple */
> +   legacy_prefix: evas_object_simple;
> +   eo_prefix: evas_obj_simple;
> +   data: Evas_Simple_Data;
> +   properties {
> +      a {
> +         set {
> +            /*@
> +            comment a::set */
> +            return Eina_Bool (EINA_TRUE);
> +         }
> +         get {
> +         }
> +         values {
> +            int value; /*@ Value description */
> +         }
> +      }
> +   }
> +   methods {
> +      foo {
> +         /*@ comment foo */
> +         params {
> +            @in int a; /*@ a */
> +            @inout char *b;
> +            @out double c;
> +         }
> +         return char *(NULL);
> +      }
> +   }
> +};
> diff --git a/src/tests/eolian/eolian_suite.c b/src/tests/eolian/eolian_suite.c
> new file mode 100644
> index 0000000..7534e57
> --- /dev/null
> +++ b/src/tests/eolian/eolian_suite.c
> @@ -0,0 +1,206 @@
> +#ifdef HAVE_CONFIG_H
> +# include <config.h>
> +#endif
> +
> +#include <stdlib.h>
> +#include <stdio.h>
> +
> +#include "Eolian.h"
> +#include "eolian_suite.h"
> +
> +typedef struct _Eolian_Test_Case Eolian_Test_Case;
> +
> +struct _Eolian_Test_Case
> +{
> +   const char *test_case;
> +   void      (*build)(TCase *tc);
> +};
> +
> +START_TEST(eolian_simple_parsing)
> +{
> +   Eolian_Function fid = NULL;
> +   const char *string = NULL, *ptype = NULL, *pname = NULL;
> +   Eolian_Parameter_Dir dir = EOLIAN_IN_PARAM;
> +   const char *class_name = "Simple";
> +   const Eina_List *list = NULL;
> +   Eolian_Function_Parameter param = NULL;
> +
> +   eolian_init();
> +   /* Parsing */
> +   fail_if(!eolian_eo_file_parse(PACKAGE_DATA_DIR"/data/class_simple.eo"));
> +   
> fail_if(strcmp(eolian_class_find_by_file(PACKAGE_DATA_DIR"/data/class_simple.eo"),
>  class_name));
> +
> +   /* Class */
> +   fail_if(!eolian_class_exists(class_name));
> +   fail_if(eolian_class_type_get(class_name) != EOLIAN_CLASS_REGULAR);
> +   string = eolian_class_description_get(class_name);
> +   fail_if(!string);
> +   fail_if(strcmp(string, "Class Desc Simple"));
> +   fail_if(eolian_class_inherits_list_get(class_name) != NULL);
> +   fail_if(strcmp(eolian_class_legacy_prefix_get(class_name), 
> "evas_object_simple"));
> +   fail_if(strcmp(eolian_class_eo_prefix_get(class_name), 
> "evas_obj_simple"));
> +   fail_if(strcmp(eolian_class_data_type_get(class_name), 
> "Evas_Simple_Data"));
> +
> +   /* Property */
> +   fail_if(!(fid = eolian_class_function_find_by_name(class_name, "a", 
> EOLIAN_PROPERTY)));
> +   fail_if(strcmp(eolian_function_name_get(fid), "a"));
> +   string = eolian_function_description_get(fid, EOLIAN_COMMENT_SET);
> +   fail_if(!string);
> +   fail_if(strcmp(string, "comment a::set"));
> +   string = eolian_function_description_get(fid, EOLIAN_COMMENT_GET);
> +   fail_if(string);
> +   /* Function return */
> +   string = eolian_function_return_type_get(fid, EOLIAN_PROP_SET);
> +   fail_if(!string);
> +   fail_if(strcmp(string, "Eina_Bool"));
> +   string = eolian_function_return_dflt_value_get(fid, EOLIAN_PROP_SET);
> +   fail_if(!string);
> +   fail_if(strcmp(string, "EINA_TRUE"));
> +   string = eolian_function_return_type_get(fid, EOLIAN_PROP_GET);
> +   fail_if(string);
> +
> +   /* Function parameters */
> +   fail_if(eolian_property_keys_list_get(fid) != NULL);
> +   fail_if(!(list = eolian_property_values_list_get(fid)));
> +   fail_if(eina_list_count(list) != 1);
> +   fail_if(!(param = eina_list_data_get(list)));
> +   eolian_parameter_information_get(param, NULL, &ptype, &pname, &string);
> +   fail_if(strcmp(ptype, "int"));
> +   fail_if(strcmp(pname, "value"));
> +   fail_if(strcmp(string, "Value description"));
> +
> +   /* Method */
> +   fail_if(!(fid = eolian_class_function_find_by_name(class_name, "foo", 
> EOLIAN_METHOD)));
> +   string = eolian_function_description_get(fid, EOLIAN_COMMENT);
> +   fail_if(!string);
> +   fail_if(strcmp(string, "comment foo"));
> +   /* Function return */
> +   string = eolian_function_return_type_get(fid, EOLIAN_METHOD);
> +   fail_if(!string);
> +   fail_if(strcmp(string, "char *"));
> +   string = eolian_function_return_dflt_value_get(fid, EOLIAN_METHOD);
> +   fail_if(!string);
> +   fail_if(strcmp(string, "NULL"));
> +
> +   /* Function parameters */
> +   fail_if(!(list = eolian_parameters_list_get(fid)));
> +   fail_if(eina_list_count(list) != 3);
> +   fail_if(!(param = eina_list_nth(list, 0)));
> +   eolian_parameter_information_get(param, &dir, &ptype, &pname, &string);
> +   fail_if(dir != EOLIAN_IN_PARAM);
> +   fail_if(strcmp(ptype, "int"));
> +   fail_if(strcmp(pname, "a"));
> +   fail_if(!string || strcmp(string, "a"));
> +   fail_if(!(param = eina_list_nth(list, 1)));
> +   eolian_parameter_information_get(param, &dir, &ptype, &pname, &string);
> +   fail_if(dir != EOLIAN_INOUT_PARAM);
> +   fail_if(strcmp(ptype, "char *"));
> +   fail_if(strcmp(pname, "b"));
> +   fail_if(string);
> +   fail_if(!(param = eina_list_nth(list, 2)));
> +   eolian_parameter_information_get(param, &dir, &ptype, &pname, &string);
> +   fail_if(dir != EOLIAN_OUT_PARAM);
> +   fail_if(strcmp(ptype, "double"));
> +   fail_if(strcmp(pname, "c"));
> +   fail_if(string);
> +
> +   eolian_shutdown();
> +}
> +END_TEST
> +
> +static void eolian_parsing_test(TCase *tc)
> +{
> +   tcase_add_test(tc, eolian_simple_parsing);
> +}
> +
> +static const Eolian_Test_Case etc[] = {
> +  { "Eolian Parsing", eolian_parsing_test},
> +  { NULL, NULL }
> +};
> +
> +static void
> +_list_tests(void)
> +{
> +  const Eolian_Test_Case *itr;
> +
> +   itr = etc;
> +   fputs("Available Test Cases:\n", stderr);
> +   for (; itr->test_case; itr++)
> +     fprintf(stderr, "\t%s\n", itr->test_case);
> +}
> +
> +static Eina_Bool
> +_use_test(int argc, const char **argv, const char *test_case)
> +{
> +   if (argc < 1)
> +     return 1;
> +
> +   for (; argc > 0; argc--, argv++)
> +     if (strcmp(test_case, *argv) == 0)
> +       return 1;
> +   return 0;
> +}
> +
> +static Suite *
> +eolian_suite_build(int argc, const char **argv)
> +{
> +   TCase *tc;
> +   Suite *s;
> +   int i;
> +
> +   s = suite_create("Eolian");
> +
> +   for (i = 0; etc[i].test_case; ++i)
> +     {
> +     if (!_use_test(argc, argv, etc[i].test_case)) continue;
> +     tc = tcase_create(etc[i].test_case);
> +
> +     etc[i].build(tc);
> +
> +     suite_add_tcase(s, tc);
> +     tcase_set_timeout(tc, 0);
> +     }
> +
> +   return s;
> +}
> +
> +int
> +main(int argc, char **argv)
> +{
> +   Suite *s;
> +   SRunner *sr;
> +   int i, failed_count;
> +   eolian_init();
> +   setenv("CK_FORK", "no", 0);
> +
> +   for (i = 1; i < argc; i++)
> +     if ((strcmp(argv[i], "-h") == 0) ||
> +      (strcmp(argv[i], "--help") == 0))
> +       {
> +       fprintf(stderr, "Usage:\n\t%s [test_case1 .. [test_caseN]]\n",
> +               argv[0]);
> +       _list_tests();
> +       return 0;
> +       }
> +     else if ((strcmp(argv[i], "-l") == 0) ||
> +           (strcmp(argv[i], "--list") == 0))
> +       {
> +       _list_tests();
> +       return 0;
> +       }
> +
> +   putenv("EFL_RUN_IN_TREE=1");
> +
> +   s = eolian_suite_build(argc - 1, (const char **)argv + 1);
> +   sr = srunner_create(s);
> +
> +   srunner_set_xml(sr, TESTS_BUILD_DIR "/check-results.xml");
> +
> +   srunner_run_all(sr, CK_ENV);
> +   failed_count = srunner_ntests_failed(sr);
> +   srunner_free(sr);
> +
> +   eolian_shutdown();
> +
> +   return (failed_count == 0) ? 0 : 255;
> +}
> diff --git a/src/tests/eolian/eolian_suite.h b/src/tests/eolian/eolian_suite.h
> new file mode 100644
> index 0000000..210b301
> --- /dev/null
> +++ b/src/tests/eolian/eolian_suite.h
> @@ -0,0 +1,10 @@
> +#ifndef _EOLIAN_SUITE_H
> +#define _EOLIAN_SUITE_H
> +
> +#include <check.h>
> +
> +void eolian_test_init(TCase *tc);
> +void eolian_test_general(TCase *tc);
> +
> +#endif /* _EOLIAN_SUITE_H */
> +
>


------------------------------------------------------------------------------
Start Your Social Network Today - Download eXo Platform
Build your Enterprise Intranet with eXo Platform Software
Java Based Open Source Intranet - Social, Extensible, Cloud Ready
Get Started Now And Turn Your Intranet Into A Collaboration Platform
http://p.sf.net/sfu/ExoPlatform
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to