blob: 9d536bd90edad24401956bec501ec5b2980dfa59 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2015, 2022 1C-Soft LLC.
*
* This program and the accompanying materials are made available under
* the terms of the Eclipse Public License 2.0 which is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Vladimir Piskarev (1C) - initial API and implementation
*******************************************************************************/
package org.eclipse.handly.internal.examples.jmodel;
import java.io.ByteArrayInputStream;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.Path;
import org.eclipse.handly.examples.jmodel.IJavaModel;
import org.eclipse.handly.examples.jmodel.JavaModelCore;
import org.eclipse.handly.junit.NoJobsWorkspaceTestCase;
/**
* <code>PackageFragmentRoot</code> notification tests.
*/
public class PackageFragmentRootNotificationTest
extends NoJobsWorkspaceTestCase
{
private IJavaModel javaModel = JavaModelCore.getJavaModel();
private JavaModelListener listener = new JavaModelListener();
private IFolder srcFolder;
private IFolder fooFolder;
private IFolder barFolder;
private IFolder metainfFolder;
private IFile abcFile;
@Override
protected void setUp() throws Exception
{
super.setUp();
IProject project = setUpProject("Test005");
srcFolder = project.getFolder("src");
fooFolder = srcFolder.getFolder("foo");
barFolder = fooFolder.getFolder("bar");
metainfFolder = srcFolder.getFolder("META-INF");
abcFile = srcFolder.getFile("abc");
javaModel.addElementChangeListener(listener);
}
@Override
protected void tearDown() throws Exception
{
javaModel.removeElementChangeListener(listener);
super.tearDown();
}
public void test001() throws Exception
{
// delete foo.bar
barFolder.delete(true, null);
//@formatter:off
listener.assertDelta(
"Java Model[*]: {CHILDREN}\n" +
" Test005[*]: {CHILDREN}\n" +
" src[*]: {CHILDREN}\n" +
" foo.bar[-]: {}"
);
//@formatter:on
// (re-)create foo.bar
barFolder.create(true, true, null);
//@formatter:off
listener.assertDelta(
"Java Model[*]: {CHILDREN}\n" +
" Test005[*]: {CHILDREN}\n" +
" src[*]: {CHILDREN}\n" +
" foo.bar[+]: {}"
);
//@formatter:on
}
public void test002() throws Exception
{
// delete META-INF and abc
javaModel.getWorkspace().run(monitor ->
{
metainfFolder.delete(true, null);
abcFile.delete(true, null);
}, null);
//@formatter:off
listener.assertDelta(
"Java Model[*]: {CHILDREN}\n" +
" Test005[*]: {CHILDREN}\n" +
" src[*]: {CONTENT}\n" +
" ResourceDelta(/Test005/src/META-INF)[-]\n" +
" ResourceDelta(/Test005/src/abc)[-]"
);
//@formatter:on
// (re-)create META-INF and abc
javaModel.getWorkspace().run(monitor ->
{
metainfFolder.create(true, true, null);
abcFile.create(new ByteArrayInputStream(new byte[0]), true, null);
}, null);
//@formatter:off
listener.assertDelta(
"Java Model[*]: {CHILDREN}\n" +
" Test005[*]: {CHILDREN}\n" +
" src[*]: {CONTENT}\n" +
" ResourceDelta(/Test005/src/META-INF)[+]\n" +
" ResourceDelta(/Test005/src/abc)[+]"
);
//@formatter:on
}
public void test003() throws Exception
{
// rename foo to foo2
fooFolder.move(new Path("foo2"), true, null);
//@formatter:off
listener.assertDelta(
"Java Model[*]: {CHILDREN}\n" +
" Test005[*]: {CHILDREN}\n" +
" src[*]: {CHILDREN}\n" +
" foo[-]: {MOVED_TO(foo2 [in src [in Test005]])}\n" +
" foo.bar[-]: {MOVED_TO(foo2.bar [in src [in Test005]])}\n" +
" foo2[+]: {MOVED_FROM(foo [in src [in Test005]])}\n" +
" foo2.bar[+]: {MOVED_FROM(foo.bar [in src [in Test005]])}"
);
//@formatter:on
}
public void test004() throws Exception
{
// move foo to a non-Java resource
IFolder osgiinfFolder = srcFolder.getFolder("OSGI-INF");
fooFolder.move(osgiinfFolder.getFullPath(), true, null);
//@formatter:off
listener.assertDelta(
"Java Model[*]: {CHILDREN}\n" +
" Test005[*]: {CHILDREN}\n" +
" src[*]: {CHILDREN | CONTENT}\n" +
" foo[-]: {}\n" +
" foo.bar[-]: {}\n" +
" ResourceDelta(/Test005/src/OSGI-INF)[+]"
);
//@formatter:on
// move it back
osgiinfFolder.move(fooFolder.getFullPath(), true, null);
//@formatter:off
listener.assertDelta(
"Java Model[*]: {CHILDREN}\n" +
" Test005[*]: {CHILDREN}\n" +
" src[*]: {CHILDREN | CONTENT}\n" +
" foo[+]: {}\n" +
" foo.bar[+]: {}\n" +
" ResourceDelta(/Test005/src/OSGI-INF)[-]"
);
//@formatter:on
}
public void test005() throws Exception
{
// move META-INF, abc and A.java
javaModel.getWorkspace().run(monitor ->
{
metainfFolder.move(new Path("OSGI-INF"), true, null);
abcFile.move(new Path("abc.java"), true, null);
IFile aJavaFile = srcFolder.getFile("A.java");
aJavaFile.move(new Path("A"), true, null);
}, null);
//@formatter:off
listener.assertDelta(
"Java Model[*]: {CHILDREN}\n" +
" Test005[*]: {CHILDREN}\n" +
" src[*]: {CHILDREN | CONTENT}\n" +
" <default>[*]: {CHILDREN}\n" +
" A.java[-]: {}\n" +
" abc.java[+]: {}\n" +
" ResourceDelta(/Test005/src/A)[+]\n" +
" ResourceDelta(/Test005/src/META-INF)[-]\n" +
" ResourceDelta(/Test005/src/OSGI-INF)[+]\n" +
" ResourceDelta(/Test005/src/abc)[-]"
);
//@formatter:on
}
}