blob: 8e7ed6fa5e1d7cea23688b7ebd1b9774f140af8b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2018 GK Software SE 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:
* Stephan Herrmann - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.ui.tests.buildpath;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jdt.internal.ui.wizards.buildpaths.CPListElementSorter;
import org.eclipse.jdt.internal.ui.wizards.buildpaths.CPListLabelProvider;
import org.eclipse.jdt.internal.ui.wizards.buildpaths.CPUserLibraryElement;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.ITreeListAdapter;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.TreeListDialogField;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
public class CPUserLibraryTest extends TestCase {
/** Make {@link #getSortedChildren(Object)} accessible. */
static class MyTreeViewer extends TreeViewer {
public MyTreeViewer(Tree tree) {
super(tree);
}
@Override
public Object[] getSortedChildren(Object parentElementOrTreePath) {
return super.getSortedChildren(parentElementOrTreePath);
}
}
/** Install our own {@link MyTreeViewer}.
* @param <E> the type of the root elements.
*/
static class MyTreeListDialogField<E> extends TreeListDialogField<E> {
public MyTreeListDialogField(ITreeListAdapter<E> adapter, String[] buttonLabels, ILabelProvider lprovider) {
super(adapter, buttonLabels, lprovider);
}
@Override
protected MyTreeViewer createTreeViewer(Composite parent) {
Tree tree= new Tree(parent, getTreeStyle());
tree.setFont(parent.getFont());
return new MyTreeViewer(tree);
}
@Override
public MyTreeViewer getTreeViewer() {
return (MyTreeViewer) super.getTreeViewer();
}
}
public CPUserLibraryTest(String name) {
super(name);
}
public static Test suite() {
return new TestSuite(CPUserLibraryTest.class);
}
public void testUserLibrarySorting() {
Shell parent= new Shell();
try {
String[] buttonLabels = { "OK", "CANCEL" };
MyTreeListDialogField<CPUserLibraryElement> listDialogField= new MyTreeListDialogField<>(null, buttonLabels, new CPListLabelProvider());
listDialogField.setElements(getLibraryElements("BLIB", "CLIB", "ALIB"));
listDialogField.setViewerComparator(new CPListElementSorter());
listDialogField.getTreeControl(parent);
MyTreeViewer treeViewer= listDialogField.getTreeViewer();
Object[] sortedChildren= treeViewer.getSortedChildren(listDialogField);
String result = Arrays.stream(sortedChildren)
.map(e -> ((CPUserLibraryElement)e).getName())
.collect(Collectors.joining(":"));
assertEquals("Unexpected element", "ALIB:BLIB:CLIB", result);
} finally {
parent.dispose();
}
}
private List<CPUserLibraryElement> getLibraryElements(String... libNames) {
return Arrays.stream(libNames)
.map(n -> new CPUserLibraryElement(n, false, null))
.collect(Collectors.toList());
}
}