test_demos.mod 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. MODULE test_demos ;
  2. (*
  3. m2-GTK4 test - the m2 gtk-demo registry (demos/). Checks that the
  4. registry is populated and that every demo can be built and torn down.
  5. Requires a display.
  6. *)
  7. FROM GtkApplication IMPORT gtk_application_new;
  8. FROM Gio IMPORT g_application_run, g_application_quit;
  9. FROM GtkDemo IMPORT Count, TitleOf, KeywordsOf, BuildByTitle;
  10. FROM GtkUtils IMPORT Connect;
  11. FROM SYSTEM IMPORT ADDRESS, ADR;
  12. FROM libc IMPORT printf;
  13. CONST
  14. AppId = "org.example.m2gtk4.TestDemos";
  15. VAR
  16. app: ADDRESS;
  17. failures: INTEGER;
  18. PROCEDURE StrEqual (a, b: ARRAY OF CHAR) : BOOLEAN;
  19. VAR
  20. i: CARDINAL;
  21. BEGIN
  22. i := 0;
  23. WHILE (a[i] # 0C) AND (b[i] # 0C) DO
  24. IF a[i] # b[i] THEN RETURN FALSE END;
  25. INC(i)
  26. END;
  27. RETURN a[i] = b[i]
  28. END StrEqual;
  29. PROCEDURE Check (cond: BOOLEAN; msg: ARRAY OF CHAR);
  30. BEGIN
  31. IF cond THEN
  32. printf(" ok - %s\n", msg)
  33. ELSE
  34. printf(" NOT OK - %s\n", msg);
  35. INC(failures)
  36. END
  37. END Check;
  38. (* build a demo once (creates + shows its window), then toggle it off. *)
  39. PROCEDURE BuildAndClose (title: ARRAY OF CHAR);
  40. VAR
  41. w: ADDRESS;
  42. BEGIN
  43. w := BuildByTitle(title, NIL);
  44. Check(w # NIL, title);
  45. IF w # NIL THEN
  46. w := BuildByTitle(title, NIL)
  47. END
  48. END BuildAndClose;
  49. PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS);
  50. VAR
  51. t, kw: ARRAY [0..127] OF CHAR;
  52. BEGIN
  53. failures := 0;
  54. Check(Count() = 5, "registry reports 5 demos");
  55. TitleOf(0, t);
  56. Check(StrEqual(t, "Links"), "demo 0 is 'Links'");
  57. KeywordsOf(0, kw);
  58. Check(NOT StrEqual(kw, ""), "demo 0 has search keywords");
  59. Check(BuildByTitle("NoSuchDemo", NIL) = NIL, "unknown demo yields NIL");
  60. BuildAndClose("Links");
  61. BuildAndClose("List Box");
  62. BuildAndClose("Flow Box");
  63. BuildAndClose("Expander");
  64. BuildAndClose("CSS Basics");
  65. IF failures = 0 THEN
  66. printf("test_demos: PASS\n")
  67. ELSE
  68. printf("test_demos: FAIL (%d)\n", failures)
  69. END;
  70. g_application_quit(application)
  71. END OnActivate;
  72. VAR
  73. rc: INTEGER;
  74. BEGIN
  75. failures := 1; (* set to 0 by OnActivate; stays 1 if it never runs *)
  76. app := gtk_application_new(AppId, 0);
  77. IF app = NIL THEN
  78. printf("test_demos: FAIL (no app)\n");
  79. HALT(1)
  80. END;
  81. Connect(app, "activate", ADR(OnActivate), NIL);
  82. rc := g_application_run(app, 0, NIL);
  83. IF failures = 0 THEN
  84. HALT(0)
  85. ELSE
  86. HALT(1)
  87. END
  88. END test_demos.