@Test public void threadLocalsAfterUnderlyingSessionTimeout() { final AtomicBoolean detachCalled = new AtomicBoolean(false); ui.addDetachListener( new DetachListener() { @Override public void detach(DetachEvent event) { detachCalled.set(true); Assert.assertEquals(ui, UI.getCurrent()); Assert.assertEquals(ui.getPage(), Page.getCurrent()); Assert.assertEquals(session, VaadinSession.getCurrent()); Assert.assertEquals(mockService, VaadinService.getCurrent()); Assert.assertEquals(mockServlet, VaadinServlet.getCurrent()); } }); session.valueUnbound(EasyMock.createMock(HttpSessionBindingEvent.class)); Assert.assertTrue(detachCalled.get()); }