/*******************************************************************************
 * Copyright (c) 2006, 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.dynamic;

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

import org.eclipse.core.runtime.Platform;
import org.eclipse.help.internal.base.HelpEvaluationContext;
import org.eclipse.help.internal.dynamic.DocumentReader;
import org.eclipse.help.internal.dynamic.ExtensionHandler;
import org.eclipse.help.internal.dynamic.FilterHandler;
import org.eclipse.help.internal.dynamic.IncludeHandler;
import org.eclipse.help.internal.dynamic.ProcessorHandler;
import org.eclipse.help.internal.dynamic.XMLProcessor;
import org.eclipse.help.ui.internal.HelpUIPlugin;
import org.eclipse.ua.tests.plugin.UserAssistanceTestPlugin;
import org.eclipse.ua.tests.util.FileUtil;
import org.eclipse.ua.tests.util.XMLUtil;
import org.junit.Before;
import org.junit.Test;
import org.osgi.framework.Bundle;

public class XMLProcessorTest {

	@Before
	public void setUp() throws Exception {
		// activate the UI plug-in for UI filtering ability
		HelpUIPlugin.getDefault();
	}

	private void xmlProcess(String path) throws Exception {
		DocumentReader reader = new DocumentReader();
		ProcessorHandler[] handlers = new ProcessorHandler[] {
				new IncludeHandler(reader, Platform.getNL()),
				new ExtensionHandler(reader, Platform.getNL()),
				new FilterHandler(HelpEvaluationContext.getContext())
		};
		XMLProcessor processor = new XMLProcessor(handlers);
		Bundle bundle = UserAssistanceTestPlugin.getDefault().getBundle();
		URL url1 = bundle.getEntry(FileUtil.getResultFile(path));
		if(url1 == null) {
			throw new IOException("No entry to '"+FileUtil.getResultFile(path)+"' could be found or caller does not have the appropriate permissions.");//$NON-NLS-1$ //$NON-NLS-2$
		}
		URL url2 = bundle.getEntry(path);
		if(url2 == null) {
			throw new IOException("No entry to '"+path+"' could be found or caller does not have the appropriate permissions.");//$NON-NLS-1$ //$NON-NLS-2$
		}
		try (InputStream in = url1.openStream();
				InputStream in2 = processor.process(url2.openStream(),
						'/' + bundle.getSymbolicName() + '/' + path, "UTF-8")) {
			XMLUtil.assertXMLEquals("XML content was not processed correctly: " + path, in, in2);
		}
	}

	@Test
	public void testExtension() throws Exception {
		xmlProcess("data/help/dynamic/extension.xml");
	}

	@Test
	public void testFilter() throws Exception {
		xmlProcess("data/help/dynamic/filter.xml");
	}

	@Test
	public void testInclude() throws Exception {
		xmlProcess("data/help/dynamic/include.xml");
	}

	@Test
	public void testIndex() throws Exception {
		xmlProcess("data/help/dynamic/index.xml");
	}

	@Test
	public void testSimple() throws Exception {
		xmlProcess("data/help/dynamic/simple.xml");
	}

	@Test
	public void testToc() throws Exception {
		xmlProcess("data/help/dynamic/toc.xml");
	}

	@Test
	public void testXhtml() throws Exception {
		xmlProcess("data/help/dynamic/xhtml.xml");
	}

	@Test
	public void testEntities() throws Exception {
		xmlProcess("data/help/dynamic/entities.xml");
	}
}
