blob: b2471941f1c7b0acdbd6a12dafe7ea48db601cd6 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2019 IBM Corporation and others.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.jsf.core.tests.resource;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceChangeEvent;
import org.eclipse.jst.jsf.common.internal.resource.LifecycleListener;
import org.eclipse.jst.jsf.common.internal.resource.ResourceLifecycleEvent.ReasonType;
import org.eclipse.jst.jsf.common.internal.resource.ResourceTracker;
import org.eclipse.jst.jsf.test.util.junit4.NoPluginEnvironment;
import org.eclipse.jst.jsf.test.util.junit4.WorkspaceContext;
import org.eclipse.jst.jsf.test.util.junit4.WorkspaceRunner;
import org.eclipse.jst.jsf.test.util.mock.IWorkspaceContextWithEvents;
import org.eclipse.jst.jsf.test.util.mock.MockResourceChangeEventFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.runner.RunWith;
@RunWith(WorkspaceRunner.class)
@Category(NoPluginEnvironment.class)
public class TestResourceTracker
{
private static class TestableResourceTracker extends
ResourceTracker<IResource>
{
private boolean _inAccessibleFired;
private ReasonType _inAccessibleReason;
private boolean _changeFired;
private ReasonType _changeReason;
private boolean _addFired;
private List<ReasonType> _addReason = new ArrayList<ReasonType>();
public TestableResourceTracker(final IResource resource)
{
super(resource);
}
@Override
protected void fireResourceInAccessible(final IResource resource, final ReasonType reasonType)
{
_inAccessibleFired = true;
_inAccessibleReason = reasonType;
}
@Override
protected void fireResourceChanged(final IResource resource, final ReasonType reasonType)
{
_changeFired = true;
_changeReason = reasonType;
}
@Override
protected void fireResourceAdded(final IResource affectedResource,
final ReasonType reasonType)
{
_addFired = true;
_addReason.add(reasonType);
}
public final boolean isInAccessibleFired()
{
return _inAccessibleFired;
}
public final ReasonType getInAccessibleReason()
{
return _inAccessibleReason;
}
public final boolean isChangeFired()
{
return _changeFired;
}
public final ReasonType getChangeReason()
{
return _changeReason;
}
public final boolean isAddFired()
{
return _addFired;
}
public final List<ReasonType> getAddReason()
{
return _addReason;
}
}
private MockResourceChangeEventFactory _eventFactory;
@WorkspaceContext
private IWorkspaceContextWithEvents _wsContext;
private IFile _testResource;
private TestableResourceTracker _resourceTracker;
private LifecycleListener _lifecycleListener;
private IFile _uninterestedInRes;
@Before
public void setUp() throws Exception
{
// _wsContext = new MockWorkspaceContext();
_eventFactory = new MockResourceChangeEventFactory(_wsContext);
final IProject createProject = _wsContext.createProject(
"TestResourceTracker_Project");
_testResource = createProject
.getFile("/WebContent/resources/foo/resource/somelib/foo.xhtml");
_uninterestedInRes = createProject
.getFile("/WebContent/resources/foo/resource/uninterestedInMe/foo.xhtml");
_resourceTracker = new TestableResourceTracker(_testResource);
_lifecycleListener = new LifecycleListener(_wsContext.getWorkspace());
_lifecycleListener.addListener(_resourceTracker);
_lifecycleListener.addResource(_testResource);
_lifecycleListener.addResource(_uninterestedInRes);
}
@After
public void tearDown()
{
_resourceTracker.dispose();
}
@Test
public void testGetResource()
{
assertSame(_testResource, _resourceTracker.getResource());
}
@Test
public void testGetLastModifiedStamp()
{
assertEquals(-1, _resourceTracker.getLastModifiedStamp());
}
@Test
public void testFireResourceInAccessible()
{
final IResourceChangeEvent event = _eventFactory
.createSimpleProjectDeleted( _testResource
.getProject());
_wsContext.fireWorkspaceEvent(event);
assertTrue(_resourceTracker.isInAccessibleFired());
assertEquals(ReasonType.RESOURCE_PROJECT_DELETED, _resourceTracker
.getInAccessibleReason());
assertFalse(_resourceTracker.isAddFired());
assertFalse(_resourceTracker.isChangeFired());
}
@Test
public void testFireResourceChanged()
{
final IResourceChangeEvent event = _eventFactory
.createSimpleFileChange(_testResource, true);
_wsContext.fireWorkspaceEvent(event);
assertTrue(_resourceTracker.isChangeFired());
assertEquals(ReasonType.RESOURCE_CHANGED_CONTENTS, _resourceTracker
.getChangeReason());
assertFalse(_resourceTracker.isAddFired());
assertFalse(_resourceTracker.isInAccessibleFired());
}
@Test
public void testFireResourceAdded()
{
final IResourceChangeEvent event = _eventFactory
.createSimpleFileAdded(_testResource);
_wsContext.fireWorkspaceEvent(event);
assertTrue(_resourceTracker.isAddFired());
assertEquals(1, _resourceTracker.getAddReason().size());
assertEquals(ReasonType.RESOURCE_ADDED, _resourceTracker.getAddReason().get(0));
assertFalse(_resourceTracker.isInAccessibleFired());
assertFalse(_resourceTracker.isChangeFired());
}
@Test
public void testResourceFilter()
{
final IResourceChangeEvent event = _eventFactory
.createSimpleFileChange(_uninterestedInRes, true);
_wsContext.fireWorkspaceEvent(event);
assertFalse(_resourceTracker.isInAccessibleFired());
assertFalse(_resourceTracker.isAddFired());
assertFalse(_resourceTracker.isChangeFired());
}
}