Skip to content

Commit f7e0109

Browse files
test reorg
1 parent 7b953a5 commit f7e0109

File tree

3 files changed

+106
-78
lines changed

3 files changed

+106
-78
lines changed

test/eventloop.jl

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
@testset "eventloop" begin
2+
# make sure all shown widgets have been destroyed, otherwise the eventloop
3+
# won't stop automatically
4+
@test length(Gtk.shown_widgets) == 0
5+
6+
@testset "control" begin
7+
before = Gtk.auto_idle[]
8+
9+
@testset "basics" begin
10+
Gtk.auto_idle[] = true
11+
Gtk.enable_eventloop(false)
12+
@test !Gtk.is_eventloop_running()
13+
Gtk.enable_eventloop(true)
14+
@test Gtk.is_eventloop_running()
15+
Gtk.enable_eventloop(false)
16+
@test !Gtk.is_eventloop_running()
17+
end
18+
19+
@testset "pause_eventloop" begin
20+
21+
@testset "pauses then restarts" begin
22+
Gtk.enable_eventloop(true)
23+
@test Gtk.is_eventloop_running()
24+
Gtk.pause_eventloop() do
25+
@test !Gtk.is_eventloop_running()
26+
end
27+
@test Gtk.is_eventloop_running()
28+
end
29+
30+
@testset "doesn't restart a stopping eventloop" begin
31+
Gtk.enable_eventloop(false)
32+
c = GtkCanvas()
33+
win = GtkWindow(c)
34+
showall(win)
35+
sleep(1)
36+
@test Gtk.is_eventloop_running()
37+
destroy(win)
38+
# the eventloop is likely still stopping here
39+
Gtk.pause_eventloop() do
40+
@test !Gtk.is_eventloop_running()
41+
end
42+
@test !Gtk.is_eventloop_running()
43+
end
44+
45+
@testset "observes auto_idle = false" begin
46+
Gtk.auto_idle[] = false
47+
Gtk.enable_eventloop(true)
48+
Gtk.pause_eventloop() do
49+
@test Gtk.is_eventloop_running()
50+
end
51+
@test Gtk.is_eventloop_running()
52+
end
53+
54+
@testset "observes force = true" begin
55+
Gtk.auto_idle[] = false
56+
Gtk.enable_eventloop(true)
57+
Gtk.pause_eventloop(force = true) do
58+
@test !Gtk.is_eventloop_running()
59+
end
60+
@test Gtk.is_eventloop_running()
61+
end
62+
63+
# Note: Test disabled because this isn't true. The event loop takes some time to stop.
64+
# TODO: Figure out how to wait in the handle_auto_idle callbacks
65+
66+
# @testset "eventloop is stopped immediately after a destroy(win) completes" begin
67+
# c = GtkCanvas()
68+
# win = GtkWindow(c)
69+
# showall(win)
70+
# @test Gtk.is_eventloop_running()
71+
# destroy(win)
72+
# @test !Gtk.is_eventloop_running()
73+
# end
74+
end
75+
76+
Gtk.auto_idle[] = before
77+
end
78+
79+
@testset "Multithreading" begin
80+
@testset "no blocking when eventloop is paused" begin
81+
Gtk.auto_idle[] = true
82+
Threads.nthreads() < 1 && @warn "Threads.nthreads() == 1. Multithread blocking tests are not effective"
83+
84+
function multifoo()
85+
Threads.@threads for _ in 1:Threads.nthreads()
86+
sleep(0.1)
87+
end
88+
end
89+
90+
Gtk.enable_eventloop(false)
91+
win = Gtk.Window("Multithread test", 400, 300)
92+
showall(win)
93+
@test Gtk.is_eventloop_running()
94+
for i in 1:10
95+
Gtk.pause_eventloop() do
96+
@test !Gtk.is_eventloop_running()
97+
t = @elapsed multifoo() # should take slightly more than 0.1 seconds
98+
@test t < 4.5 # given the Glib uv_prepare timeout is 5000 ms
99+
end
100+
end
101+
@test Gtk.is_eventloop_running()
102+
destroy(win)
103+
end
104+
end
105+
end

test/misc.jl

Lines changed: 0 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -38,82 +38,4 @@ destroy(win)
3838

3939
@test isa(Gtk.GdkEventKey(), Gtk.GdkEventKey)
4040

41-
# make sure all shown widgets have been destroyed, otherwise the eventloop
42-
# won't stop automatically
43-
@test length(Gtk.shown_widgets) == 0
44-
45-
@testset "Eventloop control" begin
46-
before = Gtk.auto_idle[]
47-
48-
Gtk.enable_eventloop(true)
49-
@test Gtk.is_eventloop_running()
50-
51-
Gtk.auto_idle[] = true
52-
Gtk.pause_eventloop() do
53-
@test !Gtk.is_eventloop_running()
54-
end
55-
@test Gtk.is_eventloop_running()
56-
57-
Gtk.auto_idle[] = false
58-
Gtk.pause_eventloop() do
59-
@test Gtk.is_eventloop_running()
60-
end
61-
@test Gtk.is_eventloop_running()
62-
63-
Gtk.pause_eventloop(force = true) do
64-
@test !Gtk.is_eventloop_running()
65-
end
66-
@test Gtk.is_eventloop_running()
67-
Gtk.enable_eventloop(false)
68-
@test !Gtk.is_eventloop_running()
69-
70-
@testset "pause_eventloop: multithreaded code doesn't block" begin
71-
Gtk.auto_idle[] = true
72-
Threads.nthreads() < 1 && @warn "Threads.nthreads() == 1. Multithread blocking tests are not effective"
73-
74-
function multifoo()
75-
Threads.@threads for _ in 1:Threads.nthreads()
76-
sleep(0.1)
77-
end
78-
end
79-
80-
@test !Gtk.is_eventloop_running()
81-
win = Gtk.Window("Multithread test", 400, 300)
82-
showall(win)
83-
@test Gtk.is_eventloop_running()
84-
for i in 1:10
85-
Gtk.pause_eventloop() do
86-
@test !Gtk.is_eventloop_running()
87-
t = @elapsed multifoo() # should take slightly more than 0.1 seconds
88-
@test t < 4.5 # given the Glib uv_prepare timeout is 5000 ms
89-
end
90-
end
91-
@test Gtk.is_eventloop_running()
92-
destroy(win)
93-
end
94-
95-
@testset "eventloop is stopped immediately after a destroy(win) completes" begin
96-
c = GtkCanvas()
97-
win = GtkWindow(c)
98-
showall(win)
99-
@test Gtk.is_eventloop_running()
100-
destroy(win)
101-
@test !Gtk.is_eventloop_running()
102-
end
103-
104-
@testset "pause_eventloop: doesn't restart a stopping eventloop" begin
105-
c = GtkCanvas()
106-
win = GtkWindow(c)
107-
showall(win)
108-
@test Gtk.is_eventloop_running()
109-
destroy(win)
110-
Gtk.pause_eventloop() do
111-
@test !Gtk.is_eventloop_running()
112-
end
113-
@test !Gtk.is_eventloop_running()
114-
end
115-
116-
Gtk.auto_idle[] = before
117-
end
118-
11941
end

test/runtests.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,6 @@ include("gui.jl")
77
include("list.jl")
88
include("misc.jl")
99
include("text.jl")
10+
include("eventloop.jl")
1011

1112
end

0 commit comments

Comments
 (0)