| /******************************************************************************* |
| * Copyright (c) 2006, 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.assertFalse; |
| import static org.junit.Assert.assertTrue; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.eclipse.core.expressions.IEvaluationContext; |
| import org.eclipse.help.IIndexEntry; |
| import org.eclipse.help.ITopic; |
| import org.eclipse.help.IUAElement; |
| import org.eclipse.help.internal.UAElement; |
| import org.eclipse.help.internal.webapp.data.EnabledTopicUtils; |
| import org.junit.Test; |
| |
| public class EnabledTopicTest { |
| |
| private class ETopic implements ITopic { |
| |
| private String label; |
| private boolean isEnabled; |
| private List<ITopic> children = new ArrayList<>(); |
| |
| public ETopic(String label, boolean isEnabled) { |
| this.label = label; |
| this.isEnabled = isEnabled; |
| } |
| |
| @Override |
| public ITopic[] getSubtopics() { |
| return children.toArray(new ITopic[children.size()]); |
| } |
| |
| @Override |
| public IUAElement[] getChildren() { |
| |
| return getSubtopics(); |
| } |
| |
| @Override |
| public boolean isEnabled(IEvaluationContext context) { |
| return isEnabled; |
| } |
| |
| @Override |
| public String getHref() { |
| return "http://www.eclipse.org"; |
| } |
| |
| @Override |
| public String getLabel() { |
| return label; |
| } |
| |
| public void addSubTopic(ITopic subTopic) { |
| children.add(subTopic); |
| } |
| } |
| |
| private class NoHrefTopic extends ETopic { |
| |
| public NoHrefTopic(String label) { |
| super(label, true); |
| } |
| |
| @Override |
| public String getHref() { |
| return null; |
| } |
| |
| } |
| |
| private class EIndexEntry extends UAElement implements IIndexEntry { |
| |
| private String keyword; |
| private List<ITopic> topics = new ArrayList<>(); |
| private List<IIndexEntry> subEntries = new ArrayList<>(); |
| |
| public EIndexEntry(String keyword) { |
| super(keyword); |
| this.keyword = keyword; |
| } |
| |
| @Override |
| public String getKeyword() { |
| return keyword; |
| } |
| |
| public void addSubEntry(IIndexEntry entry) { |
| subEntries.add(entry); |
| } |
| |
| public void addTopic(ITopic topic) { |
| topics.add(topic); |
| } |
| |
| @Override |
| public IIndexEntry[] getSubentries() { |
| return subEntries.toArray(new IIndexEntry[subEntries.size()]); |
| } |
| |
| @Override |
| public ITopic[] getTopics() { |
| return topics.toArray(new ITopic[topics.size()]); |
| } |
| |
| @Override |
| public synchronized IUAElement[] getChildren() { |
| List<IUAElement> all = new ArrayList<>(); |
| all.addAll(subEntries); |
| all.addAll(topics); |
| return all.toArray(new IUAElement[all.size()]); |
| } |
| } |
| |
| @Test |
| public void testEnabledTopic() { |
| assertTrue(EnabledTopicUtils.isEnabled(new ETopic("T1", true))); |
| assertFalse(EnabledTopicUtils.isEnabled(new ETopic("T2", false))); |
| } |
| |
| @Test |
| public void testEnabledTopicsEmptyArray() throws Exception { |
| ITopic[] enabled = EnabledTopicUtils.getEnabled(new ITopic[0]); |
| assertTrue(enabled.length == 0); |
| } |
| |
| @Test |
| public void testEnabledTopicsAllEnabled() throws Exception { |
| ITopic[] topics = new ITopic[2]; |
| topics[0] = new ETopic("T1", true); |
| topics[1] = new ETopic("T2", true); |
| ITopic[] enabled = EnabledTopicUtils.getEnabled(topics); |
| assertTrue(enabled.length == 2); |
| assertTrue(topics[0].getLabel().equals("T1")); |
| assertTrue(topics[1].getLabel().equals("T2")); |
| } |
| |
| @Test |
| public void testEnabledTopicsAllDisabled() throws Exception { |
| ITopic[] topics = new ITopic[2]; |
| topics[0] = new ETopic("T1", false); |
| topics[1] = new ETopic("T2", false); |
| ITopic[] enabled = EnabledTopicUtils.getEnabled(topics); |
| assertTrue(enabled.length == 0); |
| } |
| |
| @Test |
| public void testEnabledTopicsMix() throws Exception { |
| ITopic[] topics = new ITopic[4]; |
| topics[0] = new ETopic("T1", true); |
| topics[1] = new ETopic("T2", false); |
| topics[2] = new ETopic("T3", true); |
| topics[3] = new ETopic("T4", false); |
| ITopic[] enabled = EnabledTopicUtils.getEnabled(topics); |
| assertEquals(2, enabled.length); |
| assertEquals("T1", enabled[0].getLabel()); |
| assertEquals("T3", enabled[1].getLabel()); |
| } |
| |
| @Test |
| public void testNoHref() { |
| ITopic noHref = new NoHrefTopic("N1"); |
| assertFalse(EnabledTopicUtils.isEnabled(noHref)); |
| } |
| |
| @Test |
| public void testNoHrefValidChild() { |
| ETopic noHref = new NoHrefTopic("N1"); |
| noHref.addSubTopic(new ETopic("T1", true)); |
| assertTrue(EnabledTopicUtils.isEnabled(noHref)); |
| } |
| |
| @Test |
| public void testNoHrefInvalidChild() { |
| ETopic noHref = new NoHrefTopic("N1"); |
| noHref.addSubTopic(new ETopic("T1", false)); |
| assertFalse(EnabledTopicUtils.isEnabled(noHref)); |
| } |
| |
| @Test |
| public void testNoHrefMixedChildren() { |
| ETopic noHref = new NoHrefTopic("N1"); |
| noHref.addSubTopic(new ETopic("T1", false)); |
| noHref.addSubTopic(new ETopic("T2", true)); |
| assertTrue(EnabledTopicUtils.isEnabled(noHref)); |
| } |
| |
| @Test |
| public void testNoHrefValidGrandchild() { |
| ETopic noHref = new NoHrefTopic("N1"); |
| ETopic subTopic = new NoHrefTopic("N2"); |
| noHref.addSubTopic(subTopic); |
| subTopic.addSubTopic(new ETopic("T2", true)); |
| assertTrue(EnabledTopicUtils.isEnabled(noHref)); |
| } |
| |
| @Test |
| public void testNoHrefInvalidGrandchild() { |
| ETopic noHref = new NoHrefTopic("N1"); |
| ETopic subTopic = new NoHrefTopic("N2"); |
| noHref.addSubTopic(subTopic); |
| subTopic.addSubTopic(new ETopic("T2", false)); |
| assertFalse(EnabledTopicUtils.isEnabled(noHref)); |
| } |
| |
| @Test |
| public void testEmptyIndexEntry() { |
| EIndexEntry entry1 = new EIndexEntry("abc"); |
| assertFalse(EnabledTopicUtils.isEnabled(entry1)); |
| } |
| |
| @Test |
| public void testEnabledIndexEntry() { |
| EIndexEntry entry1 = new EIndexEntry("abc"); |
| entry1.addTopic(new ETopic("T1", true)); |
| assertTrue(EnabledTopicUtils.isEnabled(entry1)); |
| } |
| |
| @Test |
| public void testDisabledIndexEntry() { |
| EIndexEntry entry1 = new EIndexEntry("abc"); |
| entry1.addTopic(new ETopic("T1", false)); |
| assertFalse(EnabledTopicUtils.isEnabled(entry1)); |
| } |
| |
| @Test |
| public void testMixedIndexEntry() { |
| EIndexEntry entry1 = new EIndexEntry("abc"); |
| entry1.addTopic(new ETopic("T1", true)); |
| entry1.addTopic(new ETopic("T2", false)); |
| assertTrue(EnabledTopicUtils.isEnabled(entry1)); |
| } |
| |
| @Test |
| public void testIndexEntryEnabledChild() { |
| EIndexEntry entry1 = new EIndexEntry("abc"); |
| EIndexEntry entry2 = new EIndexEntry("def"); |
| entry2.addTopic(new ETopic("T1", true)); |
| entry1.addSubEntry(entry2); |
| assertTrue(EnabledTopicUtils.isEnabled(entry1)); |
| } |
| |
| @Test |
| public void testIndexEntryEnabledGrandChild() { |
| EIndexEntry entry1 = new EIndexEntry("abc"); |
| EIndexEntry entry2 = new EIndexEntry("def"); |
| EIndexEntry entry3 = new EIndexEntry("ghi"); |
| entry1.addSubEntry(entry2); |
| entry2.addSubEntry(entry3); |
| entry3.addTopic(new ETopic("T1", true)); |
| assertTrue(EnabledTopicUtils.isEnabled(entry1)); |
| } |
| |
| @Test |
| public void testIndexEntryDisabledChild() { |
| EIndexEntry entry1 = new EIndexEntry("abc"); |
| EIndexEntry entry2 = new EIndexEntry("def"); |
| entry2.addTopic(new ETopic("T1", false)); |
| entry1.addSubEntry(entry2); |
| assertFalse(EnabledTopicUtils.isEnabled(entry1)); |
| } |
| |
| @Test |
| public void testIndexEntryMixedChildren() { |
| EIndexEntry entry1 = new EIndexEntry("abc"); |
| EIndexEntry entry2 = new EIndexEntry("def"); |
| EIndexEntry entry3 = new EIndexEntry("ghi"); |
| entry2.addTopic(new ETopic("T1", false)); |
| entry3.addTopic(new ETopic("T2", true)); |
| entry1.addSubEntry(entry2); |
| entry1.addSubEntry(entry3); |
| assertTrue(EnabledTopicUtils.isEnabled(entry1)); |
| } |
| |
| @Test |
| public void testEnabledIndexArrayEmpty() { |
| IIndexEntry[] entries = new EIndexEntry[0]; |
| IIndexEntry[] filtered =EnabledTopicUtils.getEnabled(entries); |
| assertEquals(0, filtered.length); |
| } |
| |
| @Test |
| public void testEnabledIndexArrayDisabled() { |
| EIndexEntry entry1 = new EIndexEntry("abc"); |
| EIndexEntry entry2 = new EIndexEntry("def"); |
| IIndexEntry[] entries = new EIndexEntry[]{entry1, entry2}; |
| IIndexEntry[] filtered =EnabledTopicUtils.getEnabled(entries); |
| assertEquals(0, filtered.length); |
| } |
| |
| @Test |
| public void testEnabledIndexArrayEnabled() { |
| EIndexEntry entry1 = new EIndexEntry("abc"); |
| EIndexEntry entry2 = new EIndexEntry("def"); |
| entry1.addTopic(new ETopic("T1", true)); |
| entry2.addTopic(new ETopic("T2", true)); |
| IIndexEntry[] entries = new EIndexEntry[]{entry1, entry2}; |
| IIndexEntry[] filtered =EnabledTopicUtils.getEnabled(entries); |
| assertEquals(2, filtered.length); |
| assertEquals(filtered[0].getKeyword(), "abc"); |
| assertEquals(filtered[1].getKeyword(), "def"); |
| } |
| |
| @Test |
| public void testEnabledIndexArrayMixed() { |
| EIndexEntry entry1 = new EIndexEntry("abc"); |
| EIndexEntry entry2 = new EIndexEntry("def"); |
| EIndexEntry entry3 = new EIndexEntry("ghi"); |
| EIndexEntry entry4 = new EIndexEntry("jkl"); |
| entry2.addTopic(new ETopic("T1", true)); |
| entry4.addTopic(new ETopic("T2", true)); |
| IIndexEntry[] entries = new EIndexEntry[]{entry1, entry2, entry3, entry4}; |
| IIndexEntry[] filtered =EnabledTopicUtils.getEnabled(entries); |
| assertEquals(2, filtered.length); |
| assertEquals(filtered[0].getKeyword(), "def"); |
| assertEquals(filtered[1].getKeyword(), "jkl"); |
| } |
| |
| } |