Commit 12e4875f authored by Mathias Hasselmann's avatar Mathias Hasselmann Committed by Mathias Hasselmann
Browse files

test for libenchant introducing some echant bindings test enchant bindings

2007-08-18  Mathias Hasselmann  <mathias.hasselmann@gmx.de>

	* configure.ac: test for libenchant
	* vapi/enchant.vala: introducing some echant bindings
	* tests/Makefile.am, tests/testenchant.vala: test enchant bindings

svn path=/trunk/; revision=478
parent d8037e9b
2007-08-18 Mathias Hasselmann <mathias.hasselmann@gmx.de>
* configure.ac: test for libenchant
* vapi/enchant.vala: introducing some echant bindings
* tests/Makefile.am, tests/testenchant.vala: test enchant bindings
2007-08-17 Mathias Hasselmann <mathias.hasselmann@gmx.de>
* vapi/libglade-2.0.vala: revert last change: the field
......
......@@ -30,11 +30,19 @@ AC_ARG_ENABLE(vapigen, AS_HELP_STRING([--enable-vapigen], [Enable VAPI generator
AM_CONDITIONAL(ENABLE_VAPIGEN, test x$enable_vapigen = xyes)
GLIB_REQUIRED=2.10.0
ENCHANT_REQUIRED=1.3.0
PKG_CHECK_MODULES(GLIB, glib-2.0 >= $GLIB_REQUIRED gobject-2.0 >= $GLIB_REQUIRED)
AC_SUBST(GLIB_CFLAGS)
AC_SUBST(GLIB_LIBS)
PKG_CHECK_MODULES(ENCHANT, enchant >= $ENCHANT_REQUIRED, have_enchant=yes, have_enchant=no)
AM_CONDITIONAL(HAVE_ENCHANT, test x$have_enchant = xyes)
AC_SUBST(ENCHANT_CFLAGS)
AC_SUBST(ENCHANT_LIBS)
AC_CONFIG_FILES([Makefile
vala-1.0.pc
gee/Makefile
......
NULL =
INCLUDES = \
$(GLIB_CFLAGS) \
$(ENCHANT_CFLAGS) \
$(NULL)
AM_LDFLAGS = \
$(GLIB_LIBS) \
$(ENCHANT_LIBS) \
$(NULL)
BUILT_SOURCES = \
$(NULL)
noinst_PROGRAMS = \
$(NULL)
if HAVE_ENCHANT
BUILT_SOURCES += testenchant.stamp
noinst_PROGRAMS += testenchant
endif
testenchant_SOURCES = \
testenchant.stamp \
testenchant.c \
testenchant.h \
testenchant.vala \
$(NULL)
testenchant.stamp: $(filter %.vala,$(testenchant_SOURCES))
$(VALAC) --vapidir $(srcdir)/../vapi --pkg enchant $^
touch $@
TESTS_ENVIRONMENT = $(srcdir)/testrunner.sh
TESTS = \
......@@ -106,4 +136,8 @@ EXTRA_DIST = \
test-031.out \
test-032.out \
test-033.out \
\
testenchant.stamp \
testenchant.vala \
$(NULL)
using Enchant;
using GLib;
class TestEnchant {
static void info (string message) {
stdout.printf ("INFO: %s\n", message);
}
static void test (string message, bool result) {
stdout.printf ("TEST: %s: %s\n", message, result ? "SUCCESS" : "FAILURE");
}
static void main (string[] args) {
Broker broker = new Broker ();
weak Dict dict;
info ("providers for broker %p".printf (broker));
broker.describe (broker_describe_cb);
info ("dictionaries for broker %p".printf (broker));
broker.list_dicts (dict_describe_cb);
dict = broker.request_dict ("invalid-tag");
test ("requesting invalid dictionary", null == dict);
info ("broker error message".printf (broker.get_error ()));
dict = broker.request_dict ("en");
test ("requesting english dictionary", null != dict);
test ("broker error is null", null == broker.get_error ());
info ("description of dictionary %p".printf (dict));
dict.describe (dict_describe_cb);
var text = "The quick prown fox jummps over the lasy dok".split (" ");
foreach (string word in text) {
weak string[] suggestions;
string result;
do { // FIXME: Bug 467896
switch (dict.check (word)) {
case 0:
result = "good";
break;
case 1:
suggestions = dict.suggest (word);
result = "bad (%d suggestions: %s)".printf (suggestions.length, string.joinv (", ", suggestions));
break;
case -1:
result = "error: %s".printf (dict.get_error ());
break;
default:
assert_not_reached ();
break;
}
} while (false);
info ("%s: %s".printf (word, result));
}
var bad_word = "the:colons:make:this:a:bad:word";
int result;
result = dict.is_in_session (bad_word);
test ("bad word is not in session", 0 == result);
result = dict.check (bad_word);
test ("bad word is rejected", 1 == result);
info ("adding bad word to session");
dict.add_to_session (bad_word);
result = dict.is_in_session (bad_word);
test ("bad word is in session now", 1 == result);
result = dict.check (bad_word);
test ("bad word is accepted now", 0 == result);
broker.free_dict (dict);
dict = null;
}
static void broker_describe_cb (string name, string desc, string libname) {
info ("- %s (%s) - %s".printf (name, desc, libname));
}
static void dict_describe_cb (string language, string provider_name, string provider_desc, string provider_libname) {
info ("- %s (%s) - %s".printf (language, provider_desc, provider_libname));
}
}
[CCode (cname_prefix = "enchant_", cheader_filename = "enchant.h")]
namespace Enchant {
public static delegate void BrokerDescribeFn (string provider_name, string provider_desc, string provider_dll_file, pointer user_data);
public static delegate void DictDescribeFn (string lang_tag, string provider_name, string provider_desc, string provider_file, pointer user_data);
[ReferenceType (unref_function = "enchant_broker_free")]
public struct Broker {
[CCode (cname = "enchant_broker_init")]
public Broker ();
public weak Dict request_dict (weak string! tag); // FIXME integrate with memory manager
public weak Dict request_pwl_dict (weak string! pwl); // FIXME integrate with memory manager
public void free_dict (Dict! dict); // FIXME integrate with memory manager
public int dict_exists (weak string! tag);
public void set_ordering (weak string! tag, weak string! ordering);
public void describe (BrokerDescribeFn fn, pointer user_data = null);
public void list_dicts (DictDescribeFn fn, pointer user_data = null);
public weak string! get_error ();
}
[ReferenceType ()]
public struct Dict {
public int check (weak string! word, int len = -1);
public weak string[] suggest (weak string! word, int len = -1); // FIXME integrate with memory manager
public void free_string_list (weak string[] string_list); // FIXME integrate with memory manager
public void add_to_session (weak string! word, int len = -1);
public int is_in_session (weak string! word, int len = -1);
public void store_replacement (weak string! mis, int mis_len, weak string! cor, int cor_len);
public void add_to_pwl (weak string! word, int len = -1);
public void describe (DictDescribeFn fn, pointer user_data = null);
[NoArrayLength ()]
public weak string! get_error ();
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment