Author: vrubezhny
Date: 2011-09-15 17:19:44 -0400 (Thu, 15 Sep 2011)
New Revision: 34788
Added:
trunk/cdi/tests/org.jboss.tools.cdi.seam.core.test/src/org/jboss/tools/cdi/seam/core/test/international/SeamResourceBundleCdiElResolverTest.java
Modified:
trunk/cdi/tests/org.jboss.tools.cdi.seam.core.test/src/org/jboss/tools/cdi/seam/core/test/CDISeamCoreAllTests.java
trunk/jst/plugins/org.jboss.tools.jst.text.ext/src/org/jboss/tools/jst/text/ext/hyperlink/ELHyperlinkDetector.java
Log:
JBIDE-9480
CdiElResolver incorrectly resolves resource message bundle properties as Java Elements
JUnit test is added.
Modified:
trunk/cdi/tests/org.jboss.tools.cdi.seam.core.test/src/org/jboss/tools/cdi/seam/core/test/CDISeamCoreAllTests.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.seam.core.test/src/org/jboss/tools/cdi/seam/core/test/CDISeamCoreAllTests.java 2011-09-15
21:17:40 UTC (rev 34787)
+++
trunk/cdi/tests/org.jboss.tools.cdi.seam.core.test/src/org/jboss/tools/cdi/seam/core/test/CDISeamCoreAllTests.java 2011-09-15
21:19:44 UTC (rev 34788)
@@ -16,6 +16,7 @@
import org.eclipse.jdt.internal.core.JavaModelManager;
import org.eclipse.wst.validation.ValidationFramework;
import org.jboss.tools.cdi.seam.core.test.international.BundleModelTest;
+import
org.jboss.tools.cdi.seam.core.test.international.SeamResourceBundleCdiElResolverTest;
import org.jboss.tools.cdi.seam.core.test.international.SeamResourceBundlesTest;
import org.jboss.tools.cdi.seam.core.test.jms.SeamJmsValidationTest;
import org.jboss.tools.cdi.seam.core.test.persistence.SeamPersistenceTest;
@@ -43,12 +44,13 @@
suite.addTestSuite(SeamResourceBundlesTest.class);
suite.addTestSuite(BundleModelTest.class);
suite.addTestSuite(SeamJmsValidationTest.class);
+ suite.addTestSuite(SeamResourceBundleCdiElResolverTest.class);
suiteAll.addTest(new SeamCoreTestSetup(suite));
suite = new TestSuite("Seam Persistence Project Tests");
suite.addTestSuite(SeamPersistenceTest.class);
suiteAll.addTest(new SeamPersistenceTestSetup(suite));
-
+
suiteAll.addTestSuite(ValidationExceptionTest.class); // This test should be added
last!
return suiteAll;
Added:
trunk/cdi/tests/org.jboss.tools.cdi.seam.core.test/src/org/jboss/tools/cdi/seam/core/test/international/SeamResourceBundleCdiElResolverTest.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.seam.core.test/src/org/jboss/tools/cdi/seam/core/test/international/SeamResourceBundleCdiElResolverTest.java
(rev 0)
+++
trunk/cdi/tests/org.jboss.tools.cdi.seam.core.test/src/org/jboss/tools/cdi/seam/core/test/international/SeamResourceBundleCdiElResolverTest.java 2011-09-15
21:19:44 UTC (rev 34788)
@@ -0,0 +1,107 @@
+/*******************************************************************************
+ * 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.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());
+ }
+ }
+ }
+ }
+}
Property changes on:
trunk/cdi/tests/org.jboss.tools.cdi.seam.core.test/src/org/jboss/tools/cdi/seam/core/test/international/SeamResourceBundleCdiElResolverTest.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified:
trunk/jst/plugins/org.jboss.tools.jst.text.ext/src/org/jboss/tools/jst/text/ext/hyperlink/ELHyperlinkDetector.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.text.ext/src/org/jboss/tools/jst/text/ext/hyperlink/ELHyperlinkDetector.java 2011-09-15
21:17:40 UTC (rev 34787)
+++
trunk/jst/plugins/org.jboss.tools.jst.text.ext/src/org/jboss/tools/jst/text/ext/hyperlink/ELHyperlinkDetector.java 2011-09-15
21:19:44 UTC (rev 34788)
@@ -70,7 +70,14 @@
return (IHyperlink[])links.toArray(new IHyperlink[links.size()]);
}
- private ELInvocationExpression findInvocationExpressionByOffset(ELReference reference,
int offset){
+ /**
+ * Returns EL Invocation Expression of EL reference by offset
+ *
+ * @param reference
+ * @param offset
+ * @return
+ */
+ public static ELInvocationExpression findInvocationExpressionByOffset(ELReference
reference, int offset){
ELExpression[] expressions = reference.getEl();
for(ELExpression expression : expressions){
if(reference.getStartPosition()+expression.getStartPosition() <= offset &&
reference.getStartPosition()+expression.getEndPosition() > offset){
@@ -82,7 +89,7 @@
return null;
}
- private ELInvocationExpression findInvocationExpressionByOffset(ELReference reference,
ELExpression expression, int offset){
+ private static ELInvocationExpression findInvocationExpressionByOffset(ELReference
reference, ELExpression expression, int offset){
List<ELInvocationExpression> invocations = expression.getInvocations();
for(ELInvocationExpression invocation : invocations){
if(reference.getStartPosition()+invocation.getStartPosition() <= offset &&
reference.getStartPosition()+invocation.getEndPosition() > offset)