/*******************************************************************************
* Copyright (c) 2009, 2016 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ua.tests.help.remote;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.HashSet;
import org.eclipse.help.AbstractTocProvider;
import org.eclipse.help.internal.HelpPlugin;
import org.eclipse.help.internal.base.BaseHelpSystem;
import org.eclipse.help.internal.base.remote.RemoteTocProvider;
import org.eclipse.help.internal.toc.TocContribution;
import org.eclipse.help.internal.toc.TocFileProvider;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class TocManagerTest {
private int mode;
@Before
public void setUp() throws Exception {
BaseHelpSystem.ensureWebappRunning();
mode = BaseHelpSystem.getMode();
RemotePreferenceStore.savePreferences();
BaseHelpSystem.setMode(BaseHelpSystem.MODE_INFOCENTER);
}
@After
public void tearDown() throws Exception {
BaseHelpSystem.setMode(mode);
RemotePreferenceStore.restorePreferences();
}
@Test
public void testDuplicatesOneRemote() throws Exception {
RemotePreferenceStore.setMockRemoteServer();
HelpPlugin.getTocManager().clearCache();
boolean hasDuplicates=hasDuplicateContributions(HelpPlugin.getTocManager().getTocContributions("en"));
assertFalse(hasDuplicates);
}
@Test
public void testDuplicatesTwoRemote() throws Exception {
RemotePreferenceStore.setTwoMockRemoteServers();
HelpPlugin.getTocManager().clearCache();
boolean hasDuplicates=hasDuplicateContributions(HelpPlugin.getTocManager().getTocContributions("en"));
assertFalse(hasDuplicates);
}
@Test
public void testLocalProviderPriority() throws Exception {
int localPriority=0,remotePriority=0;
RemotePreferenceStore.setMockRemoteServer();
RemotePreferenceStore.setMockLocalPriority();
HelpPlugin.getTocManager().clearCache();
AbstractTocProvider [] tocProviders = HelpPlugin.getTocManager().getTocProviders();
for (AbstractTocProvider tocProvider : tocProviders) {
if(tocProvider instanceof TocFileProvider)
localPriority = tocProvider.getPriority();
if(tocProvider instanceof RemoteTocProvider)
remotePriority = tocProvider.getPriority();
}
assertTrue(localPriority<remotePriority);
}
@Test
public void testRemoteProviderPriority() throws Exception {
RemotePreferenceStore.setMockRemoteServer();
RemotePreferenceStore.setMockRemotePriority();
HelpPlugin.getTocManager().clearCache();
int localPriority=0,remotePriority=0;
AbstractTocProvider [] tocProviders = HelpPlugin.getTocManager().getTocProviders();
for (AbstractTocProvider tocProvider : tocProviders) {
if(tocProvider instanceof TocFileProvider)
localPriority = tocProvider.getPriority();
if(tocProvider instanceof RemoteTocProvider)
remotePriority = tocProvider.getPriority();
}
assertTrue(remotePriority<localPriority);
}
public static boolean hasDuplicateContributions(TocContribution[] tocContributions)
{
HashSet<String> contributionsFound = new HashSet<>();
for (TocContribution tocContribution : tocContributions) {
if(contributionsFound.contains(tocContribution.getId()))
return true;
else
contributionsFound.add(tocContribution.getId());
}
return false;
}
}