/******************************************************************************* * Copyright (c) 2011 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.cdi.seam.core.test.international; import java.util.List; import org.eclipse.core.resources.IFile; import org.jboss.tools.cdi.internal.core.el.CdiElResolver; import org.jboss.tools.cdi.seam.core.test.SeamCoreTest; import org.jboss.tools.common.el.core.ELReference; import org.jboss.tools.common.el.core.model.ELInvocationExpression; import org.jboss.tools.common.el.core.resolver.ELContext; import org.jboss.tools.common.el.core.resolver.ELResolution; import org.jboss.tools.common.el.core.resolver.ELResolver; import org.jboss.tools.common.el.core.resolver.ELSegment; import org.jboss.tools.common.text.TextProposal; import org.jboss.tools.jst.web.ui.internal.text.ext.hyperlink.ELHyperlinkDetector; import org.jboss.tools.jst.web.kb.PageContextFactory; /** * The JUnit test cases for JBIDE-9480 issue * * @author Victor Rubezhny */ public class SeamResourceBundleCdiElResolverTest extends SeamCoreTest { private static final String PAGE_NAME = "WebContent/seam-international.xhtml"; public void testSeamResourceBundleCdiElResolver() throws Exception { IFile page = getTestProject().getFile(PAGE_NAME); assertTrue("Test page not found: " + PAGE_NAME, (page != null && page.exists())); ELContext context = PageContextFactory.createPageContext(page); ELResolver[] elResolvers = context.getElResolvers(); ELResolver cdiElResolver = null; if (elResolvers != null) { for (ELResolver r : elResolvers) { if (r instanceof CdiElResolver) { cdiElResolver = r; break; } } } assertNotNull("CDI EL resolver is not set up on the project", cdiElResolver); List<TextProposal> proposals = cdiElResolver.getProposals(context, "value=\"#{", 1); assertTrue("CDI EL resolver must return at least one proposal!", (proposals != null && proposals.size() > 0)); // For all the following cases no proposals is to be returned proposals = cdiElResolver.getProposals(context, "value=\"#{bundles", 1); assertFalse("CDI EL resolver must not to resolve resource bundles/properties but it does!", (proposals != null && proposals.size() > 0)); proposals = cdiElResolver.getProposals(context, "value=\"#{bundles.messages", 1); assertFalse("CDI EL resolver must not to resolve resource bundles/properties but it does!", (proposals != null && proposals.size() > 0)); proposals = cdiElResolver.getProposals(context, "value=\"#{bundles.messages.home_header", 1); assertFalse("CDI EL resolver must not to resolve resource bundles/properties but it does!", (proposals != null && proposals.size() > 0)); } public void testSeamResourceBundleCdiElResolverResolution() throws Exception { IFile page = getTestProject().getFile(PAGE_NAME); assertTrue("Test page not found: " + PAGE_NAME, (page != null && page.exists())); ELContext context = PageContextFactory.createPageContext(page); doSeamResourceBundleCdiElResolverResolutionTest(context, 381); doSeamResourceBundleCdiElResolverResolutionTest(context, 389); doSeamResourceBundleCdiElResolverResolutionTest(context, 398); } private void doSeamResourceBundleCdiElResolverResolutionTest(ELContext context, int offset) { ELReference reference = context.getELReference(offset); if(reference != null){ ELInvocationExpression expression = ELHyperlinkDetector.findInvocationExpressionByOffset(reference, offset); if(expression != null){ ELResolver[] resolvers = context.getElResolvers(); ELResolver cdiElResolver = null; if (resolvers != null) { for (ELResolver r : resolvers) { if (r instanceof CdiElResolver) { cdiElResolver = r; break; } } } assertNotNull("CDI EL resolver is not set up on the project", cdiElResolver); ELResolution resolution = cdiElResolver.resolve(context, expression, offset); if(resolution != null){ ELSegment segment = resolution.findSegmentByOffset(offset-reference.getStartPosition()); assertFalse("CDI EL resolver must not to resolve resource bundles/properties but it does!", segment != null && segment.isResolved()); } } } } }