(t *testing.T)
| 2355 | } |
| 2356 | |
| 2357 | func Test_App_RenderPanicUnlocksReloadViews(t *testing.T) { |
| 2358 | t.Parallel() |
| 2359 | |
| 2360 | app := New(Config{Views: &panicRenderView{}}) |
| 2361 | app.Get("/", func(c Ctx) error { |
| 2362 | return c.Render("home", nil) |
| 2363 | }) |
| 2364 | |
| 2365 | type renderResult struct { |
| 2366 | err error |
| 2367 | recovered any |
| 2368 | } |
| 2369 | |
| 2370 | renderDone := make(chan renderResult, 1) |
| 2371 | go func() { |
| 2372 | result := renderResult{} |
| 2373 | defer func() { |
| 2374 | result.recovered = recover() |
| 2375 | renderDone <- result |
| 2376 | }() |
| 2377 | |
| 2378 | app.startupProcess() |
| 2379 | |
| 2380 | request := &fasthttp.RequestCtx{} |
| 2381 | request.Request.Header.SetMethod(MethodGet) |
| 2382 | request.URI().SetPath("/") |
| 2383 | |
| 2384 | app.defaultRequestHandler(request) |
| 2385 | }() |
| 2386 | |
| 2387 | select { |
| 2388 | case result := <-renderDone: |
| 2389 | require.NoError(t, result.err) |
| 2390 | require.Equal(t, "panic render", result.recovered) |
| 2391 | case <-time.After(time.Second): |
| 2392 | t.Fatal("render panic was not recovered") |
| 2393 | } |
| 2394 | |
| 2395 | reloadDone := make(chan error, 1) |
| 2396 | go func() { |
| 2397 | reloadDone <- app.ReloadViews() |
| 2398 | }() |
| 2399 | |
| 2400 | select { |
| 2401 | case err := <-reloadDone: |
| 2402 | require.NoError(t, err) |
| 2403 | case <-time.After(time.Second): |
| 2404 | t.Fatal("reload did not finish after render panic") |
| 2405 | } |
| 2406 | } |
| 2407 | |
| 2408 | func Test_App_ReloadViews_NoEngine(t *testing.T) { |
| 2409 | t.Parallel() |
nothing calls this directly
no test coverage detected