/******************************************************************************* * Copyright (c) 2002-2006 Innoopract Informationssysteme GmbH. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Innoopract Informationssysteme GmbH - initial API and implementation ******************************************************************************/ package com.w4t.engine.util; import javax.servlet.ServletContext; import javax.servlet.http.HttpSession; import org.eclipse.rwt.internal.browser.Default; import org.eclipse.rwt.internal.lifecycle.LifeCycle; import org.eclipse.rwt.internal.service.ContextProvider; import junit.framework.TestCase; import com.w4t.*; import com.w4t.W4TFixture.TestServletContext; import com.w4t.W4TFixture.TestSession; import com.w4t.IWindowManager.IWindow; import com.w4t.engine.W4TModelUtil; import com.w4t.internal.adaptable.IFormAdapter; public class WindowManager_Test extends TestCase { public void testCreate() throws Exception { IWindowManager windowManager = WindowManager.getInstance(); assertNotNull( windowManager ); try { windowManager.create( null ); fail( "WindowManager#create(Form) must not allow null argument." ); } catch( NullPointerException e ) { // as expected } WebForm form = W4TFixture.loadStartupForm(); IWindow window1 = windowManager.create( form ); assertNotNull( window1 ); try { windowManager.create( form ); fail( "Not allowed to place a form in more than one window." ); } catch( IllegalStateException e ) { // as expected } } public void testWindowId() { IWindowManager windowManager = WindowManager.getInstance(); IWindow window; setServletContextName( null ); window = windowManager.create( W4TFixture.getEmptyWebFormInstance() ); assertEquals( "w1", window.getId() ); setServletContextName( "" ); window = windowManager.create( W4TFixture.getEmptyWebFormInstance() ); assertEquals( "w2", window.getId() ); setServletContextName( "myWebApp" ); window = windowManager.create( W4TFixture.getEmptyWebFormInstance() ); assertEquals( "myWebAppw3", window.getId() ); setServletContextName( "my Web App " ); window = windowManager.create( W4TFixture.getEmptyWebFormInstance() ); assertEquals( "myWebAppw4", window.getId() ); setServletContextName( "123App" ); window = windowManager.create( W4TFixture.getEmptyWebFormInstance() ); assertEquals( "_123Appw5", window.getId() ); setServletContextName( " 1 23Ap p" ); window = windowManager.create( W4TFixture.getEmptyWebFormInstance() ); assertEquals( "_123Appw6", window.getId() ); setServletContextName( "����" ); window = windowManager.create( W4TFixture.getEmptyWebFormInstance() ); assertEquals( "w7", window.getId() ); } public void testFindByIdAndWindowAndForm() throws Exception { IWindowManager windowManager = WindowManager.getInstance(); // don't allow null in findWindow try { windowManager.findWindow( null ); fail( "Must throw NPE" ); } catch( NullPointerException e ) { // as expected } // find just created window WebForm form = W4TFixture.loadStartupForm(); IWindow window = windowManager.create( form ); IWindow foundWindow = windowManager.findWindow( form ); assertSame( window, foundWindow ); // don't allow null in findForm try { windowManager.findForm( null ); fail( "Must throw NPE" ); } catch( Exception e ) { // as expected } // find above 'form' by its associated window WebForm foundForm = windowManager.findForm( window ); assertSame( foundForm, form ); try { windowManager.findById( null ); fail( "Must throw NPE" ); } catch( Exception e ) { // as expected } foundWindow = windowManager.findById( window.getId() ); assertSame( foundWindow, window ); } public void testDispatchTo() throws Exception { WindowManager windowManager = WindowManager.getInstance(); WebForm form1 = W4TFixture.loadStartupForm(); IWindow window = windowManager.create( form1 ); WindowManager.setActive( window ); WebForm form2 = W4TFixture.loadStartupForm(); window.setFormToDispatch( form2 ); WindowManager.doDispatch(); WebForm foundForm = windowManager.findForm( window ); assertNull( windowManager.findWindow( form1 ) ); assertSame( foundForm, form2 ); assertSame( window, windowManager.findWindow( form2 ) ); } public void testRemove() throws Exception { WindowManager windowManager = WindowManager.getInstance(); WebForm form = W4TFixture.loadStartupForm(); IWindow window = windowManager.create( form ); windowManager.remove( window ); IWindow foundWindow = windowManager.findWindow( form ); assertNull( foundWindow ); } public void testRemoveAssociatedWindow() throws Exception { IWindowManager windowManager = WindowManager.getInstance(); WebForm form1 = W4TFixture.loadStartupForm(); IWindow window = windowManager.create( form1 ); form1.unload(); assertNull( windowManager.findWindow( form1 ) ); WebForm form2 = W4TFixture.loadStartupForm(); WebForm form3 = W4TFixture.loadStartupForm(); window = windowManager.create( form2 ); window.setFormToDispatch( form3 ); WindowManager.setActive( window ); WindowManager.doDispatch(); form2.unload(); assertEquals( window, windowManager.findWindow( form3 ) ); } public void testClose() { IWindowManager windowManager = WindowManager.getInstance(); WebForm form = W4TFixture.loadStartupForm(); IWindow window = windowManager.create( form ); assertEquals( false, WindowManager.isClosing( window ) ); window.close(); assertEquals( true, WindowManager.isClosing( window ) ); assertEquals( false, WindowManager.isClosed( window ) ); } /** Ensure that the active window object is functional even though the * associated form was unloaded (which leads to the window being closed). */ public void testUnloadActive() { IWindowManager windowManager = WindowManager.getInstance(); WebForm form = W4TFixture.loadStartupForm(); IWindow window = windowManager.create( form ); WindowManager.setActive( window ); assertEquals( false, WindowManager.isClosing( window ) ); window.close(); assertEquals( true, WindowManager.isClosing( window ) ); assertEquals( window, WindowManager.getActive() ); form.unload(); assertNull( WindowManager.getInstance().findById( window.getId() ) ); assertEquals( window, WindowManager.getActive() ); assertEquals( true, WindowManager.isClosing( window ) ); assertEquals( false, WindowManager.isClosed( window ) ); } public void testRefreshWindow() { // prepare IWindowManager windowManager = WindowManager.getInstance(); WebForm form = W4TFixture.loadStartupForm(); IWindow window = windowManager.create( form ); // 'basic' refreshWindow form.refreshWindow(); assertEquals( true, form.isRefreshing() ); // refreshWindow must override previous closeWindow form.closeWindow(); assertEquals( true, WindowManager.isClosing( window ) ); assertEquals( false, WindowManager.isClosed( window ) ); form.refreshWindow(); assertEquals( true, form.isRefreshing() ); assertEquals( false, WindowManager.isClosing( window ) ); assertEquals( false, WindowManager.isClosed( window ) ); // try to refresh an already closed window // that is, closeWindow request after rendering WindowManager.removeAssociatedWindow( form ); form.refreshWindow(); assertNotNull( WindowManager.getInstance().findWindow( form ) ); } public void testCloseWindow() throws Exception { // prepare IWindowManager windowManager = WindowManager.getInstance(); WebForm form = W4TFixture.loadStartupForm(); IWindow window = windowManager.create( form ); form.closeWindow(); assertEquals( true, WindowManager.isClosing( window ) ); assertEquals( false, WindowManager.isClosed( window ) ); W4TFixture.fakeResponseWriter(); W4TFixture.fakeBrowser( new Default( true, false ) ); W4TModelUtil.initModel(); IFormAdapter adapter = W4TFixture.getFormAdapter( form ); adapter.increase(); String formId = form.getUniqueID(); String requestCounter = String.valueOf( adapter.getRequestCounter() - 1 ); W4TFixture.fakeFormRequestParams( requestCounter, window.getId(), formId ); LifeCycle lifeCycle = ( LifeCycle )W4TContext.getLifeCycle(); lifeCycle.execute(); assertEquals( true, WindowManager.isClosed( window ) ); } protected void setUp() throws Exception { W4TFixture.setUp(); W4TFixture.createContext(); } protected void tearDown() throws Exception { W4TFixture.tearDown(); W4TFixture.removeContext(); } private static void setServletContextName( final String name ) { HttpSession session = ContextProvider.getRequest().getSession(); W4TFixture.TestSession testSession = ( TestSession )session; ServletContext servletContext = testSession.getServletContext(); W4TFixture.TestServletContext testServletContext; testServletContext = ( TestServletContext )servletContext; testServletContext.setServletContextName( name ); } }