1 /*******************************************************************************
2  * Copyright (c) 2006, 2016 IBM Corporation and others.
3  *
4  * This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License 2.0
6  * which accompanies this distribution, and is available at
7  * https://www.eclipse.org/legal/epl-2.0/
8  *
9  * SPDX-License-Identifier: EPL-2.0
10  *
11  * Contributors:
12  *     IBM Corporation - initial API and implementation
13  *******************************************************************************/
14 package org.eclipse.ua.tests.help.toc;
15 
16 import static org.junit.Assert.assertEquals;
17 import static org.junit.Assert.assertNotNull;
18 import static org.junit.Assert.assertNull;
19 
20 import java.util.ArrayList;
21 import java.util.Arrays;
22 import java.util.List;
23 
24 import org.eclipse.help.IToc;
25 import org.eclipse.help.internal.dynamic.DocumentWriter;
26 import org.eclipse.help.internal.toc.Toc;
27 import org.eclipse.help.internal.toc.TocAssembler;
28 import org.eclipse.help.internal.toc.TocContribution;
29 import org.eclipse.help.internal.toc.TocFile;
30 import org.eclipse.help.internal.toc.TocFileParser;
31 import org.eclipse.ua.tests.plugin.UserAssistanceTestPlugin;
32 import org.eclipse.ua.tests.util.XMLUtil;
33 import org.junit.Test;
34 
35 public class TocAssemblerTest {
36 	@Test
testAssemble()37 	public void testAssemble() throws Exception {
38 		TocFileParser parser = new TocFileParser();
39 		TocContribution b = parser.parse(new TocFile(UserAssistanceTestPlugin.getPluginId(), "data/help/toc/assembler/b.xml", true, "en", null, null));
40 		TocContribution c = parser.parse(new TocFile(UserAssistanceTestPlugin.getPluginId(), "data/help/toc/assembler/c.xml", true, "en", null, null));
41 		TocContribution result_b_c = parser.parse(new TocFile(UserAssistanceTestPlugin.getPluginId(), "data/help/toc/assembler/result_b_c.xml", true, "en", null, null));
42 
43 		TocAssembler assembler = new TocAssembler();
44 		List<TocContribution> contributions = new ArrayList<>(Arrays.asList(b, c));
45 		contributions = assembler.assemble(contributions);
46 		assertEquals(1, contributions.size());
47 		String expected = serialize(result_b_c);
48 		String actual = serialize(contributions.get(0));
49 		XMLUtil.assertXMLEquals("Assembled TOC did not match expected result", expected, actual);
50 
51 		TocContribution a = parser.parse(new TocFile(UserAssistanceTestPlugin.getPluginId(), "data/help/toc/assembler/a.xml", true, "en", null, null));
52 		b = parser.parse(new TocFile(UserAssistanceTestPlugin.getPluginId(), "data/help/toc/assembler/b.xml", true, "en", null, null));
53 		c = parser.parse(new TocFile(UserAssistanceTestPlugin.getPluginId(), "data/help/toc/assembler/c.xml", true, "en", null, null));
54 		TocContribution d = parser.parse(new TocFile(UserAssistanceTestPlugin.getPluginId(), "data/help/toc/assembler/d.xml", false, "en", null, null));
55 		TocContribution result_a_b_c_d = parser.parse(new TocFile(UserAssistanceTestPlugin.getPluginId(), "data/help/toc/assembler/result_a_b_c_d.xml", true, "en", null, null));
56 
57 		contributions = new ArrayList<>(Arrays.asList(a, b, c, d));
58 		contributions = assembler.assemble(contributions);
59 		assertEquals(1, contributions.size());
60 
61 		expected = serialize(result_a_b_c_d);
62 		actual = serialize(contributions.get(0));
63 		XMLUtil.assertXMLEquals("Assembled TOC did not match expected result", expected, actual);
64 	}
65 
66 	@Test
testInvalidLinkTo()67 	public void testInvalidLinkTo() throws Exception {
68 		TocFileParser parser = new TocFileParser();
69 		TocContribution linkTo1 = parser.parse(new TocFile(UserAssistanceTestPlugin.getPluginId(), "data/help/toc/assembler/linkTo1.xml", true, "en", null, null));
70 		TocContribution linkTo2 = parser.parse(new TocFile(UserAssistanceTestPlugin.getPluginId(), "data/help/toc/assembler/linkTo2.xml", true, "en", null, null));
71 		TocContribution linkTo3 = parser.parse(new TocFile(UserAssistanceTestPlugin.getPluginId(), "data/help/toc/assembler/linkTo3.xml", true, "en", null, null));
72 
73 		TocAssembler assembler = new TocAssembler();
74 		List<TocContribution> contributions = new ArrayList<>(Arrays.asList(linkTo1, linkTo2, linkTo3));
75 		contributions = assembler.assemble(contributions);
76 		assertEquals(3, contributions.size());
77 	}
78 
79 	@Test
testHrefMap()80 	public void testHrefMap() throws Exception {
81 		TocFileParser parser = new TocFileParser();
82 		TocContribution b = parser.parse(new TocFile(UserAssistanceTestPlugin.getPluginId(), "data/help/toc/assembler/b.xml", true, "en", null, null));
83 		TocContribution c = parser.parse(new TocFile(UserAssistanceTestPlugin.getPluginId(), "data/help/toc/assembler/c.xml", true, "en", null, null));
84 		TocAssembler assembler = new TocAssembler();
85 		List<TocContribution> contributions = new ArrayList<>(Arrays.asList(b, c));
86 		contributions = assembler.assemble(contributions);
87 		IToc toc =contributions.get(0).getToc();
88 		assertNotNull(toc.getTopic("/org.eclipse.ua.tests/B_topic3.html"));
89 		assertNotNull(toc.getTopic("/org.eclipse.ua.tests/C_topic.html"));
90 		assertNull(toc.getTopic("/org.eclipse.ua.tests/D_topic.html"));
91 	}
92 
serialize(TocContribution contribution)93 	private String serialize(TocContribution contribution) throws Exception {
94 		DocumentWriter writer = new DocumentWriter();
95 		return new String(writer.writeString((Toc)contribution.getToc(), true));
96 	}
97 }
98