/******************************************************************************* * 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.xml.search.ui.tests; import static com.liferay.ide.ui.tests.UITestsUtils.containsProposal; import static com.liferay.ide.ui.tests.UITestsUtils.deleteOtherProjects; import static com.liferay.ide.xml.search.ui.tests.XmlSearchTestsUtils.buildAndValidate; import static com.liferay.ide.xml.search.ui.tests.XmlSearchTestsUtils.containHyperlink; import static com.liferay.ide.xml.search.ui.tests.XmlSearchTestsUtils.findMarkerByMessage; import static com.liferay.ide.xml.search.ui.tests.XmlSearchTestsUtils.findMarkerResolutionByClass; import static com.liferay.ide.xml.search.ui.tests.XmlSearchTestsUtils.getHyperLinksForElement; import static com.liferay.ide.xml.search.ui.tests.XmlSearchTestsUtils.getProposalsForElement; import static com.liferay.ide.xml.search.ui.tests.XmlSearchTestsUtils.setElementContent; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import com.liferay.ide.core.ILiferayConstants; import com.liferay.ide.core.LiferayCore; import com.liferay.ide.xml.search.ui.editor.LiferayCustomXmlViewerConfiguration; import com.liferay.ide.xml.search.ui.markerResolutions.DecreaseInstanceScopeXmlValidationLevel; import com.liferay.ide.xml.search.ui.markerResolutions.DecreaseProjectScopeXmlValidationLevel; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jface.text.contentassist.ICompletionProposal; import org.eclipse.jface.text.hyperlink.IHyperlink; import org.junit.AfterClass; import org.junit.Before; import org.junit.Test; /** * @author Kuo Zhang */ public class LiferayHookXmlTests extends XmlSearchTestsBase { protected final static String MARKER_TYPE = XML_REFERENCES_MARKER_TYPE; private IFile descriptorFile; private static IProject project; protected IFile getDescriptorFile() throws Exception { return descriptorFile != null ? descriptorFile : LiferayCore.create( getProject() ).getDescriptorFile( ILiferayConstants.LIFERAY_HOOK_XML_FILE ); } private IProject getProject() throws Exception { if( project == null ) { project = super.getProject( "hooks", "Liferay-Hook-Xml-Test-hook" ); deleteOtherProjects( project ); } return project; } @AfterClass public static void deleteProject() throws Exception { try { project.close( null ); project.delete( true, null ); } catch( Exception e ) { } } @Before public void cleanupMarkers() throws Exception { descriptorFile = getDescriptorFile(); ZipFile projectFile = new ZipFile( getProjectZip( getBundleId(), "Liferay-Hook-Xml-Test-hook" ) ); ZipEntry entry = projectFile.getEntry( "Liferay-Hook-Xml-Test-hook/docroot/WEB-INF/liferay-hook.xml" ); descriptorFile.setContents( projectFile.getInputStream( entry ), IResource.FORCE, new NullProgressMonitor() ); projectFile.close(); } public void validateContentAssistForElement( String elementName, String elementContent, String[] expectedProposal ) throws Exception { descriptorFile = getDescriptorFile(); setElementContent( descriptorFile, elementName, elementContent ); buildAndValidate( descriptorFile ); final ICompletionProposal[] proposals = getProposalsForElement( descriptorFile, elementName ); assertNotNull( proposals ); assertEquals( true, proposals.length > 0 ); for( String proposal : expectedProposal ) { assertTrue( "can't get proposal " + proposal + " in " + elementName, containsProposal( proposals, proposal, true ) ); } } public void validateHyperLinksForElement( String elementName, String expectedHyperlinkText ) throws Exception { descriptorFile = getDescriptorFile(); IHyperlink[] hyperLinks = getHyperLinksForElement( descriptorFile, elementName ); assertTrue( containHyperlink( hyperLinks, expectedHyperlinkText, true ) ); } public void validateQuickFixForElements( String elementName, String elementContent, String markerMessageRegex ) throws Exception { //check all types of elements has quick fix for decrease validation level in current project and all project descriptorFile = getDescriptorFile(); setElementContent( descriptorFile, elementName, elementContent ); buildAndValidate( descriptorFile ); IMarker expectedMarker = findMarkerByMessage( descriptorFile, MARKER_TYPE, markerMessageRegex, false ); assertNotNull( findMarkerResolutionByClass( expectedMarker, DecreaseProjectScopeXmlValidationLevel.class ) ); assertNotNull( findMarkerResolutionByClass( expectedMarker, DecreaseInstanceScopeXmlValidationLevel.class ) ); } @Test public void testIndexerClassName() throws Exception { if( shouldSkipBundleTests() )return; String elementName = "indexer-class-name"; String elementContent = ""; String expectedHyperlinkText = "Open 'Indexer - com.liferay.ide.tests'"; validateHyperLinksForElement( elementName, expectedHyperlinkText ); String[] expectedProposal = { "Indexer - com.liferay.ide.tests" }; validateContentAssistForElement( elementName, elementContent, expectedProposal ); elementContent = "com.liferay.ide.tests"; validateContentAssistForElement( elementName, elementContent, expectedProposal ); String markerMessageRegex = ".*" + elementContent + ".*"; validateQuickFixForElements( elementName, elementContent, markerMessageRegex ); } @Test public void testIndexerPostProcesserImpl() throws Exception { if( shouldSkipBundleTests() )return; String elementName = "indexer-post-processor-impl"; String elementContent = ""; String expectedHyperlinkText = "Open 'IndexerPostProcessorImpl - com.liferay.ide.tests'"; validateHyperLinksForElement( elementName, expectedHyperlinkText ); String[] expectedProposal = { "IndexerPostProcessorImpl - com.liferay.ide.tests" }; validateContentAssistForElement( elementName, elementContent, expectedProposal ); elementContent = "com.liferay.ide.tests"; validateContentAssistForElement( elementName, elementContent, expectedProposal ); String markerMessageRegex = ".*" + elementContent + ".*"; validateQuickFixForElements( elementName, elementContent, markerMessageRegex ); } @Test public void testLanguageProperties() throws Exception { if( shouldSkipBundleTests() )return; String elementName = "language-properties"; String elementContent = ""; String expectedHyperlinkText = "Open '/Liferay-Hook-Xml-Test-hook/docroot/WEB-INF/src/content/Language.properties'"; validateHyperLinksForElement( elementName, expectedHyperlinkText ); String[] expectedProposal = { "content/Language.properties" }; validateContentAssistForElement( elementName, elementContent, expectedProposal ); elementContent = "content/"; validateContentAssistForElement( elementName, elementContent, expectedProposal ); String markerMessageRegex = ".*" + elementContent + ".*"; validateQuickFixForElements( elementName, elementContent, markerMessageRegex ); } @Test public void testPortalProperties() throws Exception { if( shouldSkipBundleTests() )return; String elementName = "portal-properties"; String elementContent = ""; String expectedHyperlinkText = "Open '/Liferay-Hook-Xml-Test-hook/docroot/WEB-INF/src/content/portal.properties'"; validateHyperLinksForElement( elementName, expectedHyperlinkText ); String[] expectedProposal = { "content/portal.properties" }; validateContentAssistForElement( elementName, elementContent, expectedProposal ); elementContent = "content/"; validateContentAssistForElement( elementName, elementContent, expectedProposal ); String markerMessageRegex = ".*" + elementContent + ".*"; validateQuickFixForElements( elementName, elementContent, markerMessageRegex ); } @Test public void testCustomJspDir() throws Exception { if( shouldSkipBundleTests() )return; String elementName = "custom-jsp-dir"; String elementContent = ""; String[] expectedProposal = { "/WEB-INF/src" }; validateContentAssistForElement( elementName, elementContent, expectedProposal ); elementContent = "/WEB-INF"; validateContentAssistForElement( elementName, elementContent, expectedProposal ); elementContent = "/custom_jspsNotExist"; String markerMessageRegex = ".*" + elementContent + ".*"; validateQuickFixForElements( elementName, elementContent, markerMessageRegex ); } @Test public void testServiceType() throws Exception { if( shouldSkipBundleTests() )return; String elementName = "service-type"; String expectedHyperlinkText = "Open 'AccountService - com.liferay.portal.service'"; validateHyperLinksForElement( elementName, expectedHyperlinkText ); } @Test public void testServiceImpl() throws Exception { if( shouldSkipBundleTests() )return; String elementName = "service-impl"; String expectedHyperlinkText = "Open 'AccountServiceWrapperImpl - com.liferay.ide.tests'"; validateHyperLinksForElement( elementName, expectedHyperlinkText ); } @Test public void testServletFilterImpl() throws Exception { if( shouldSkipBundleTests() )return; String elementName = "servlet-filter-impl"; String elementContent = ""; String expectedHyperlinkText = "Open 'ServletFilterImpl - com.liferay.ide.tests'"; validateHyperLinksForElement( elementName, expectedHyperlinkText ); String[] expectedProposal = { "ServletFilterImpl - com.liferay.ide.tests" }; validateContentAssistForElement( elementName, elementContent, expectedProposal ); elementContent = "com.liferay.ide.tests"; validateContentAssistForElement( elementName, elementContent, expectedProposal ); String markerMessageRegex = ".*" + elementContent + ".*"; validateQuickFixForElements( elementName, elementContent, markerMessageRegex ); } @Test public void testStrutsActionImpl() throws Exception { if( shouldSkipBundleTests() )return; String elementName = "struts-action-impl"; String elementContent = ""; String expectedHyperlinkText = "Open 'StrutsActionImpl - com.liferay.ide.tests'"; validateHyperLinksForElement( elementName, expectedHyperlinkText ); String[] expectedProposal = { "StrutsActionImpl - com.liferay.ide.tests" }; validateContentAssistForElement( elementName, elementContent, expectedProposal ); elementContent = "com.liferay.ide.tests"; validateContentAssistForElement( elementName, elementContent, expectedProposal ); String markerMessageRegex = ".*" + elementContent + ".*"; validateQuickFixForElements( elementName, elementContent, markerMessageRegex ); } @Test public void testSourceViewerConfiguration() throws Exception { if( shouldSkipBundleTests() )return; final IFile descriptorFile = getDescriptorFile(); Object sourceViewerConfiguration = XmlSearchTestsUtils.getSourceViewerConfiguraionFromOpenedEditor( descriptorFile ); assertEquals( true, sourceViewerConfiguration instanceof LiferayCustomXmlViewerConfiguration ); } }