Fix for pmc approved: https://bugs.eclipse.org/bugs/show_bug.cgi?id=312358
diff --git a/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/TestJSPModelProcessor.java b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/TestJSPModelProcessor.java
index 7892ab0..a92493e 100644
--- a/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/TestJSPModelProcessor.java
+++ b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/TestJSPModelProcessor.java
@@ -21,6 +21,7 @@
import junit.framework.TestCase;
import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.CoreException;
import org.eclipse.jst.jsf.context.symbol.ISymbol;
import org.eclipse.jst.jsf.context.symbol.source.ISymbolConstants;
import org.eclipse.jst.jsf.core.IJSFCoreConstants;
@@ -295,6 +296,22 @@
}
}
+ public void testFileDoesnotExist()
+ {
+ IFile file = _testJSP1.getProject().getFile("/doesNotExist.jsp");
+ assertFalse(file.isAccessible());
+ boolean caughtException = false;
+ try
+ {
+ JSPModelProcessor.get(file);
+ }
+ catch (CoreException e)
+ {
+ caughtException = true;
+ }
+ assertTrue(caughtException);
+ }
+
public void testExplicitRefresh() throws Exception
{
// random order of access to the jsps, but always the same between runs
diff --git a/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/resources/ChangeTester.java b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/resources/ChangeTester.java
index aa92791..e047c3b 100644
--- a/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/resources/ChangeTester.java
+++ b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/resources/ChangeTester.java
@@ -42,6 +42,7 @@
final IResourceChangeEvent event = _eventFactory
.createSimpleFileChange((MockFile) file, true);
_context.fireWorkspaceEvent(event);
+ removeListener();
}
public void fireResourceFileAdd(final String resourceId)
@@ -51,6 +52,7 @@
final IResourceChangeEvent event = _eventFactory
.createSimpleFileAdded((MockFile) file);
_context.fireWorkspaceEvent(event);
+ removeListener();
}
private IFile getFile(final String resourceId)
@@ -81,7 +83,7 @@
final IResourceChangeEvent event = _eventFactory
.createSimpleFileRemove((MockFile) file);
_context.fireWorkspaceEvent(event);
-
+ removeListener();
}
public void fireResourceFolderAdd(final String folderName)
@@ -91,6 +93,7 @@
final IResourceChangeEvent event = _eventFactory
.createSimpleFolderAdded(folder);
_context.fireWorkspaceEvent(event);
+ removeListener();
}
public void fireResourceFolderDelete(final String folderName)
@@ -100,8 +103,21 @@
final IResourceChangeEvent event = _eventFactory
.createSimpleFolderDeleted(folder);
_context.fireWorkspaceEvent(event);
+ removeListener();
}
+ public void fireResourceFileDeleteRecusive(final String folderName)
+ {
+ installListener();
+ final IFolder folder = getFolder(folderName);
+ final IResourceChangeEvent event = _eventFactory
+ .createRecursiveFolderDeleted(folder);
+ _context.fireWorkspaceEvent(event);
+ removeListener();
+ }
+
+ protected abstract void removeListener();
+
public void fireResourceFolderRename(final String folderName,
final String newFolderName)
{
@@ -111,6 +127,7 @@
final IResourceChangeEvent event = _eventFactory
.createSimpleFolderRename(folder, newFolder);
_context.fireWorkspaceEvent(event);
+ removeListener();
}
public void fireResourceFileRename(String fileName, String newFileName)
@@ -121,7 +138,9 @@
final IResourceChangeEvent event = _eventFactory
.createSimpleFileRename(folder, newFolder);
_context.fireWorkspaceEvent(event);
+ removeListener();
}
+
public EVENTTYPE getEvent(final int eventNum)
{
return _events.get(eventNum);
@@ -157,6 +176,4 @@
{
assertEquals(numEvents, _events.size());
}
-
-
}
\ No newline at end of file
diff --git a/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/resources/TestWorkspaceBasedResourceLocator.java b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/resources/TestWorkspaceBasedResourceLocator.java
index a25810a..192a600 100644
--- a/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/resources/TestWorkspaceBasedResourceLocator.java
+++ b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/resources/TestWorkspaceBasedResourceLocator.java
@@ -20,21 +20,25 @@
import org.eclipse.jst.jsf.common.internal.resource.ContentTypeResolver;
import org.eclipse.jst.jsf.designtime.internal.resources.IJSFResourceFragment;
import org.eclipse.jst.jsf.designtime.internal.resources.IJSFResourceFragment.Type;
+import org.eclipse.jst.jsf.designtime.internal.resources.IWorkspaceJSFResourceFragment;
import org.eclipse.jst.jsf.designtime.internal.resources.JSFResource;
import org.eclipse.jst.jsf.designtime.internal.resources.JSFResourceChangeListener;
import org.eclipse.jst.jsf.designtime.internal.resources.JSFResourceChangeListener.JSFResourceChangedEvent;
import org.eclipse.jst.jsf.designtime.internal.resources.JSFResourceChangeListener.JSFResourceChangedEvent.CHANGE_TYPE;
import org.eclipse.jst.jsf.designtime.internal.resources.JSFResourceContainer;
+import org.eclipse.jst.jsf.designtime.internal.resources.ResourceFragmentIdentifier;
import org.eclipse.jst.jsf.designtime.internal.resources.ResourceIdentifier;
import org.eclipse.jst.jsf.designtime.internal.resources.ResourceIdentifierFactory;
import org.eclipse.jst.jsf.designtime.internal.resources.ResourceIdentifierFactory.InvalidIdentifierException;
import org.eclipse.jst.jsf.designtime.internal.resources.WorkspaceJSFResource;
import org.eclipse.jst.jsf.designtime.internal.resources.WorkspaceJSFResourceContainer;
import org.eclipse.jst.jsf.designtime.internal.resources.WorkspaceJSFResourceLocator;
+import org.eclipse.jst.jsf.test.util.junit4.BugRegressionTest;
import org.eclipse.jst.jsf.test.util.junit4.NoPluginEnvironment;
import org.eclipse.jst.jsf.test.util.mock.MockContainer;
import org.eclipse.jst.jsf.test.util.mock.MockContentTypeManager;
import org.eclipse.jst.jsf.test.util.mock.MockProject;
+import org.eclipse.jst.jsf.test.util.mock.MockResource;
import org.eclipse.jst.jsf.test.util.mock.MockResourceChangeEventFactory;
import org.eclipse.jst.jsf.test.util.mock.MockVirtualComponentQuery;
import org.eclipse.jst.jsf.test.util.mock.MockWorkspaceContext;
@@ -50,7 +54,6 @@
private MockProject _project;
private MockContainer _webContentFolder;
private IFolder _resourceRoot;
-
private MockResourceChangeEventFactory _eventFactory;
private ResourceIdentifierFactory _resourceIdFactory;
private ChangeTester<JSFResourceChangedEvent, CHANGE_TYPE> _changeTester;
@@ -82,18 +85,21 @@
_changeTester = new ChangeTester<JSFResourceChangedEvent, CHANGE_TYPE>(
_context, _eventFactory, _resourceRoot)
{
+ private JSFResourceChangeListener _listener;
+
@Override
protected void installListener()
{
_events.clear();
- _locator.addListener(new JSFResourceChangeListener()
+ _listener = new JSFResourceChangeListener()
{
@Override
public void changed(final JSFResourceChangedEvent event)
{
_events.add(event);
}
- });
+ };
+ _locator.addListener(_listener);
}
@Override
@@ -102,6 +108,12 @@
{
return event.getChangeType() == type;
}
+
+ @Override
+ protected void removeListener()
+ {
+ _locator.removeListener(_listener);
+ }
};
}
@@ -198,7 +210,7 @@
_locator.start(_project);
assertEquals(3, _locator.locate(_project).size());
_changeTester.fireResourceFolderRename("mylib333", "mylib1111");
- _changeTester.assertNumEvents(2);
+ _changeTester.assertNumEvents(3);
{
final JSFResourceChangedEvent event = _changeTester
.getSingleEvent(CHANGE_TYPE.ADDED);
@@ -215,23 +227,36 @@
assertEquals("mylib1111", resource.getName());
assertEquals(Type.CONTAINER, newValue.getType());
}
-
{
- final JSFResourceChangedEvent event = _changeTester
- .getSingleEvent(CHANGE_TYPE.REMOVED);
- assertEquals(CHANGE_TYPE.REMOVED, event.getChangeType());
- assertNotNull(event.getOldValue());
- assertNull(event.getNewValue());
- assertEquals(Type.CONTAINER, event.getOldValue().getType());
- final JSFResourceContainer oldValue = (JSFResourceContainer) event
- .getOldValue();
- assertTrue(oldValue instanceof WorkspaceJSFResourceContainer);
- final IResource resource = ((WorkspaceJSFResourceContainer) oldValue)
- .getResource();
- assertEquals(IResource.FOLDER, resource.getType());
- assertEquals("mylib333", resource.getName());
- assertEquals(Type.CONTAINER, oldValue.getType());
-
+ final List<JSFResourceChangedEvent> events = _changeTester
+ .getEvent(CHANGE_TYPE.REMOVED);
+ assertEquals(2, events.size());
+ JSFResourceChangedEvent event = events.get(0);
+ {
+ assertNotNull(event.getOldValue());
+ assertNull(event.getNewValue());
+ assertEquals(Type.CONTAINER, event.getOldValue().getType());
+ final JSFResourceContainer oldValue = (JSFResourceContainer) event
+ .getOldValue();
+ assertTrue(oldValue instanceof WorkspaceJSFResourceContainer);
+ final IResource resource = ((WorkspaceJSFResourceContainer) oldValue)
+ .getResource();
+ assertEquals(IResource.FOLDER, resource.getType());
+ assertEquals("mylib333", resource.getName());
+ assertEquals(Type.CONTAINER, oldValue.getType());
+ }
+ event = events.get(1);
+ {
+ assertNotNull(event.getOldValue());
+ assertNull(event.getNewValue());
+ assertEquals(Type.RESOURCE, event.getOldValue().getType());
+ final IWorkspaceJSFResourceFragment oldValue = (IWorkspaceJSFResourceFragment) event
+ .getOldValue();
+ final IResource resource = ((IWorkspaceJSFResourceFragment) oldValue)
+ .getResource();
+ assertEquals(IResource.FILE, resource.getType());
+ assertEquals("tag1.xhtml", resource.getName());
+ }
}
assertEquals(3, _locator.locate(_project).size());
}
@@ -241,7 +266,8 @@
{
_locator.start(_project);
assertEquals(3, _locator.locate(_project).size());
- _changeTester.fireResourceFileRename("mylib333/tag1.xhtml", "mylib333/tag2.xhtml");
+ _changeTester.fireResourceFileRename("mylib333/tag1.xhtml",
+ "mylib333/tag2.xhtml");
_changeTester.assertNumEvents(2);
{
final JSFResourceChangedEvent event = _changeTester
@@ -250,8 +276,7 @@
assertNull(event.getOldValue());
assertNotNull(event.getNewValue());
assertEquals(Type.RESOURCE, event.getNewValue().getType());
- final JSFResource newValue = (JSFResource) event
- .getNewValue();
+ final JSFResource newValue = (JSFResource) event.getNewValue();
assertTrue(newValue instanceof WorkspaceJSFResource);
final IResource resource = ((WorkspaceJSFResource) newValue)
.getResource();
@@ -260,7 +285,6 @@
assertEquals("mylib333/tag2.xhtml", newValue.getId().toString());
assertEquals(Type.RESOURCE, newValue.getType());
}
-
{
final JSFResourceChangedEvent event = _changeTester
.getSingleEvent(CHANGE_TYPE.REMOVED);
@@ -268,8 +292,7 @@
assertNotNull(event.getOldValue());
assertNull(event.getNewValue());
assertEquals(Type.RESOURCE, event.getOldValue().getType());
- final JSFResource oldValue = (JSFResource) event
- .getOldValue();
+ final JSFResource oldValue = (JSFResource) event.getOldValue();
assertTrue(oldValue instanceof WorkspaceJSFResource);
final IResource resource = ((WorkspaceJSFResource) oldValue)
.getResource();
@@ -280,7 +303,97 @@
assertEquals(3, _locator.locate(_project).size());
}
-
+ @Test
+ @BugRegressionTest(bugNumber = 312358)
+ public void testResourceRootDoesntExist()
+ {
+ ((MockResource) _resourceRoot).setExists(false);
+ _locator.start(_project);
+ // the workspace listener should get added event though the resource
+ // root doesn't yet exist.
+ assertEquals(1, _context.getWorkspace().getListeners().size());
+ // simulate adding the folder
+ ((MockResource) _resourceRoot).setExists(true);
+ _changeTester.fireResourceFolderAdd("");
+ _changeTester.assertNumEvents(1);
+ // simulate adding a sub-folder
+ _changeTester.fireResourceFolderAdd("ezcomp");
+ _changeTester.assertNumEvents(1);
+ List<JSFResourceChangedEvent> events = _changeTester
+ .getEvent(CHANGE_TYPE.ADDED);
+ assertEquals(1, events.size());
+ JSFResourceChangedEvent event = events.get(0);
+ ResourceFragmentIdentifier id = event.getNewValue().getId();
+ assertTrue(event.getNewValue().getType() == Type.CONTAINER);
+ assertEquals("ezcomp", id.getLibraryName());
+ }
+
+ @Test
+ @BugRegressionTest(bugNumber = 312358)
+ public void testRemoveResourceRootAndAdd()
+ {
+ _locator.start(_project);
+ assertEquals(1, _context.getWorkspace().getListeners().size());
+ // delete the folder
+ _changeTester.fireResourceFolderDelete("");
+ // should get an event for root, lib333 and lib333/tag1.xhtml
+ _changeTester.assertNumEvents(3);
+ // should still be listening event after root is removed in case
+ // it gets added back
+ assertEquals(1, _context.getWorkspace().getListeners().size());
+ // now add back the folder
+ _changeTester.fireResourceFolderAdd("");
+ _changeTester.assertNumEvents(1);
+ {
+ final JSFResourceChangedEvent event = _changeTester
+ .getSingleEvent(CHANGE_TYPE.ADDED);
+ assertEquals("", event.getNewValue().getId().toString());
+ }
+ // now add a child to the resource root and assert we discover it.
+ _changeTester.fireResourceFolderAdd("ezcomp");
+ _changeTester.assertNumEvents(1);
+ {
+ final JSFResourceChangedEvent event = _changeTester
+ .getSingleEvent(CHANGE_TYPE.ADDED);
+ assertEquals("ezcomp", event.getNewValue().getId().toString());
+ }
+ }
+
+ @Test
+ @BugRegressionTest(bugNumber = 312358)
+ public void testAddNoneResourceFolderToWebContent()
+ {
+ _locator.start(_project);
+ assertEquals(1, _context.getWorkspace().getListeners().size());
+ // delete the folder
+ _changeTester.fireResourceFolderAdd("../foobar");
+ _changeTester.assertNumEvents(0);
+ }
+
+ @Test
+ @BugRegressionTest(bugNumber = 312358)
+ public void testRemoveRecursiveFolder()
+ {
+ _locator.start(_project);
+ assertEquals(1, _context.getWorkspace().getListeners().size());
+ // delete the folder
+ _changeTester.fireResourceFileDeleteRecusive("");
+ final int expectedEvents = 3;
+ _changeTester.assertNumEvents(expectedEvents);
+ List<JSFResourceChangedEvent> events = _changeTester
+ .getEvent(CHANGE_TYPE.REMOVED);
+ assertEquals(expectedEvents, events.size());
+ Set<String> ids = new HashSet<String>();
+ for (final JSFResourceChangedEvent event : events)
+ {
+ ids.add(event.getOldValue().getId().toString());
+ }
+ assertTrue(ids.contains(""));
+ assertTrue(ids.contains("mylib333"));
+ assertTrue(ids.contains("mylib333/tag1.xhtml"));
+ assertEquals(expectedEvents, ids.size());
+ }
+
private IJSFResourceFragment findById(
final WorkspaceJSFResourceLocator locator, final String id)
throws InvalidIdentifierException
diff --git a/jsf/tests/org.eclipse.jst.jsf.test.util/src/org/eclipse/jst/jsf/test/util/junit4/BugRegressionTest.java b/jsf/tests/org.eclipse.jst.jsf.test.util/src/org/eclipse/jst/jsf/test/util/junit4/BugRegressionTest.java
new file mode 100644
index 0000000..1e377fd
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.test.util/src/org/eclipse/jst/jsf/test/util/junit4/BugRegressionTest.java
@@ -0,0 +1,8 @@
+package org.eclipse.jst.jsf.test.util.junit4;
+
+public @interface BugRegressionTest
+{
+ String bugSystem() default "Eclipse";
+
+ long bugNumber();
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.test.util/src/org/eclipse/jst/jsf/test/util/mock/MockResourceChangeEventFactory.java b/jsf/tests/org.eclipse.jst.jsf.test.util/src/org/eclipse/jst/jsf/test/util/mock/MockResourceChangeEventFactory.java
index f754fb2..938b3f8 100644
--- a/jsf/tests/org.eclipse.jst.jsf.test.util/src/org/eclipse/jst/jsf/test/util/mock/MockResourceChangeEventFactory.java
+++ b/jsf/tests/org.eclipse.jst.jsf.test.util/src/org/eclipse/jst/jsf/test/util/mock/MockResourceChangeEventFactory.java
@@ -73,6 +73,13 @@
return newPostChangeEvent(delta);
}
+ public IResourceChangeEvent createRecursiveFolderDeleted(final IFolder folder)
+ {
+ final MockResourceDelta delta = _deltaFactory
+ .createRecursiveFolderRemoved(folder);
+ return newPostChangeEvent(delta);
+ }
+
public IResourceChangeEvent createSimpleFolderRename(final IFolder folder,
final IFolder newFolderName)
{
diff --git a/jsf/tests/org.eclipse.jst.jsf.test.util/src/org/eclipse/jst/jsf/test/util/mock/MockResourceDeltaFactory.java b/jsf/tests/org.eclipse.jst.jsf.test.util/src/org/eclipse/jst/jsf/test/util/mock/MockResourceDeltaFactory.java
index 2da2785..0b70027 100644
--- a/jsf/tests/org.eclipse.jst.jsf.test.util/src/org/eclipse/jst/jsf/test/util/mock/MockResourceDeltaFactory.java
+++ b/jsf/tests/org.eclipse.jst.jsf.test.util/src/org/eclipse/jst/jsf/test/util/mock/MockResourceDeltaFactory.java
@@ -19,11 +19,10 @@
public class MockResourceDeltaFactory
{
-// private final MockWorkspaceContext _wsContext;
-
+ // private final MockWorkspaceContext _wsContext;
public MockResourceDeltaFactory(final MockWorkspaceContext wsContext)
{
-// _wsContext = wsContext;
+ // _wsContext = wsContext;
}
private void checkResourceValid(final IResource res)
@@ -62,31 +61,31 @@
final int kind)
{
checkResourceValid(folder);
- MockResourceDelta root = newAddDelta(folder, kind);
-
-// MockResourceDelta folderAdd = (MockResourceDelta) root
-// .findMember(folder.getFullPath());
-//
-// if (folderAdd == null)
-// {
-// throw new IllegalStateException();
-// }
-//
-// // TODO: add recursive folders
-// try
-// {
-// for (final IResource child : folder.members())
-// {
-// if (child.getType() == IResource.FILE)
-// {
-// MockResourceDelta newAddDelta = new MockResourceDelta(child, null, kind, Collections.EMPTY_LIST);
-// folderAdd.getChildDeltas().add(newAddDelta);
-// }
-// }
-// } catch (CoreException e)
-// {
-// throw new RuntimeException(e);
-// }
+ final MockResourceDelta root = newAddDelta(folder, kind);
+ // MockResourceDelta folderAdd = (MockResourceDelta) root
+ // .findMember(folder.getFullPath());
+ //
+ // if (folderAdd == null)
+ // {
+ // throw new IllegalStateException();
+ // }
+ //
+ // // TODO: add recursive folders
+ // try
+ // {
+ // for (final IResource child : folder.members())
+ // {
+ // if (child.getType() == IResource.FILE)
+ // {
+ // MockResourceDelta newAddDelta = new MockResourceDelta(child, null,
+ // kind, Collections.EMPTY_LIST);
+ // folderAdd.getChildDeltas().add(newAddDelta);
+ // }
+ // }
+ // } catch (CoreException e)
+ // {
+ // throw new RuntimeException(e);
+ // }
return root;
}
@@ -114,6 +113,12 @@
return newRemoveDelta(folder, kind);
}
+ public MockResourceDelta createRecursiveFolderRemoved(final IFolder folder)
+ {
+ checkResourceValid(folder);
+ return newRemoveDeltaRecursive(folder, IResourceDelta.REMOVED);
+ }
+
@SuppressWarnings("unchecked")
protected MockResourceDelta newChangeDelta(final IResource resource,
final int kind)
@@ -141,6 +146,33 @@
return createWorkspaceRootedDeltaTo(resource, delta);
}
+ private MockResourceDelta newRemoveDeltaRecursive(final IFolder folder,
+ final int kind)
+ {
+ final MockResourceDelta delta = recursiveContainerRemoved(folder, kind);
+ return createWorkspaceRootedDeltaTo(folder, delta);
+ }
+
+ private MockResourceDelta recursiveContainerRemoved(
+ final IResource rootRes, final int kind)
+ {
+ List<MockResourceDelta> childDeltas = new ArrayList<MockResourceDelta>();
+ try
+ {
+ if (rootRes instanceof IContainer)
+ {
+ for (final IResource res : ((IContainer) rootRes).members())
+ {
+ childDeltas.add(recursiveContainerRemoved(res, kind));
+ }
+ }
+ return new MockResourceDelta(null, rootRes, kind, childDeltas);
+ } catch (CoreException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
/**
* @return a delta that doesn't represent a change itself but has
* descendants that do.
@@ -158,8 +190,8 @@
IContainer parent = res.getParent();
while (parent != null)
{
- curDelta = createPathToChangeDelta(parent, Collections
- .singletonList(curDelta));
+ curDelta = createPathToChangeDelta(parent,
+ Collections.singletonList(curDelta));
parent = parent.getParent();
}
return curDelta;
@@ -190,7 +222,8 @@
return createFolderMove(folder, newFolder);
}
- public MockResourceDelta createFolderMove(IFolder folder, IFolder newFolder)
+ public MockResourceDelta createFolderMove(final IFolder folder,
+ final IFolder newFolder)
{
final MockResourceDelta fileAddEvent = createSimpleFolderAdded(
newFolder, IResourceDelta.ADDED | IResourceDelta.MOVED_FROM);
@@ -265,7 +298,7 @@
for (final Map.Entry<IResource, MockResourceDelta> entry : _merged
.entrySet())
{
- IResource key = entry.getKey();
+ final IResource key = entry.getKey();
if (key == null)
{
throw new NullPointerException();
@@ -285,7 +318,6 @@
break;
}
}
-
if (mergeChild != null)
{
newDelta.getChildDeltas().remove(mergeChild);
diff --git a/jsf/tests/org.eclipse.jst.jsf.validation.el.tests/src/org/eclipse/jst/jsf/validation/el/tests/base/ELAssert.java b/jsf/tests/org.eclipse.jst.jsf.validation.el.tests/src/org/eclipse/jst/jsf/validation/el/tests/base/ELAssert.java
index 112f634..f758472 100644
--- a/jsf/tests/org.eclipse.jst.jsf.validation.el.tests/src/org/eclipse/jst/jsf/validation/el/tests/base/ELAssert.java
+++ b/jsf/tests/org.eclipse.jst.jsf.validation.el.tests/src/org/eclipse/jst/jsf/validation/el/tests/base/ELAssert.java
@@ -42,6 +42,10 @@
{
final IStructuredDocumentContext context =
IStructuredDocumentContextFactory.INSTANCE.getContext(document, docPos);
+ if (context == null)
+ {
+ fail("context is null");
+ }
final ITextRegionContextResolver resolver =
IStructuredDocumentContextResolverFactory.INSTANCE.getTextRegionResolver(context);
return resolver.getRegionText();