test_shim2.mod 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. MODULE test_shim2 ;
  2. (*
  3. m2-GTK4 test - the shim's generic GListModel (m2_list_model_new).
  4. A Modula-2 model with get_n_items/get_item callbacks is queried
  5. through the GListModel API. Requires GTK initialised (and so a
  6. display).
  7. *)
  8. FROM Gtk IMPORT gtk_init;
  9. FROM M2GtkShim IMPORT m2_list_model_new;
  10. FROM GtkStringObject IMPORT gtk_string_object_new,
  11. gtk_string_object_get_string, gtk_string_object_get_type;
  12. FROM GListModel IMPORT g_list_model_get_n_items, g_list_model_get_item;
  13. FROM GObject IMPORT g_object_unref;
  14. FROM GtkUtils IMPORT CStrToM2;
  15. FROM SYSTEM IMPORT ADDRESS, ADR;
  16. FROM libc IMPORT printf;
  17. VAR
  18. failed: BOOLEAN;
  19. PROCEDURE Check (condition: BOOLEAN; what: ARRAY OF CHAR);
  20. BEGIN
  21. IF NOT condition THEN
  22. printf("FAIL: %s\n", what);
  23. failed := TRUE
  24. END
  25. END Check;
  26. PROCEDURE GetNItems (user: ADDRESS) : CARDINAL;
  27. BEGIN
  28. RETURN 3
  29. END GetNItems;
  30. (* Return a new reference (transfer full). *)
  31. PROCEDURE GetItem (position: CARDINAL; user: ADDRESS) : ADDRESS;
  32. BEGIN
  33. IF position = 0 THEN RETURN gtk_string_object_new("A") END;
  34. IF position = 1 THEN RETURN gtk_string_object_new("B") END;
  35. RETURN gtk_string_object_new("C")
  36. END GetItem;
  37. VAR
  38. model, item: ADDRESS;
  39. buf: ARRAY [0..31] OF CHAR;
  40. BEGIN
  41. failed := FALSE;
  42. gtk_init();
  43. model := m2_list_model_new(ADR(GetNItems), ADR(GetItem),
  44. gtk_string_object_get_type(), NIL, NIL);
  45. Check(model # NIL, "model created");
  46. Check(g_list_model_get_n_items(model) = 3, "n items");
  47. item := g_list_model_get_item(model, 1);
  48. CStrToM2(gtk_string_object_get_string(item), buf);
  49. Check((buf[0] = 'B') AND (buf[1] = 0C), "item 1 is B");
  50. g_object_unref(item);
  51. g_object_unref(model);
  52. IF failed THEN
  53. printf("test_shim2: FAIL\n");
  54. HALT(1)
  55. ELSE
  56. printf("test_shim2: PASS\n");
  57. HALT(0)
  58. END
  59. END test_shim2.