/******************************************************************************* * Copyright (c) 2008, 2017 xored software, Inc. and others. * * All rights reserved. This program and the accompanying materials * are 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: * xored software, Inc. - initial API and Implementation (Alex Panchenko) *******************************************************************************/ package org.eclipse.dltk.ui.tests.refactoring; import java.io.IOException; import java.util.HashSet; import java.util.Set; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.Path; import org.eclipse.dltk.compiler.util.Util; import org.eclipse.dltk.core.IScriptFolder; import org.eclipse.dltk.core.tests.model.AbstractModelTests; import org.eclipse.dltk.internal.corext.refactoring.util.ModelElementUtil; import org.eclipse.dltk.ui.tests.DLTKUITestsPlugin; public class ModelElementUtilTests extends AbstractModelTests { /** * @param testProjectName * @param name */ public ModelElementUtilTests(String name) { super(DLTKUITestsPlugin.PLUGIN_ID, name); } public void testGetPackageAndSubpackages() throws CoreException, IOException { final String projectName = "subpackages"; setUpScriptProject(projectName); try { waitUntilIndexesReady(); IScriptFolder folder0 = getScriptFolder(projectName, Util.EMPTY_STRING, new Path("folder0")); IScriptFolder[] subfolders0 = ModelElementUtil .getPackageAndSubpackages(folder0); checkFolders(subfolders0, new String[] { folder0.getElementName() }); // IScriptFolder folder1 = getScriptFolder(projectName, Util.EMPTY_STRING, new Path("folder1")); IScriptFolder[] subfolders1 = ModelElementUtil .getPackageAndSubpackages(folder1); checkFolders(subfolders1, new String[] { folder1.getElementName(), folder1.getElementName() + "/A" }); // IScriptFolder folder2 = getScriptFolder(projectName, Util.EMPTY_STRING, new Path("folder2")); IScriptFolder[] subfolders2 = ModelElementUtil .getPackageAndSubpackages(folder2); checkFolders(subfolders2, new String[] { folder2.getElementName(), folder2.getElementName() + "/B", folder2.getElementName() + "/C" }); } finally { deleteProject(projectName); } } /** * @param folders * @param names */ private void checkFolders(IScriptFolder[] folders, String[] names) { assertEquals(names.length, folders.length); final Set<String> set = new HashSet<>(); for (int i = 0; i < folders.length; ++i) { final String relativePath = folders[i].getPath() .removeFirstSegments(1).toString(); assertTrue("duplicate entry " + relativePath, set.add(relativePath)); } for (int i = 0; i < names.length; ++i) { assertTrue(names[i] + " is not found", set.contains(names[i])); } } }