/*******************************************************************************
* Copyright (c) 2012, 2015 EclipseSource and others.
* 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:
* EclipseSource - initial API and implementation
******************************************************************************/
package org.eclipse.rap.rwt.internal.service;
import static org.eclipse.rap.rwt.internal.service.ContextProvider.getApplicationContext;
import static org.eclipse.rap.rwt.internal.service.StartupJson.DISPLAY_TYPE;
import static org.eclipse.rap.rwt.internal.service.StartupJson.METHOD_LOAD_ACTIVE_THEME;
import static org.eclipse.rap.rwt.internal.service.StartupJson.METHOD_LOAD_FALLBACK_THEME;
import static org.eclipse.rap.rwt.internal.service.StartupJson.PROPERTY_URL;
import static org.eclipse.rap.rwt.internal.service.StartupJson.THEME_STORE_TYPE;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import java.io.IOException;
import java.util.HashMap;
import org.eclipse.rap.json.JsonObject;
import org.eclipse.rap.rwt.application.EntryPointFactory;
import org.eclipse.rap.rwt.client.WebClient;
import org.eclipse.rap.rwt.internal.application.ApplicationContextImpl;
import org.eclipse.rap.rwt.internal.lifecycle.EntryPointManager;
import org.eclipse.rap.rwt.internal.protocol.Operation.CallOperation;
import org.eclipse.rap.rwt.internal.resources.ClientResources;
import org.eclipse.rap.rwt.internal.theme.Theme;
import org.eclipse.rap.rwt.internal.theme.ThemeTestUtil;
import org.eclipse.rap.rwt.testfixture.internal.Fixture;
import org.eclipse.rap.rwt.testfixture.internal.TestMessage;
import org.eclipse.rap.rwt.testfixture.internal.TestRequest;
import org.eclipse.rap.rwt.testfixture.internal.TestResponse;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class StartupJson_Test {
private static final String CUSTOM_THEME_ID = "custom.theme.id";
private ClientResources clientResources;
private ApplicationContextImpl applicationContext;
@Before
public void setUp() {
Fixture.setUp( true );
applicationContext = getApplicationContext();
clientResources = new ClientResources( applicationContext );
}
@After
public void tearDown() {
Fixture.tearDown();
}
@Test
public void testGet_url() {
TestRequest request = ( TestRequest )ContextProvider.getRequest();
request.setServletPath( "/foo" );
JsonObject content = StartupJson.get();
TestMessage message = new TestMessage( content );
assertEquals( "foo", message.getHead().get( PROPERTY_URL ).asString() );
}
@Test
public void testGet_url_withRootServletPath() {
TestRequest request = ( TestRequest )ContextProvider.getRequest();
request.setServletPath( "" );
JsonObject content = StartupJson.get();
TestMessage message = new TestMessage( content );
assertEquals( "./", message.getHead().get( PROPERTY_URL ).asString() );
}
@Test
public void testGet_createDisplay() {
JsonObject content = StartupJson.get();
TestMessage message = new TestMessage( content );
assertNotNull( message.findCreateOperation( "w1" ) );
}
@Test
public void testGet_loadFallbackTheme() {
clientResources.registerResources();
JsonObject content = StartupJson.get();
TestMessage message = new TestMessage( content );
CallOperation operation
= message.findCallOperation( THEME_STORE_TYPE, METHOD_LOAD_FALLBACK_THEME );
assertNotNull( operation );
String expected = "rwt-resources/rap-rwt.theme.Fallback.json";
assertEquals( expected, operation.getParameters().get( PROPERTY_URL ).asString() );
}
@Test
public void testGet_loadActiveTheme_DefaultTheme() {
clientResources.registerResources();
JsonObject content = StartupJson.get();
TestMessage message = new TestMessage( content );
CallOperation operation
= message.findCallOperation( THEME_STORE_TYPE, METHOD_LOAD_ACTIVE_THEME );
assertNotNull( operation );
String expected = "rwt-resources/rap-rwt.theme.Default.json";
assertEquals( expected, operation.getParameters().get( PROPERTY_URL ).asString() );
}
@Test
public void testGet_loadActiveTheme_CustomTheme() {
ThemeTestUtil.registerTheme( new Theme( CUSTOM_THEME_ID, null, null ) );
HashMap<String, String> properties = new HashMap<String,String>();
properties.put( WebClient.THEME_ID, CUSTOM_THEME_ID );
registerEntryPoint( properties );
clientResources.registerResources();
JsonObject content = StartupJson.get();
TestMessage message = new TestMessage( content );
CallOperation operation
= message.findCallOperation( THEME_STORE_TYPE, METHOD_LOAD_ACTIVE_THEME );
assertNotNull( operation );
String expected = "rwt-resources/rap-rwt.theme.Custom_1465393d.json";
assertEquals( expected, operation.getParameters().get( PROPERTY_URL ).asString() );
}
@Test
public void testSend() throws IOException {
Fixture.fakeNewGetRequest();
TestResponse response = ( TestResponse )ContextProvider.getResponse();
StartupJson.send( response );
assertEquals( "application/json; charset=UTF-8", response.getHeader( "Content-Type" ) );
assertTrue( response.getContent().indexOf( DISPLAY_TYPE ) != -1 );
}
private void registerEntryPoint( HashMap<String, String> properties ) {
EntryPointManager entryPointManager = getApplicationContext().getEntryPointManager();
EntryPointFactory factory = mock( EntryPointFactory.class );
entryPointManager.register( TestRequest.DEFAULT_SERVLET_PATH, factory, properties );
}
}