--- /dev/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));
+ }
+}
--- /dev/null
+[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 ();
+ }
+}