test_utility.mod 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. MODULE test_utility ;
  2. (*
  3. m2-GTK4 test - small utility/feedback widgets: GtkAdjustment,
  4. GtkProgressBar, GtkSpinner, GtkSeparator and GtkImage.
  5. Requires a display.
  6. *)
  7. FROM Gio IMPORT g_application_run, g_application_quit;
  8. FROM GtkApplication IMPORT gtk_application_new;
  9. FROM GtkWindow IMPORT gtk_application_window_new, gtk_window_set_child;
  10. FROM GtkBox IMPORT gtk_box_new, gtk_box_append;
  11. FROM GtkEnums IMPORT GtkVertical, GtkHorizontal;
  12. FROM GtkAdjustment IMPORT gtk_adjustment_new, gtk_adjustment_get_value,
  13. gtk_adjustment_set_value, gtk_adjustment_get_lower, gtk_adjustment_get_upper,
  14. gtk_adjustment_set_upper, gtk_adjustment_get_step_increment,
  15. gtk_adjustment_get_page_increment, gtk_adjustment_get_page_size,
  16. gtk_adjustment_clamp_page;
  17. FROM GtkProgressBar IMPORT gtk_progress_bar_new, gtk_progress_bar_set_fraction,
  18. gtk_progress_bar_get_fraction, gtk_progress_bar_set_show_text,
  19. gtk_progress_bar_get_show_text, gtk_progress_bar_set_text,
  20. gtk_progress_bar_get_text, gtk_progress_bar_pulse;
  21. FROM GtkSpinner IMPORT gtk_spinner_new, gtk_spinner_start, gtk_spinner_stop,
  22. gtk_spinner_set_spinning, gtk_spinner_get_spinning;
  23. FROM GtkSeparator IMPORT gtk_separator_new;
  24. FROM GtkImage IMPORT gtk_image_new_from_icon_name, gtk_image_get_icon_name;
  25. FROM GtkUtils IMPORT Connect, CStrToM2;
  26. FROM SYSTEM IMPORT ADDRESS, ADR;
  27. FROM libc IMPORT printf;
  28. CONST
  29. AppId = "org.example.m2gtk4.TestUtility";
  30. VAR
  31. app: ADDRESS;
  32. passed: BOOLEAN;
  33. PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS);
  34. VAR
  35. window, box, adj, pbar, spinner, sep, image: ADDRESS;
  36. buf: ARRAY [0..63] OF CHAR;
  37. ok: BOOLEAN;
  38. BEGIN
  39. ok := TRUE;
  40. (* --- GtkAdjustment --- *)
  41. adj := gtk_adjustment_new(5.0, 0.0, 100.0, 1.0, 10.0, 20.0);
  42. IF ABS(gtk_adjustment_get_value(adj) - 5.0) > 0.001 THEN ok := FALSE END;
  43. IF ABS(gtk_adjustment_get_lower(adj) - 0.0) > 0.001 THEN ok := FALSE END;
  44. IF ABS(gtk_adjustment_get_upper(adj) - 100.0) > 0.001 THEN ok := FALSE END;
  45. IF ABS(gtk_adjustment_get_step_increment(adj) - 1.0) > 0.001 THEN ok := FALSE END;
  46. IF ABS(gtk_adjustment_get_page_increment(adj) - 10.0) > 0.001 THEN ok := FALSE END;
  47. IF ABS(gtk_adjustment_get_page_size(adj) - 20.0) > 0.001 THEN ok := FALSE END;
  48. gtk_adjustment_set_value(adj, 50.0);
  49. IF ABS(gtk_adjustment_get_value(adj) - 50.0) > 0.001 THEN
  50. printf("adjustment value wrong\n"); ok := FALSE
  51. END;
  52. gtk_adjustment_set_upper(adj, 200.0);
  53. IF ABS(gtk_adjustment_get_upper(adj) - 200.0) > 0.001 THEN ok := FALSE END;
  54. gtk_adjustment_clamp_page(adj, 0.0, 30.0);
  55. (* --- GtkProgressBar --- *)
  56. pbar := gtk_progress_bar_new();
  57. gtk_progress_bar_set_fraction(pbar, 0.25);
  58. IF ABS(gtk_progress_bar_get_fraction(pbar) - 0.25) > 0.001 THEN
  59. printf("progress fraction wrong\n"); ok := FALSE
  60. END;
  61. gtk_progress_bar_set_show_text(pbar, 1);
  62. IF gtk_progress_bar_get_show_text(pbar) # 1 THEN ok := FALSE END;
  63. gtk_progress_bar_set_text(pbar, "25 percent");
  64. CStrToM2(gtk_progress_bar_get_text(pbar), buf);
  65. IF (buf[0] # '2') OR (buf[10] # 0C) THEN
  66. printf("progress text wrong: [%s]\n", buf); ok := FALSE
  67. END;
  68. gtk_progress_bar_pulse(pbar);
  69. (* --- GtkSpinner --- *)
  70. spinner := gtk_spinner_new();
  71. gtk_spinner_start(spinner);
  72. IF gtk_spinner_get_spinning(spinner) # 1 THEN ok := FALSE END;
  73. gtk_spinner_stop(spinner);
  74. IF gtk_spinner_get_spinning(spinner) # 0 THEN ok := FALSE END;
  75. gtk_spinner_set_spinning(spinner, 1);
  76. IF gtk_spinner_get_spinning(spinner) # 1 THEN ok := FALSE END;
  77. (* --- GtkSeparator / GtkImage --- *)
  78. sep := gtk_separator_new(GtkHorizontal);
  79. IF sep = NIL THEN printf("separator NIL\n"); ok := FALSE END;
  80. image := gtk_image_new_from_icon_name("open-menu-symbolic");
  81. CStrToM2(gtk_image_get_icon_name(image), buf);
  82. IF (buf[0] # 'o') OR (buf[18] # 0C) THEN
  83. printf("image icon name wrong: [%s]\n", buf); ok := FALSE
  84. END;
  85. box := gtk_box_new(GtkVertical, 6);
  86. gtk_box_append(box, pbar);
  87. gtk_box_append(box, spinner);
  88. gtk_box_append(box, sep);
  89. gtk_box_append(box, image);
  90. window := gtk_application_window_new(application);
  91. gtk_window_set_child(window, box);
  92. passed := ok;
  93. g_application_quit(application)
  94. END OnActivate;
  95. VAR
  96. rc: INTEGER;
  97. BEGIN
  98. passed := FALSE;
  99. app := gtk_application_new(AppId, 0);
  100. IF app = NIL THEN
  101. printf("test_utility: FAIL (no app)\n");
  102. HALT(1)
  103. END;
  104. Connect(app, "activate", ADR(OnActivate), NIL);
  105. rc := g_application_run(app, 0, NIL);
  106. IF passed THEN
  107. printf("test_utility: PASS\n");
  108. HALT(0)
  109. ELSE
  110. printf("test_utility: FAIL\n");
  111. HALT(1)
  112. END
  113. END test_utility.