blob: 62d95e6c1617557a93c912a7bc164222c0f943d4 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2016 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.ua.tests.help.toc;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import java.util.List;
import org.eclipse.core.expressions.IEvaluationContext;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.help.IToc;
import org.eclipse.help.ITocContribution;
import org.eclipse.help.ITopic;
import org.eclipse.help.IUAElement;
import org.eclipse.help.internal.HelpData;
import org.eclipse.help.internal.HelpPlugin;
import org.eclipse.help.internal.toc.TocSorter;
import org.eclipse.help.internal.util.ProductPreferences;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class TocSortingTest {
private static final String BASE_TOCS = "baseTOCS";
private static final String ORDERED_XML = "PLUGINS_ROOT/org.eclipse.ua.tests/data/help/toc/toc_data/helpDataOrdered.xml";
private static final String EMPTY_XML = "PLUGINS_ROOT/org.eclipse.ua.tests/data/help/toc/toc_data/helpDataEmpty.xml";
private static final String NO_SORT_XML = "PLUGINS_ROOT/org.eclipse.ua.tests/data/help/toc/toc_data/helpDataOrderedNoSort.xml";
private static final String BAD_PLUGIN_HELP_DATA_XML = "PLUGINS_ROOT/org.eclipse.nosuchplugin/data/help/toc/toc_data/helpData.xml";
private static final String NO_SUCH_FILE_XML = "PLUGINS_ROOT/org.eclipse.ua.tests/data/help/toc/toc_data/noSuchFile.xml";
private static final String ALPHA_SORT_XML = "PLUGINS_ROOT/org.eclipse.ua.tests/data/help/toc/toc_data/helpDataOrderedAlphaSort.xml";
private String helpDataPreference;
private String baseTocsPreference;
private class Toc implements IToc {
private String label;
public Toc(String label) {
this.label = label;
}
@Override
public ITopic getTopic(String href) {
return null;
}
@Override
public ITopic[] getTopics() {
return new ITopic[0];
}
@Override
public IUAElement[] getChildren() {
return new IUAElement[0];
}
@Override
public boolean isEnabled(IEvaluationContext context) {
return true;
}
@Override
public String getHref() {
return null;
}
@Override
public String getLabel() {
return label;
}
}
private class TC implements ITocContribution {
private IToc toc;
private String categoryId;
private String id;
public TC(String name, String category) {
this.categoryId = category;
this.id = "/" + name + "/toc.xml";
this.toc = new Toc(name);
}
@Override
public String getCategoryId() {
return categoryId;
}
@Override
public String getContributorId() {
return "org.eclipse.ua.tests";
}
@Override
public String[] getExtraDocuments() {
return new String[0];
}
@Override
public String getId() {
return id;
}
@Override
public String getLinkTo() {
return null;
}
@Override
public String getLocale() {
return "en";
}
@Override
public IToc getToc() {
return toc;
}
@Override
public boolean isPrimary() {
return true;
}
}
@Before
public void setUp() throws Exception {
helpDataPreference = Platform.getPreferencesService().getString
(HelpPlugin.HELP_DATA_KEY, HelpPlugin.HELP_DATA_KEY, "", null);
baseTocsPreference = Platform.getPreferencesService().getString
(HelpPlugin.HELP_DATA_KEY, BASE_TOCS, "", null);
HelpData.clearProductHelpData();
ProductPreferences.resetPrimaryTocOrdering();
setHelpData(EMPTY_XML);
setBaseTocs("");
}
@After
public void tearDown() throws Exception {
setHelpData(helpDataPreference);
setBaseTocs(baseTocsPreference);
HelpData.clearProductHelpData();
ProductPreferences.resetPrimaryTocOrdering();
}
private void setHelpData(String value) {
IEclipsePreferences prefs = InstanceScope.INSTANCE.getNode(HelpPlugin.PLUGIN_ID);
prefs.put(HelpPlugin.HELP_DATA_KEY, value);
}
private void setBaseTocs(String value) {
IEclipsePreferences prefs = InstanceScope.INSTANCE.getNode(HelpPlugin.PLUGIN_ID);
prefs.put(BASE_TOCS, value);
}
private String toString(ITocContribution[] tocs) {
String result = "";
for (ITocContribution toc : tocs) {
result += toc.getToc().getLabel();
}
return result;
}
@Test
public void testNoTocs() {
TocSorter sorter = new TocSorter();
ITocContribution[] result = sorter.orderTocContributions(new TC[0]);
assertEquals(result.length, 0);
}
@Test
public void testNoCategory() {
TocSorter sorter = new TocSorter();
ITocContribution[] tocs = new ITocContribution[] {
new TC("5", null), new TC("3", null), new TC("8", null)
};
ITocContribution[] result = sorter.orderTocContributions(tocs);
assertEquals("358", toString(result));
}
@Test
public void testCaseInsensitive() {
TocSorter sorter = new TocSorter();
ITocContribution[] tocs = new ITocContribution[] {
new TC("a", null), new TC("c", null), new TC("B", null), new TC("D", null)
};
ITocContribution[] result = sorter.orderTocContributions(tocs);
assertEquals("aBcD", toString(result));
}
@Test
public void testCategories() {
TocSorter sorter = new TocSorter();
ITocContribution[] tocs = new ITocContribution[] {
new TC("4", null), new TC("2", "a"), new TC("5", "b"), new TC("1", null), new TC("8", ""),
new TC("7", "a"), new TC("9", "b"), new TC("3", ""), new TC("6", null)
};
ITocContribution[] result = sorter.orderTocContributions(tocs);
assertEquals("127345968", toString(result));
}
@Test
public void testTocOrderPreference() {
setHelpData(ORDERED_XML);
TocSorter sorter = new TocSorter();
ITocContribution[] tocs = new ITocContribution[] {
new TC("a", null), new TC("c", null), new TC("b", null), new TC("d", null)
};
ITocContribution[] result = sorter.orderTocContributions(tocs);
assertEquals("dbac", toString(result));
}
@Test
public void testTocNoSortOthers() {
setHelpData(NO_SORT_XML);
TocSorter sorter = new TocSorter();
ITocContribution[] tocs = new ITocContribution[] {
new TC("e", null), new TC("c", null), new TC("b", null), new TC("d", null) , new TC("a", null)
};
ITocContribution[] result = sorter.orderTocContributions(tocs);
assertEquals("dbeca", toString(result));
}
@Test
public void testTocAlphaSortOthers() {
setHelpData(ALPHA_SORT_XML);
TocSorter sorter = new TocSorter();
ITocContribution[] tocs = new ITocContribution[] {
new TC("e", null), new TC("c", null), new TC("b", null), new TC("d", null) , new TC("a", null)
};
ITocContribution[] result = sorter.orderTocContributions(tocs);
assertEquals("dbace", toString(result));
}
@Test
public void testTocBadHelpDataPlugin() {
setHelpData(BAD_PLUGIN_HELP_DATA_XML);
TocSorter sorter = new TocSorter();
ITocContribution[] tocs = new ITocContribution[] {
new TC("e", null), new TC("c", null), new TC("b", null), new TC("d", null) , new TC("a", null)
};
ITocContribution[] result = sorter.orderTocContributions(tocs);
assertEquals("abcde", toString(result));
}
@Test
public void testTocBadHelpDataPath() {
setHelpData(NO_SUCH_FILE_XML);
TocSorter sorter = new TocSorter();
ITocContribution[] tocs = new ITocContribution[] {
new TC("e", null), new TC("c", null), new TC("b", null), new TC("d", null) , new TC("a", null)
};
ITocContribution[] result = sorter.orderTocContributions(tocs);
assertEquals("abcde", toString(result));
}
@Test
public void testNoHelpData() {
setHelpData("");
TocSorter sorter = new TocSorter();
ITocContribution[] tocs = new ITocContribution[] {
new TC("e", null), new TC("c", null), new TC("b", null), new TC("d", null) , new TC("a", null)
};
ITocContribution[] result = sorter.orderTocContributions(tocs);
assertEquals("abcde", toString(result));
}
@Test
public void testBaseTocs() {
setHelpData("");
setBaseTocs("/d/toc.xml,/b/toc.xml");
TocSorter sorter = new TocSorter();
ITocContribution[] tocs = new ITocContribution[] {
new TC("e", null), new TC("c", null), new TC("b", null), new TC("d", null) , new TC("a", null)
};
ITocContribution[] result = sorter.orderTocContributions(tocs);
assertEquals("dbace", toString(result));
}
@Test
public void testNoProductNoHelpData() {
List<String> ordering = ProductPreferences.getTocOrdering(null, "", "/a/b.xml,/c/d.xml");
assertEquals(2, ordering.size());
assertEquals("/a/b.xml", ordering.get(0));
assertEquals("/c/d.xml", ordering.get(1));
}
@Test
public void testNoProductWithHelpData() {
List<String> ordering = ProductPreferences.getTocOrdering(null, "helpData.xml", "/a/b.xml,/c/d.xml");
assertNull(ordering);
}
@Test
public void testNoProductWithPluginsRoot() {
List<String> ordering = ProductPreferences.getTocOrdering(null, ORDERED_XML, "/a/b.xml,/c/d.xml");
assertEquals(3, ordering.size());
assertEquals("/x/toc.xml", ordering.get(0));
assertEquals("/d/toc.xml", ordering.get(1));
assertEquals("/b/toc.xml", ordering.get(2));
}
}