(t *testing.T)
| 2219 | } |
| 2220 | |
| 2221 | func Test_App_ReloadViews_BlocksRenderUntilLoadCompletes(t *testing.T) { |
| 2222 | t.Parallel() |
| 2223 | view := &blockingView{ |
| 2224 | loadStarted: make(chan struct{}), |
| 2225 | loadRelease: make(chan struct{}), |
| 2226 | renderEntered: make(chan struct{}), |
| 2227 | } |
| 2228 | app := New(Config{Views: view}) |
| 2229 | app.Get("/", func(c Ctx) error { |
| 2230 | return c.Render("home", nil) |
| 2231 | }) |
| 2232 | handler := app.Handler() |
| 2233 | |
| 2234 | reloadDone := make(chan error, 1) |
| 2235 | go func() { |
| 2236 | reloadDone <- app.ReloadViews() |
| 2237 | }() |
| 2238 | |
| 2239 | <-view.loadStarted |
| 2240 | |
| 2241 | renderDone := make(chan int, 1) |
| 2242 | go func() { |
| 2243 | renderDone <- runGetHandlerRequest(handler, "/") |
| 2244 | }() |
| 2245 | |
| 2246 | select { |
| 2247 | case <-view.renderEntered: |
| 2248 | t.Fatal("render should wait until ReloadViews Load finishes") |
| 2249 | case <-time.After(20 * time.Millisecond): |
| 2250 | } |
| 2251 | |
| 2252 | close(view.loadRelease) |
| 2253 | |
| 2254 | select { |
| 2255 | case err := <-reloadDone: |
| 2256 | require.NoError(t, err) |
| 2257 | case <-time.After(time.Second): |
| 2258 | t.Fatal("reload did not finish") |
| 2259 | } |
| 2260 | |
| 2261 | select { |
| 2262 | case status := <-renderDone: |
| 2263 | require.Equal(t, StatusOK, status) |
| 2264 | case <-time.After(time.Second): |
| 2265 | t.Fatal("render request did not finish") |
| 2266 | } |
| 2267 | } |
| 2268 | |
| 2269 | func Test_App_ReloadViews_PanicUnlocksRender(t *testing.T) { |
| 2270 | t.Parallel() |
nothing calls this directly
no test coverage detected