test_expr.mod 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. MODULE test_expr ;
  2. (*
  3. m2-GTK4 test - expressions and the expression-based sorters/filters.
  4. Builds a property expression over GtkStringObjects, uses it in a
  5. GtkStringSorter and a GtkStringFilter, and checks sorting/filtering
  6. through the list models. Requires GTK initialised (and so a display).
  7. *)
  8. FROM Gtk IMPORT gtk_init;
  9. FROM GtkExpression IMPORT gtk_property_expression_new;
  10. FROM GtkStringSorter IMPORT gtk_string_sorter_new,
  11. gtk_string_sorter_set_ignore_case, gtk_string_sorter_get_ignore_case,
  12. gtk_string_sorter_set_collation, gtk_string_sorter_get_collation;
  13. FROM GtkNumericSorter IMPORT gtk_numeric_sorter_new,
  14. gtk_numeric_sorter_set_sort_order, gtk_numeric_sorter_get_sort_order,
  15. GtkSortDescending;
  16. FROM GtkStringFilter IMPORT gtk_string_filter_new,
  17. gtk_string_filter_set_match_mode, gtk_string_filter_get_match_mode,
  18. gtk_string_filter_set_search, GtkStringFilterSubstring;
  19. FROM GtkBoolFilter IMPORT gtk_bool_filter_new, gtk_bool_filter_set_invert,
  20. gtk_bool_filter_get_invert;
  21. FROM GtkStringList IMPORT gtk_string_list_new, gtk_string_list_append;
  22. FROM GtkStringObject IMPORT gtk_string_object_get_type,
  23. gtk_string_object_get_string;
  24. FROM GtkSortListModel IMPORT gtk_sort_list_model_new;
  25. FROM GtkFilterListModel IMPORT gtk_filter_list_model_new;
  26. FROM GListModel IMPORT g_list_model_get_n_items, g_list_model_get_item;
  27. FROM GObject IMPORT g_object_ref, g_object_unref;
  28. FROM GtkUtils IMPORT CStrToM2;
  29. FROM SYSTEM IMPORT ADDRESS, ADR;
  30. FROM libc IMPORT printf;
  31. VAR
  32. failed: BOOLEAN;
  33. PROCEDURE Check (condition: BOOLEAN; what: ARRAY OF CHAR);
  34. BEGIN
  35. IF NOT condition THEN
  36. printf("FAIL: %s\n", what);
  37. failed := TRUE
  38. END
  39. END Check;
  40. VAR
  41. expr, sorter, nsorter, filter, boolf, list, sortModel, filterModel,
  42. item: ADDRESS;
  43. buf: ARRAY [0..31] OF CHAR;
  44. BEGIN
  45. failed := FALSE;
  46. gtk_init();
  47. expr := gtk_property_expression_new(gtk_string_object_get_type(), NIL,
  48. "string", NIL);
  49. Check(expr # NIL, "property expression");
  50. sorter := gtk_string_sorter_new(expr);
  51. gtk_string_sorter_set_ignore_case(sorter, 1);
  52. Check(gtk_string_sorter_get_ignore_case(sorter) # 0, "sorter ignore case");
  53. gtk_string_sorter_set_collation(sorter, 0);
  54. Check(gtk_string_sorter_get_collation(sorter) = 0, "sorter collation");
  55. nsorter := gtk_numeric_sorter_new(NIL);
  56. gtk_numeric_sorter_set_sort_order(nsorter, GtkSortDescending);
  57. Check(gtk_numeric_sorter_get_sort_order(nsorter) = GtkSortDescending,
  58. "numeric sort order");
  59. filter := gtk_string_filter_new(expr);
  60. gtk_string_filter_set_match_mode(filter, GtkStringFilterSubstring);
  61. Check(gtk_string_filter_get_match_mode(filter) = GtkStringFilterSubstring,
  62. "filter match mode");
  63. boolf := gtk_bool_filter_new(NIL);
  64. gtk_bool_filter_set_invert(boolf, 1);
  65. Check(gtk_bool_filter_get_invert(boolf) # 0, "bool filter invert");
  66. list := gtk_string_list_new(NIL);
  67. gtk_string_list_append(list, "banana");
  68. gtk_string_list_append(list, "apple");
  69. gtk_string_list_append(list, "cherry");
  70. (* sorting: apple < banana < cherry *)
  71. sortModel := gtk_sort_list_model_new(g_object_ref(list), sorter);
  72. Check(g_list_model_get_n_items(sortModel) = 3, "sorted count");
  73. item := g_list_model_get_item(sortModel, 0);
  74. CStrToM2(gtk_string_object_get_string(item), buf);
  75. Check(buf[0] = 'a', "sorted first is apple");
  76. g_object_unref(item);
  77. (* filtering: only "banana" contains "an" *)
  78. gtk_string_filter_set_search(filter, "an");
  79. filterModel := gtk_filter_list_model_new(g_object_ref(list), filter);
  80. Check(g_list_model_get_n_items(filterModel) = 1, "filtered count");
  81. IF failed THEN
  82. printf("test_expr: FAIL\n");
  83. HALT(1)
  84. ELSE
  85. printf("test_expr: PASS\n");
  86. HALT(0)
  87. END
  88. END test_expr.