/******************************************************************************* * 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.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.core.operation.PortletSupertypesValidator; import com.liferay.ide.portlet.ui.wizard.NewPortletWizard; import com.liferay.ide.project.core.model.PluginType; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IStatus; 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 NewPortletWizardTests extends PortletUITestBase implements INewPortletClassDataModelProperties { private IProject project; @Before public void createPortletProject() throws Exception { project = createProject( "mvc-portlet-project-test", PluginType.portlet, "mvc" ); } @Test public void testContentDefaultValues() throws Exception { if( shouldSkipBundleTests() )return; NewPortletWizard wizard = new NewPortletWizard( project ); IDataModel dataModel = wizard.getDataModel(); // check default values page 1 assertTrue( dataModel.getProperty( SOURCE_FOLDER ).toString().contains( "docroot\\WEB-INF\\src" ) ); assertEquals( true, dataModel.getProperty( CREATE_NEW_PORTLET_CLASS ) ); assertEquals( false, dataModel.getProperty( USE_DEFAULT_PORTLET_CLASS ) ); assertEquals( "NewPortlet", dataModel.getProperty( CLASS_NAME ) ); assertEquals( "com.test", dataModel.getProperty( JAVA_PACKAGE ) ); assertEquals( "com.liferay.util.bridges.mvc.MVCPortlet", dataModel.getProperty( SUPERCLASS ) ); // page2 assertEquals( "new", dataModel.getProperty( PORTLET_NAME ) ); assertEquals( "New", dataModel.getProperty( DISPLAY_NAME ) ); assertEquals( "New", dataModel.getProperty( TITLE ) ); assertEquals( true, dataModel.getProperty( VIEW_MODE ) ); assertNotEquals( true, dataModel.getProperty( EDIT_MODE ) ); assertNotEquals( true, dataModel.getProperty( HELP_MODE ) ); assertNotEquals( true, dataModel.getProperty( ABOUT_MODE ) ); assertNotEquals( true, dataModel.getProperty( CONFIG_MODE ) ); assertNotEquals( true, dataModel.getProperty( EDITDEFAULTS_MODE ) ); assertNotEquals( true, dataModel.getProperty( EDITGUEST_MODE ) ); assertNotEquals( true, dataModel.getProperty( PREVIEW_MODE ) ); assertNotEquals( true, dataModel.getProperty( PRINT_MODE ) ); assertEquals( true, dataModel.getProperty( CREATE_JSPS ) ); assertEquals( "/html/new", dataModel.getProperty( CREATE_JSPS_FOLDER ) ); assertEquals( false, dataModel.getProperty( CREATE_RESOURCE_BUNDLE_FILE ) ); assertEquals( "content/Language.properties", dataModel.getProperty( CREATE_RESOURCE_BUNDLE_FILE_PATH ) ); // page3 assertEquals( "/icon.png", dataModel.getProperty( ICON_FILE ) ); assertEquals( false, dataModel.getProperty( ALLOW_MULTIPLE ) ); assertEquals( "/css/main.css", dataModel.getProperty( CSS_FILE ) ); assertEquals( "/js/main.js", dataModel.getProperty( JAVASCRIPT_FILE ) ); assertEquals( "new-portlet", dataModel.getProperty( CSS_CLASS_WRAPPER ) ); assertEquals( "category.sample", dataModel.getProperty( CATEGORY ) ); assertNotEquals( true, dataModel.getProperty( ADD_TO_CONTROL_PANEL ) ); assertEquals( "category.my", dataModel.getProperty( ENTRY_CATEGORY ) ); assertEquals( "1.5", dataModel.getProperty( ENTRY_WEIGHT ) ); assertNotEquals( true, dataModel.getProperty( CREATE_ENTRY_CLASS ) ); assertEquals( "NewPortletControlPanelEntry", dataModel.getProperty( ENTRY_CLASS_NAME ) ); // page4 assertEquals( true, dataModel.getProperty( MODIFIER_PUBLIC ) ); assertNotEquals( true, dataModel.getProperty( MODIFIER_ABSTRACT ) ); assertNotEquals( true, dataModel.getProperty( MODIFIER_FINAL ) ); assertNotEquals( true, dataModel.getProperty( INTERFACES ) ); assertEquals( false, dataModel.getProperty( CONSTRUCTOR ) ); assertEquals( true, dataModel.getProperty( ABSTRACT_METHODS ) ); assertEquals( true, dataModel.getProperty( INIT_OVERRIDE ) ); assertEquals( false, dataModel.getProperty( DESTROY_OVERRIDE ) ); assertEquals( true, dataModel.getProperty( DOVIEW_OVERRIDE ) ); assertNotEquals( true, dataModel.getProperty( DOEDIT_OVERRIDE ) ); assertNotEquals( true, dataModel.getProperty( DOHELP_OVERRIDE ) ); assertNotEquals( true, dataModel.getProperty( DOHELP_OVERRIDE ) ); assertNotEquals( true, dataModel.getProperty( DOABOUT_OVERRIDE ) ); assertNotEquals( true, dataModel.getProperty( DOCONFIG_OVERRIDE ) ); assertNotEquals( true, dataModel.getProperty( DOEDITDEFAULTS_OVERRIDE ) ); assertNotEquals( true, dataModel.getProperty( DOEDITGUEST_OVERRIDE ) ); assertNotEquals( true, dataModel.getProperty( DOPREVIEW_OVERRIDE ) ); assertNotEquals( true, dataModel.getProperty( DOPRINT_OVERRIDE ) ); assertNotEquals( true, dataModel.getProperty( PROCESSACTION_OVERRIDE ) ); assertNotEquals( true, dataModel.getProperty( SERVERESOURCE_OVERRIDE ) ); dataModel.setProperty( CLASS_NAME, "DefaultPortlet" ); IStatus status = dataModel.getDefaultOperation().execute( new NullProgressMonitor(), null ); assertNotNull( status ); assertEquals( "OK", status.getMessage() ); assertTrue( checkFileExist( project, "DefaultPortlet.java", "WEB-INF/src/com/test" ) ); assertTrue( checkFileExist( project, "main.js", "js" ) ); assertTrue( checkFileExist( project, "main.css", "css" ) ); assertTrue( checkFileExist( project, "icon.png", "." ) ); } @Test public void testTargetProject() throws Exception { if( shouldSkipBundleTests() )return; NewPortletWizard wizard = new NewPortletWizard(); String message = wizard.getDataModel().validate().getMessage(); assertEquals( "Enter a project name.", message ); } @Test public void testSourceFolder() throws Exception { if( shouldSkipBundleTests() )return; NewPortletWizard wizard = new NewPortletWizard( project ); IDataModel dataModel = wizard.getDataModel(); String contentName = SOURCE_FOLDER; Object contentDefaultValue = dataModel.getProperty( contentName ); dataModel.setProperty( contentName, "" ); String message = dataModel.validateProperty( contentName ).getMessage(); assertEquals( "The source folder cannot be empty.", message ); assertEquals( false, wizard.canFinish() ); dataModel.setProperty( contentName, "src" ); assertEquals( false, wizard.canFinish() ); message = dataModel.validateProperty( contentName ).getMessage(); assertEquals( "Source folder path must be a workspace relative absolute path.", message ); dataModel.setProperty( contentName, contentDefaultValue ); assertEquals( true, wizard.canFinish() ); } @Test public void testCreateNewPortletAndUseDefaultPortlet() throws Exception { if( shouldSkipBundleTests() )return; NewPortletWizard wizard = new NewPortletWizard( project ); IDataModel dataModel = wizard.getDataModel(); String contentName = USE_DEFAULT_PORTLET_CLASS; dataModel.setProperty( CREATE_NEW_PORTLET_CLASS, false ); dataModel.setProperty( contentName, true ); assertEquals( false, dataModel.isPropertyEnabled( CLASS_NAME ) ); assertEquals( false, dataModel.isPropertyEnabled( JAVA_PACKAGE ) ); assertEquals( false, dataModel.isPropertyEnabled( SUPERCLASS ) ); dataModel.setProperty( CREATE_NEW_PORTLET_CLASS, true ); dataModel.setProperty( contentName, false ); assertEquals( true, dataModel.isPropertyEnabled( CLASS_NAME ) ); assertEquals( true, dataModel.isPropertyEnabled( JAVA_PACKAGE ) ); assertEquals( true, dataModel.isPropertyEnabled( SUPERCLASS ) ); } @Test public void testPortletClass() throws Exception { if( shouldSkipBundleTests() )return; String contentName = CLASS_NAME; NewPortletWizard wizard = new NewPortletWizard( project ); IDataModel dataModel = wizard.getDataModel(); dataModel.setProperty( contentName, "" ); String message = dataModel.validateProperty( contentName ).getMessage(); assertEquals( "The class name cannot be empty.", message ); assertEquals( false, wizard.canFinish() ); dataModel.setProperty( contentName, "New Portlet" ); message = dataModel.validateProperty( contentName ).getMessage(); assertEquals( "Invalid Java class name: The type name 'New Portlet' is not a valid identifier", message ); assertEquals( false, wizard.canFinish() ); dataModel.setProperty( contentName, "NewPortlet1" ); dataModel.getDefaultOperation().execute( new NullProgressMonitor(), null ); dataModel = wizard.getDataModel(); dataModel.setProperty( contentName, "NewPortlet1" ); message = dataModel.validateProperty( contentName ).getMessage(); assertEquals( "Type 'com.test.NewPortlet1' already exists.", message ); assertEquals( false, wizard.canFinish() ); dataModel.setProperty( USE_DEFAULT_PORTLET_CLASS, true ); assertEquals( false, wizard.canFinish() ); dataModel.setProperty( CLASS_NAME, "UseDefaultPortlet" ); // dataModel.setProperty( USE_DEFAULT_PORTLET_CLASS, true ); assertEquals( true, wizard.canFinish() ); } @Test public void testJavaPackage() throws Exception { if( shouldSkipBundleTests() )return; NewPortletWizard wizard = new NewPortletWizard( project ); IDataModel dataModel = wizard.getDataModel(); String contentName = JAVA_PACKAGE; dataModel.setProperty( contentName, "" ); assertEquals( true, wizard.canFinish() ); dataModel.setProperty( CLASS_NAME, "EmptyPackageTest" ); dataModel.getDefaultOperation().execute( new NullProgressMonitor(), null ); assertTrue( checkFileExist( project, "EmptyPackageTest.java", "WEB-INF/src" ) ); dataModel.setProperty( contentName, "com.test" ); String message = dataModel.validate().getMessage(); assertEquals( "Portlet name already exists.", message ); } @Test public void testSuperClass() throws Exception { if( shouldSkipBundleTests() )return; NewPortletWizard wizard = new NewPortletWizard( project ); IDataModel dataModel = wizard.getDataModel(); String contentName = SUPERCLASS; dataModel.setProperty( contentName, "" ); String message = dataModel.validateProperty( contentName ).getMessage(); assertEquals( "Must specify a portlet superclass.", message ); assertEquals( false, wizard.canFinish() ); dataModel.setProperty( contentName, "invalidSuperClass" ); message = dataModel.validateProperty( contentName ).getMessage(); assertEquals( "Portlet superclass must be a valid portlet class.", message ); assertEquals( false, wizard.canFinish() ); dataModel.setProperty( CLASS_NAME, "ExistPortlet" ); dataModel.setProperty( contentName, "com.liferay.util.bridges.mvc.MVCPortlet" ); dataModel.getDefaultOperation().execute( new NullProgressMonitor(), null ); dataModel.setProperty( CLASS_NAME, "NewPortlet" ); dataModel.setProperty( contentName, "com.test.ExistPortlet" ); assertEquals( true, wizard.canFinish() ); DataModelPropertyDescriptor[] superClasses = dataModel.getValidPropertyDescriptors( SUPERCLASS ); assertNotNull( superClasses ); assertEquals( true, containPropertyDescriptor( superClasses, "com.liferay.util.bridges.mvc.MVCPortlet" ) ); assertEquals( true, containPropertyDescriptor( superClasses, "com.liferay.portal.kernel.portlet.LiferayPortlet" ) ); assertEquals( true, containPropertyDescriptor( superClasses, "javax.portlet.GenericPortlet" ) ); // test superclass not in the default list dataModel.setProperty( contentName, "com.liferay.util.bridges.freemarker.FreeMarkerPortlet" ); dataModel.setProperty( CLASS_NAME, "SuperClass" ); assertEquals( true, wizard.canFinish() ); dataModel.getDefaultOperation().execute( new NullProgressMonitor(), null ); assertEquals( true, checkFileExist( project, "SuperClass.java", "WEB-INF/src/com/test" ) ); } @Test public void testPortletInfoGroup() throws Exception { if( shouldSkipBundleTests() )return; NewPortletWizard wizard = new NewPortletWizard(); IDataModel dataModel = wizard.getDataModel(); // test the defaults for classname, portletname, displayname assertEquals( "NewPortlet", dataModel.getProperty( CLASS_NAME ) ); assertEquals( "new", dataModel.getProperty( PORTLET_NAME ) ); assertEquals( "New", dataModel.getProperty( DISPLAY_NAME ) ); assertEquals( "New", dataModel.getProperty( TITLE ) ); // check all other defaults dataModel.setProperty( CLASS_NAME, "MyNewPortlet" ); assertEquals( "my-new", dataModel.getProperty( PORTLET_NAME ) ); assertEquals( "My New", dataModel.getProperty( DISPLAY_NAME ) ); assertEquals( "My New", dataModel.getProperty( TITLE ) ); dataModel.setProperty( CLASS_NAME, "ABCNewPortlet" ); assertEquals( "ABCNewPortlet", dataModel.getProperty( CLASS_NAME ) ); assertEquals( "abc-new", dataModel.getProperty( PORTLET_NAME ) ); assertEquals( "Abc New", dataModel.getProperty( DISPLAY_NAME ) ); assertEquals( "Abc New", dataModel.getProperty( TITLE ) ); dataModel.setProperty( CLASS_NAME, "abcdMyPORTLET" ); assertEquals( "abcd-my", dataModel.getProperty( PORTLET_NAME ) ); assertEquals( "Abcd My", dataModel.getProperty( DISPLAY_NAME ) ); assertEquals( "Abcd My", dataModel.getProperty( TITLE ) ); dataModel.setProperty( CLASS_NAME, "NewPortletD" ); assertEquals( "new-portlet-d", dataModel.getProperty( PORTLET_NAME ) ); assertEquals( "New Portlet D", dataModel.getProperty( DISPLAY_NAME ) ); assertEquals( "New Portlet D", dataModel.getProperty( TITLE ) ); dataModel.setProperty( CLASS_NAME, "MyAABcPortletPortlet" ); assertEquals( "my-aa-bc-portlet", dataModel.getProperty( PORTLET_NAME ) ); assertEquals( "My Aa Bc Portlet", dataModel.getProperty( DISPLAY_NAME ) ); assertEquals( "My Aa Bc Portlet", dataModel.getProperty( TITLE ) ); dataModel.setProperty( CLASS_NAME, "Aa12M334yBbCCC" ); assertEquals( "aa12-m334y-bb-ccc", dataModel.getProperty( PORTLET_NAME ) ); assertEquals( "Aa12 M334y Bb Ccc", dataModel.getProperty( DISPLAY_NAME ) ); assertEquals( "Aa12 M334y Bb Ccc", dataModel.getProperty( TITLE ) ); dataModel.setProperty( CLASS_NAME, "Aa12M334yB2bCCC2C" ); assertEquals( "aa12-m334y-b2b-cc-c2-c", dataModel.getProperty( PORTLET_NAME ) ); assertEquals( "Aa12 M334y B2b Cc C2 C", dataModel.getProperty( DISPLAY_NAME ) ); assertEquals( "Aa12 M334y B2b Cc C2 C", dataModel.getProperty( TITLE ) ); dataModel.setProperty( PORTLET_NAME, "Aa 12-M334yB_bCC2C" ); assertEquals( "Aa 12 M334yB BCC2C", dataModel.getProperty( DISPLAY_NAME ) ); assertEquals( "Aa 12 M334yB BCC2C", dataModel.getProperty( TITLE ) ); dataModel.setProperty( PORTLET_NAME, "my-n ew-POrtLet" ); assertEquals( "My N Ew POrtLet", dataModel.getProperty( DISPLAY_NAME ) ); assertEquals( "My N Ew POrtLet", dataModel.getProperty( TITLE ) ); dataModel.setProperty( PORTLET_NAME, "my-^abcd-tao%*tao ---liferay_PORTlet*^-_Display-_ PORTLET" ); assertEquals( "My ^abcd Tao%*tao Liferay PORTlet*^ Display PORTLET", dataModel.getProperty( DISPLAY_NAME ) ); assertEquals( "My ^abcd Tao%*tao Liferay PORTlet*^ Display PORTLET", dataModel.getProperty( TITLE ) ); dataModel.setProperty( PORTLET_NAME, "ABC^&&&d----DD()--[]AA___{portlet}-my new" ); assertEquals( "ABC^&&&d DD() []AA {portlet} My New", dataModel.getProperty( DISPLAY_NAME ) ); assertEquals( "ABC^&&&d DD() []AA {portlet} My New", dataModel.getProperty( TITLE ) ); dataModel.setProperty( PORTLET_NAME, "" ); assertEquals( "", dataModel.getProperty( DISPLAY_NAME ) ); assertEquals( "", dataModel.getProperty( TITLE ) ); String message = dataModel.validateProperty( PORTLET_NAME ).getMessage(); assertEquals( "Portlet name is empty.", message ); dataModel.setProperty( PORTLET_NAME, " \" \" " ); assertEquals( "\" \"", dataModel.getProperty( DISPLAY_NAME ) ); assertEquals( "\" \"", dataModel.getProperty( TITLE ) ); dataModel.setProperty( PORTLET_NAME, " \" " ); assertEquals( "\"", dataModel.getProperty( DISPLAY_NAME ) ); assertEquals( "\"", dataModel.getProperty( TITLE ) ); dataModel.setProperty( PORTLET_NAME, "\"\" \" " ); assertEquals( "\"\" \"", dataModel.getProperty( DISPLAY_NAME ) ); assertEquals( "\"\" \"", dataModel.getProperty( TITLE ) ); dataModel.setProperty( PORTLET_NAME, " Test1 Test2 \"Test1\" " ); assertEquals( "Test1 Test2 \"Test1\"", dataModel.getProperty( DISPLAY_NAME ) ); assertEquals( "Test1 Test2 \"Test1\"", dataModel.getProperty( TITLE ) ); dataModel.setProperty( PORTLET_NAME, " Test1 Test2\" \"Te\"st1 " ); assertEquals( "Test1 Test2\" \"Te\"st1", dataModel.getProperty( DISPLAY_NAME ) ); assertEquals( "Test1 Test2\" \"Te\"st1", dataModel.getProperty( TITLE ) ); dataModel.setProperty( PORTLET_NAME, " Tes \t3 Te\" \" Test2\" \"Te\"st1 " ); assertEquals( "Tes 3 Te\" \" Test2\" \"Te\"st1", dataModel.getProperty( DISPLAY_NAME ) ); assertEquals( "Tes 3 Te\" \" Test2\" \"Te\"st1", dataModel.getProperty( TITLE ) ); } @Test public void testPortletModesGroup() throws Exception { if( shouldSkipBundleTests() )return; NewPortletWizard wizard = new NewPortletWizard( project ); IDataModel dataModel = wizard.getDataModel(); assertEquals( false, dataModel.isPropertyEnabled( VIEW_MODE ) ); assertEquals( true, dataModel.isPropertyEnabled( EDIT_MODE ) ); assertEquals( true, dataModel.isPropertyEnabled( HELP_MODE ) ); dataModel.setProperty( EDIT_MODE, true ); dataModel.setProperty( HELP_MODE, true ); dataModel.setProperty( CLASS_NAME, "PortletModes" ); dataModel.getDefaultOperation().execute( new NullProgressMonitor(), null ); assertTrue( checkFileExist( project, "view.jsp", "html/portletmodes" ) ); assertTrue( checkFileExist( project, "edit.jsp", "html/portletmodes" ) ); assertTrue( checkFileExist( project, "help.jsp", "html/portletmodes" ) ); } @Test public void testLiferayPortletModesGroup() throws Exception { if( shouldSkipBundleTests() )return; NewPortletWizard wizard = new NewPortletWizard( project ); IDataModel dataModel = wizard.getDataModel(); assertEquals( true, dataModel.isPropertyEnabled( ABOUT_MODE ) ); assertEquals( true, dataModel.isPropertyEnabled( CONFIG_MODE ) ); assertEquals( true, dataModel.isPropertyEnabled( EDITDEFAULTS_MODE ) ); assertEquals( true, dataModel.isPropertyEnabled( EDITGUEST_MODE ) ); assertEquals( true, dataModel.isPropertyEnabled( PREVIEW_MODE ) ); assertEquals( true, dataModel.isPropertyEnabled( PRINT_MODE ) ); dataModel.setProperty( ABOUT_MODE, true ); dataModel.setProperty( CONFIG_MODE, true ); dataModel.setProperty( EDITDEFAULTS_MODE, true ); dataModel.setProperty( EDITGUEST_MODE, true ); dataModel.setProperty( PREVIEW_MODE, true ); dataModel.setProperty( PRINT_MODE, true ); dataModel.setProperty( CLASS_NAME, "LiferayPortletModes" ); dataModel.getDefaultOperation().execute( new NullProgressMonitor(), null ); assertTrue( checkFileExist( project, "about.jsp", "html/liferayportletmodes" ) ); assertTrue( checkFileExist( project, "config.jsp", "html/liferayportletmodes" ) ); assertTrue( checkFileExist( project, "edit-defaults.jsp", "html/liferayportletmodes" ) ); assertTrue( checkFileExist( project, "edit-guest.jsp", "html/liferayportletmodes" ) ); assertTrue( checkFileExist( project, "preview.jsp", "html/liferayportletmodes" ) ); assertTrue( checkFileExist( project, "print.jsp", "html/liferayportletmodes" ) ); } @Test public void testResourcesGroup() throws Exception { if( shouldSkipBundleTests() )return; // create jsp files group NewPortletWizard wizard = new NewPortletWizard( project ); IDataModel dataModel = wizard.getDataModel(); assertEquals( true, dataModel.isPropertyEnabled( CREATE_JSPS ) ); assertEquals( true, dataModel.isPropertyEnabled( CREATE_JSPS_FOLDER ) ); dataModel.setProperty( CREATE_JSPS, false ); assertEquals( false, dataModel.isPropertyEnabled( CREATE_JSPS_FOLDER ) ); dataModel.setProperty( CREATE_JSPS, true ); assertEquals( true, dataModel.isPropertyEnabled( CREATE_JSPS_FOLDER ) ); dataModel.setProperty( CREATE_JSPS_FOLDER, "" ); String message = dataModel.validateProperty( CREATE_JSPS_FOLDER ).getMessage(); assertEquals( "JSP folder cannot be empty.", message ); assertEquals( false, wizard.canFinish() ); dataModel.setProperty( CREATE_JSPS, false ); assertEquals( true, wizard.canFinish() ); // set jsp folder to same as portlet name dataModel.setProperty( CREATE_JSPS, true ); dataModel.setProperty( CREATE_JSPS_FOLDER, dataModel.getProperty( PORTLET_NAME ) ); message = dataModel.validateProperty( CREATE_JSPS_FOLDER ).getMessage(); assertEquals( "JSP folder cannot match portlet name", message ); assertEquals( false, wizard.canFinish() ); dataModel.setProperty( CLASS_NAME, "JSPFolder" ); assertEquals( true, wizard.canFinish() ); dataModel.setProperty( CREATE_JSPS_FOLDER, "/html/jspfolderchanged" ); dataModel.getDefaultOperation().execute( new NullProgressMonitor(), null ); assertTrue( checkFileExist( project, "view.jsp", "html/jspfolderchanged" ) ); // create resource bundle file group wizard = new NewPortletWizard( project ); dataModel = wizard.getDataModel(); assertEquals( true, dataModel.isProperty( CREATE_RESOURCE_BUNDLE_FILE ) ); assertEquals( false, dataModel.isPropertyEnabled( CREATE_RESOURCE_BUNDLE_FILE_PATH ) ); dataModel.setProperty( CREATE_RESOURCE_BUNDLE_FILE, true ); assertEquals( true, dataModel.isPropertyEnabled( CREATE_RESOURCE_BUNDLE_FILE_PATH ) ); dataModel.setProperty( CREATE_RESOURCE_BUNDLE_FILE_PATH, "" ); 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 { if( shouldSkipBundleTests() )return; NewPortletWizard wizard = new NewPortletWizard( project ); IDataModel dataModel = wizard.getDataModel(); assertEquals( true, dataModel.isPropertyEnabled( ICON_FILE ) ); dataModel.setProperty( ICON_FILE, "" ); assertEquals( true, wizard.canFinish() ); assertEquals( true, dataModel.isPropertyEnabled( ALLOW_MULTIPLE ) ); dataModel.setProperty( ALLOW_MULTIPLE, true ); assertEquals( true, dataModel.isPropertyEnabled( ALLOW_MULTIPLE ) ); dataModel.setProperty( ALLOW_MULTIPLE, true ); assertEquals( true, dataModel.isPropertyEnabled( CSS_FILE ) ); dataModel.setProperty( CSS_FILE, "" ); assertEquals( true, wizard.canFinish() ); assertEquals( true, dataModel.isPropertyEnabled( JAVASCRIPT_FILE ) ); dataModel.setProperty( JAVASCRIPT_FILE, "" ); assertEquals( true, wizard.canFinish() ); assertEquals( true, dataModel.isPropertyEnabled( CSS_CLASS_WRAPPER ) ); 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 { if( shouldSkipBundleTests() )return; NewPortletWizard wizard = new NewPortletWizard( project ); IDataModel dataModel = wizard.getDataModel(); assertEquals( true, dataModel.isPropertyEnabled( CATEGORY ) ); DataModelPropertyDescriptor[] categories = dataModel.getValidPropertyDescriptors( CATEGORY ); assertNotNull( categories ); assertEquals( true, containPropertyDescriptor( categories, "Sample" ) ); assertEquals( true, containPropertyDescriptor( categories, "Marketplace" ) ); assertEquals( true, containPropertyDescriptor( categories, "Wiki" ) ); assertEquals( true, dataModel.isPropertyEnabled( ADD_TO_CONTROL_PANEL ) ); // 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, "MyNewPortletControlPanelEntry" ); dataModel.setProperty( CLASS_NAME, "LiferayDisplay" ); dataModel.getDefaultOperation().execute( new NullProgressMonitor(), null ); assertEquals( true, checkFileExist( project, "MyNewPortletControlPanelEntry.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 ); } // page4 @Test public void testModifiers() throws Exception { if( shouldSkipBundleTests() )return; NewPortletWizard wizard = new NewPortletWizard( project ); IDataModel dataModel = wizard.getDataModel(); assertEquals( false, dataModel.isPropertyEnabled( MODIFIER_PUBLIC ) ); assertEquals( false, dataModel.isPropertyEnabled( MODIFIER_ABSTRACT ) ); assertEquals( true, dataModel.isPropertyEnabled( MODIFIER_FINAL ) ); } @Test public void testInterfaces() throws Exception { if( shouldSkipBundleTests() )return; NewPortletWizard wizard = new NewPortletWizard( project ); IDataModel dataModel = wizard.getDataModel(); assertEquals( true, dataModel.isPropertyEnabled( INTERFACES ) ); } @Test public void testMethodStubs() throws Exception { if( shouldSkipBundleTests() )return; NewPortletWizard wizard = new NewPortletWizard( project ); IDataModel dataModel = wizard.getDataModel(); assertEquals( true, dataModel.isPropertyEnabled( CONSTRUCTOR ) ); dataModel.setProperty( CONSTRUCTOR, true ); // change super class to "GenericPortlet" then methods checkbox can be edit dataModel.setProperty( SUPERCLASS, "javax.portlet.GenericPortlet" ); boolean mvcPortlet = PortletSupertypesValidator.isMVCPortletSuperclass( dataModel ); assertEquals( false, mvcPortlet ); assertEquals( true, dataModel.isPropertyEnabled( ABSTRACT_METHODS ) ); assertEquals( false, dataModel.isPropertyEnabled( INIT_OVERRIDE ) ); assertEquals( true, dataModel.isPropertyEnabled( DESTROY_OVERRIDE ) ); assertEquals( true, dataModel.getBooleanProperty( DOVIEW_OVERRIDE ) ); assertEquals( true, dataModel.isPropertyEnabled( DOEDIT_OVERRIDE ) ); assertEquals( true, dataModel.isPropertyEnabled( DOHELP_OVERRIDE ) ); assertEquals( false, dataModel.getBooleanProperty( DOABOUT_OVERRIDE ) ); assertEquals( false, dataModel.getBooleanProperty( DOCONFIG_OVERRIDE ) ); assertEquals( false, dataModel.getBooleanProperty( DOEDITDEFAULTS_OVERRIDE ) ); assertEquals( false, dataModel.getBooleanProperty( DOEDITGUEST_OVERRIDE ) ); assertEquals( false, dataModel.getBooleanProperty( DOPREVIEW_OVERRIDE ) ); assertEquals( false, dataModel.getBooleanProperty( DOPRINT_OVERRIDE ) ); assertEquals( true, dataModel.isPropertyEnabled( PROCESSACTION_OVERRIDE ) ); assertEquals( true, dataModel.isPropertyEnabled( SERVERESOURCE_OVERRIDE ) ); } }