/*******************************************************************************
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*
*******************************************************************************/
package com.liferay.ide.portlet.ui.tests;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import com.liferay.ide.portlet.core.operation.INewPortletClassDataModelProperties;
import com.liferay.ide.portlet.vaadin.core.operation.INewVaadinPortletClassDataModelProperties;
import com.liferay.ide.portlet.vaadin.ui.wizard.NewVaadinPortletWizard;
import com.liferay.ide.project.core.model.PluginType;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.wst.common.frameworks.datamodel.DataModelPropertyDescriptor;
import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
import org.junit.Before;
import org.junit.Test;
/**
* @author Li Lu
*/
@SuppressWarnings( "restriction" )
public class NewVaadinPortletWizardTests extends PortletUITestBase
implements INewVaadinPortletClassDataModelProperties, INewPortletClassDataModelProperties
{
private IProject project;
private final NewVaadinPortletWizard wizard = new NewVaadinPortletWizard();
private final IDataModel dataModel = wizard.getDataModel();
@Before
public void createPortletProject() throws Exception
{
if( shouldSkipBundleTests() )return;
project = createProject( "vaadin-portlet-project-test", PluginType.portlet, "vaadin" );
}
@Test
public void testContentDefaultValues() throws Exception
{
// check default values page 1
assertTrue( dataModel.isPropertyEnabled( PROJECT_NAME ) );
assertTrue( dataModel.isPropertyEnabled( SOURCE_FOLDER ) );
assertTrue( dataModel.isPropertyEnabled( CLASS_NAME ) );
assertTrue( dataModel.isPropertyEnabled( JAVA_PACKAGE ) );
assertTrue( dataModel.isPropertyEnabled( SUPERCLASS ) );
assertTrue( dataModel.isPropertyEnabled( VAADIN_PORTLET_CLASS ) );
dataModel.setProperty( PROJECT_NAME, project.getName() );
assertTrue( dataModel.getDefaultProperty( SOURCE_FOLDER ).toString().contains( "docroot\\WEB-INF\\src" ) );
assertEquals( "NewVaadinPortletApplication", dataModel.getDefaultProperty( CLASS_NAME ) );
assertEquals( "com.test", dataModel.getDefaultProperty( JAVA_PACKAGE ) );
assertEquals( "com.vaadin.Application", dataModel.getDefaultProperty( SUPERCLASS ) );
assertEquals( "com.vaadin.terminal.gwt.server.ApplicationPortlet2", dataModel.getDefaultProperty( VAADIN_PORTLET_CLASS ) );
// page2
assertTrue( dataModel.isPropertyEnabled( PORTLET_NAME ) );
assertTrue( dataModel.isPropertyEnabled( DISPLAY_NAME ) );
assertTrue( dataModel.isPropertyEnabled( TITLE ) );
assertTrue( dataModel.isPropertyEnabled( CREATE_RESOURCE_BUNDLE_FILE ) );
assertFalse( dataModel.isPropertyEnabled( CREATE_RESOURCE_BUNDLE_FILE_PATH ) );
assertEquals( "newvaadinportlet", dataModel.getDefaultProperty( PORTLET_NAME ) );
assertEquals( "NewVaadinPortlet", dataModel.getDefaultProperty( DISPLAY_NAME ) );
assertEquals( "NewVaadinPortlet", dataModel.getDefaultProperty( TITLE ) );
assertEquals( false, dataModel.getDefaultProperty( CREATE_RESOURCE_BUNDLE_FILE ) );
assertEquals( "content/Language.properties", dataModel.getDefaultProperty( CREATE_RESOURCE_BUNDLE_FILE_PATH ) );
// page3
assertTrue( dataModel.isPropertyEnabled( ICON_FILE ) );
assertTrue( dataModel.isPropertyEnabled( ALLOW_MULTIPLE ) );
assertTrue( dataModel.isPropertyEnabled( CSS_FILE ) );
assertTrue( dataModel.isPropertyEnabled( JAVASCRIPT_FILE ) );
assertTrue( dataModel.isPropertyEnabled( CSS_CLASS_WRAPPER ) );
assertTrue( dataModel.isPropertyEnabled( CATEGORY ) );
assertTrue( dataModel.isPropertyEnabled( ADD_TO_CONTROL_PANEL ) );
assertTrue( dataModel.isPropertyEnabled( ENTRY_CATEGORY ) );
assertTrue( dataModel.isPropertyEnabled( ENTRY_WEIGHT ) );
assertTrue( dataModel.isPropertyEnabled( CREATE_ENTRY_CLASS ) );
assertTrue( dataModel.isPropertyEnabled( ENTRY_CLASS_NAME ) );
assertEquals( "/icon.png", dataModel.getDefaultProperty( ICON_FILE ) );
assertEquals( false, dataModel.getDefaultProperty( ALLOW_MULTIPLE ) );
assertEquals( "/css/main.css", dataModel.getDefaultProperty( CSS_FILE ) );
assertEquals( "/js/main.js", dataModel.getDefaultProperty( JAVASCRIPT_FILE ) );
assertEquals( "newvaadinportlet-portlet", dataModel.getDefaultProperty( CSS_CLASS_WRAPPER ) );
assertEquals( "category.sample", dataModel.getDefaultProperty( CATEGORY ) );
assertNotEquals( true, dataModel.getDefaultProperty( ADD_TO_CONTROL_PANEL ) );
assertEquals( "category.my", dataModel.getDefaultProperty( ENTRY_CATEGORY ) );
assertEquals( "1.5", dataModel.getDefaultProperty( ENTRY_WEIGHT ) );
assertNotEquals( true, dataModel.getProperty( CREATE_ENTRY_CLASS ) );
assertEquals( "NewVaadinPortletApplicationControlPanelEntry", dataModel.getDefaultProperty( ENTRY_CLASS_NAME ) );
}
@Test
public void testTargetProject() throws Exception
{
String message = wizard.getDataModel().validate().getMessage();
assertEquals( "Enter a project name.", message );
}
@Test
public void testSourceFolder() throws Exception
{
dataModel.setProperty( PROJECT_NAME, project.getName() );
dataModel.setProperty( SOURCE_FOLDER, "" );
String message = dataModel.validateProperty( SOURCE_FOLDER ).getMessage();
assertEquals( "The source folder cannot be empty.", message );
assertEquals( false, wizard.canFinish() );
dataModel.setProperty( SOURCE_FOLDER, "src" );
assertEquals( false, wizard.canFinish() );
message = dataModel.validateProperty( SOURCE_FOLDER ).getMessage();
assertEquals( "Source folder path must be a workspace relative absolute path.", message );
dataModel.setProperty( SOURCE_FOLDER, "/" + project.getName() + "/docroot/WEB-INF/src" );
message=dataModel.validate().getMessage();
assertEquals( true, wizard.canFinish() );
}
@Test
public void testApplicationClass() throws Exception
{
dataModel.setProperty( PROJECT_NAME, project.getName() );
dataModel.setProperty( CLASS_NAME, "" );
String message = dataModel.validateProperty( CLASS_NAME ).getMessage();
assertEquals( "The class name cannot be empty.", message );
assertEquals( false, wizard.canFinish() );
// todo:add class validation
}
@Test
public void testSuperClass() throws Exception
{
dataModel.setProperty( PROJECT_NAME, project.getName() );
dataModel.setProperty( SUPERCLASS, "" );
String message = dataModel.validate().getMessage();
assertEquals( "Must specify a portlet superclass.", message );
assertEquals( false, wizard.canFinish() );
// todo:add class validation
}
@Test
public void testPortletClass() throws Exception
{
dataModel.setProperty( PROJECT_NAME, project.getName() );
dataModel.setProperty( VAADIN_PORTLET_CLASS, "" );
String message = dataModel.validate().getMessage();
assertEquals( "Must specify a vaadin portlet class.", message );
assertEquals( false, wizard.canFinish() );
// todo:add class validation
}
@Test
public void testPortletInfoGroup() throws Exception
{
dataModel.setProperty( PROJECT_NAME, project.getName() );
dataModel.setProperty( PORTLET_NAME, "" );
String message = dataModel.validate().getMessage();
assertEquals( "Portlet name is empty.", message );
assertEquals( false, wizard.canFinish() );
// todo:add test for display name and title
}
@Test
public void testResourcesGroup() throws Exception
{
dataModel.setProperty( PROJECT_NAME, project.getName() );
dataModel.setProperty( CREATE_RESOURCE_BUNDLE_FILE, true );
assertEquals( true, dataModel.isPropertyEnabled( CREATE_RESOURCE_BUNDLE_FILE_PATH ) );
dataModel.setProperty( CREATE_RESOURCE_BUNDLE_FILE_PATH, "" );
String message = dataModel.validate().getMessage();
assertEquals( "Resource bundle file path must be a valid path.", message );
assertEquals( false, wizard.canFinish() );
dataModel.setProperty( CREATE_RESOURCE_BUNDLE_FILE_PATH, "test" );
message = dataModel.validateProperty( CREATE_RESOURCE_BUNDLE_FILE_PATH ).getMessage();
assertEquals( "Resource bundle file path should end with .properties", message );
assertEquals( true, wizard.canFinish() );
dataModel.setProperty( CREATE_RESOURCE_BUNDLE_FILE_PATH, "content/TestLanguage.properties" );
dataModel.setProperty( CLASS_NAME, "ResourceBundle" );
assertEquals( true, wizard.canFinish() );
dataModel.getDefaultOperation().execute( new NullProgressMonitor(), null );
assertEquals( true, checkFileExist( project, "TestLanguage.properties", "WEB-INF/src/content" ) );
}
// page 3
@Test
public void testLiferayPortletInfoGroup() throws Exception
{
dataModel.setProperty( PROJECT_NAME, project.getName() );
dataModel.setProperty( ICON_FILE, "" );
assertEquals( true, wizard.canFinish() );
dataModel.setProperty( ALLOW_MULTIPLE, true );
dataModel.setProperty( CSS_FILE, "" );
assertEquals( true, wizard.canFinish() );
dataModel.setProperty( JAVASCRIPT_FILE, "" );
assertEquals( true, wizard.canFinish() );
dataModel.setProperty( CSS_CLASS_WRAPPER, "" );
assertEquals( true, wizard.canFinish() );
dataModel.setProperty( CLASS_NAME, "LiferayPortletInfo" );
dataModel.setProperty( CSS_FILE, "/css/new_main.css" );
dataModel.setProperty( JAVASCRIPT_FILE, "/js/new_main.js" );
dataModel.getDefaultOperation().execute( new NullProgressMonitor(), null );
assertEquals( true, checkFileExist( project, "new_main.css", "css" ) );
assertEquals( true, checkFileExist( project, "new_main.js", "js" ) );
}
@Test
public void testLiferayDisplayGroup() throws Exception
{
dataModel.setProperty( PROJECT_NAME, project.getName() );
DataModelPropertyDescriptor[] categories = dataModel.getValidPropertyDescriptors( CATEGORY );
assertNotNull( categories );
assertEquals( true, containPropertyDescriptor( categories, "Sample" ) );
assertEquals( true, containPropertyDescriptor( categories, "Marketplace" ) );
assertEquals( true, containPropertyDescriptor( categories, "Wiki" ) );
// assertEquals( false, dataModel.isPropertyEnabled( ENTRY_CATEGORY ) );
DataModelPropertyDescriptor[] entryCategories = dataModel.getValidPropertyDescriptors( ENTRY_CATEGORY );
assertNotNull( entryCategories );
assertEquals( true, containPropertyDescriptor( entryCategories, "My Account Administration" ) );
assertEquals( true, containPropertyDescriptor( entryCategories, "Control Panel - Apps" ) );
assertEquals( true, containPropertyDescriptor( entryCategories, "Control Panel - Configuration" ) );
assertEquals( true, containPropertyDescriptor( entryCategories, "Site Administration - Configuration" ) );
assertEquals( true, containPropertyDescriptor( entryCategories, "Site Administration - Content" ) );
assertEquals( true, containPropertyDescriptor( entryCategories, "Site Administration - Pages" ) );
assertEquals( true, containPropertyDescriptor( entryCategories, "Site Administration - Users" ) );
assertEquals( true, containPropertyDescriptor( entryCategories, "Control Panel - Sites" ) );
assertEquals( true, containPropertyDescriptor( entryCategories, "Control Panel - Users" ) );
dataModel.setProperty( ADD_TO_CONTROL_PANEL, true );
assertEquals( true, dataModel.isPropertyEnabled( ENTRY_CATEGORY ) );
assertEquals( true, dataModel.isPropertyEnabled( ENTRY_WEIGHT ) );
assertEquals( true, dataModel.isPropertyEnabled( CREATE_ENTRY_CLASS ) );
dataModel.setProperty( CREATE_ENTRY_CLASS, true );
assertEquals( true, dataModel.isPropertyEnabled( ENTRY_CLASS_NAME ) );
dataModel.setProperty( ENTRY_CATEGORY, "" );
assertEquals( true, wizard.canFinish() );
dataModel.setProperty( ENTRY_WEIGHT, "" );
String message = dataModel.validate().getMessage();
assertEquals( "Must specify a valid double for entry weight.", message );
dataModel.setProperty( ENTRY_WEIGHT, "1.5" );
assertEquals( true, wizard.canFinish() );
dataModel.setProperty( ENTRY_CLASS_NAME, "" );
message = dataModel.validateProperty( ENTRY_CLASS_NAME ).getMessage();
assertEquals( "The class name cannot be empty.", message );
assertEquals( false, wizard.canFinish() );
dataModel.setProperty( ENTRY_CLASS_NAME, "test" );
message = dataModel.validateProperty( ENTRY_CLASS_NAME ).getMessage();
assertEquals( "Warning: By convention, Java type names usually start with an uppercase letter", message );
assertEquals( true, wizard.canFinish() );
dataModel.setProperty( ENTRY_CLASS_NAME, "test test" );
message = dataModel.validateProperty( ENTRY_CLASS_NAME ).getMessage();
assertEquals( "Invalid Java class name: The type name 'test test' is not a valid identifier", message );
assertEquals( false, wizard.canFinish() );
dataModel.setProperty( ENTRY_CLASS_NAME, "MyNewVaadinPortletApplicationControlPanelEntry" );
dataModel.setProperty( CLASS_NAME, "LiferayDisplay" );
dataModel.getDefaultOperation().execute( new NullProgressMonitor(), null );
assertEquals( true,checkFileExist( project, "MyNewVaadinPortletApplicationControlPanelEntry.java", "WEB-INF/src/com/test" ) );
dataModel.setProperty( ENTRY_CLASS_NAME, "LiferayDisplay" );
message = dataModel.validateProperty( ENTRY_CLASS_NAME ).getMessage();
assertEquals( "Type 'com.test.LiferayDisplay' already exists.", message );
}
}