Skip to content

Commit f92e518

Browse files
test reorg
1 parent 757327f commit f92e518

File tree

3 files changed

+102
-74
lines changed

3 files changed

+102
-74
lines changed

test/eventloop.jl

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

test/misc.jl

Lines changed: 0 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -42,78 +42,4 @@ destroy(win)
4242
# won't stop automatically
4343
@test length(Gtk.shown_widgets) == 0
4444

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-
11945
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)