1 /******************************************************************************* 2 * Copyright (c) 2007, 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 15 package org.eclipse.ua.tests.help.other; 16 17 import static org.junit.Assert.assertEquals; 18 import static org.junit.Assert.assertFalse; 19 import static org.junit.Assert.assertNull; 20 import static org.junit.Assert.assertTrue; 21 import static org.junit.Assert.fail; 22 23 import org.eclipse.help.IHelpResource; 24 import org.eclipse.help.IUAElement; 25 import org.eclipse.help.internal.Topic; 26 import org.eclipse.help.internal.UAElement; 27 import org.eclipse.help.internal.base.BaseHelpSystem; 28 import org.eclipse.help.internal.base.HelpEvaluationContext; 29 import org.eclipse.help.internal.context.Context; 30 import org.eclipse.ua.tests.help.util.DocumentCreator; 31 import org.junit.Before; 32 import org.junit.Test; 33 import org.w3c.dom.Document; 34 import org.w3c.dom.Element; 35 36 public class ContextTest { 37 38 private static final String ENABLEMENT_CHEATSHEETS = "<enablement><with variable=\"platform\">" + 39 "<test property=\"org.eclipse.core.runtime.isBundleInstalled\" args=\"org.eclipse.ui.cheatsheets\"/>" + 40 "</with></enablement>"; 41 private static final String ENABLEMENT_INVALID = "<enablement><with variable=\"platform\">" + 42 "<test property=\"org.eclipse.core.runtime.isBundleInstalled\" args=\"org.eclipse.ui.invalid\"/>" + 43 "</with></enablement>"; 44 private static final String FILTER_OUT = "<filter name = \"plugin\" value = \"org.eclipse.ua.invalid\"/>"; 45 private static final String TOPIC_END = "</topic>"; 46 private static final String TOPIC_HEAD_ECLIPSE = "<topic href=\"http://www.eclipse.org\" label=\"enabled\">"; 47 private final String TOPIC_OLD_FILTER_DISABLED = "<topic filter=\"plugin=org.eclipse.ua.invalid\" href=\"www.eclipse.org\"" 48 + " label=\"Transformations and transformation configurations\"/>"; 49 private static final String CONTEXT_DESCRIPTION = "<description>Context Description</description>"; 50 private static final String EMPTY_DESCRIPTION = "<description></description>"; 51 private static final String CONTEXT_HEAD = "<context id=\"viewer\" title=\"Sample View\">"; 52 private static final String CONTEXT_HEAD_WITH_ATTRIBUTE = "<context id=\"viewer\" title=\"Sample View\" att=\"abc\">"; 53 private final String TOPIC_ECLIPSE = "<topic href=\"http://www.eclipse.org\" label=\"eclipse\"/>"; 54 private final String TOPIC_WITH_ENABLEMENT = TOPIC_HEAD_ECLIPSE + ENABLEMENT_CHEATSHEETS + TOPIC_END; 55 private final String TOPIC_DISABLED = TOPIC_HEAD_ECLIPSE + ENABLEMENT_INVALID + TOPIC_END; 56 private final String TOPIC_FILTER_OUT = TOPIC_HEAD_ECLIPSE + FILTER_OUT + TOPIC_END; 57 private final String END_CONTEXT = "</context>"; 58 59 @Before setUp()60 public void setUp() throws Exception { 61 // Required for isEnabled() to work correctly 62 BaseHelpSystem.setMode(BaseHelpSystem.MODE_WORKBENCH); 63 } 64 createContext(final String contextSource)65 private Context createContext(final String contextSource) { 66 Context context; 67 Document doc; 68 try { 69 doc = DocumentCreator.createDocument(contextSource); 70 } catch (Exception e) { 71 fail("Caught Exception"); 72 doc = null; 73 } 74 context = new Context((Element) doc.getFirstChild()); 75 return context; 76 } 77 78 @Test testSimpleContext()79 public void testSimpleContext() { 80 final String contextSource = CONTEXT_HEAD + 81 CONTEXT_DESCRIPTION + 82 TOPIC_ECLIPSE + 83 END_CONTEXT; 84 Context context; 85 context = createContext(contextSource); 86 assertEquals("Sample View", context.getTitle()); 87 assertEquals("Context Description", context.getText()); 88 IHelpResource[] related = context.getRelatedTopics(); 89 assertEquals(1, related.length); 90 assertEquals("eclipse", related[0].getLabel()); 91 } 92 93 @Test testContextWithEnablement()94 public void testContextWithEnablement() { 95 final String contextSource = CONTEXT_HEAD + 96 CONTEXT_DESCRIPTION + 97 TOPIC_WITH_ENABLEMENT + 98 END_CONTEXT; 99 Context context; 100 context = createContext(contextSource); 101 assertEquals("Sample View", context.getTitle()); 102 assertEquals("Context Description", context.getText()); 103 assertEquals("viewer", context.getId()); 104 IHelpResource[] related = context.getRelatedTopics(); 105 assertEquals(1, related.length); 106 assertEquals("enabled", related[0].getLabel()); 107 assertTrue(related[0] instanceof IUAElement); 108 IUAElement topic = (IUAElement)related[0]; 109 IUAElement[] topicChildren = topic.getChildren(); 110 assertEquals(1, topicChildren.length); 111 } 112 113 @Test testCopyContext()114 public void testCopyContext() { 115 final String contextSource = CONTEXT_HEAD + 116 CONTEXT_DESCRIPTION + 117 TOPIC_WITH_ENABLEMENT + 118 END_CONTEXT; 119 Context context = createContext(contextSource); 120 Context context2 = new Context(context, "new id"); 121 Context context3 = new Context(context2, "new id2"); 122 assertEquals("Sample View", context.getTitle()); 123 assertEquals("Sample View", context2.getTitle()); 124 assertEquals("Context Description", context.getText()); 125 assertEquals("Context Description", context2.getText()); 126 assertEquals("viewer", context.getId()); 127 assertEquals("new id", context2.getId()); 128 assertEquals("new id2", context3.getId()); 129 130 IHelpResource[] related = context.getRelatedTopics(); 131 assertEquals(1, related.length); 132 assertEquals("enabled", related[0].getLabel()); 133 assertTrue(related[0] instanceof IUAElement); 134 Topic topic = (Topic)related[0]; 135 assertEquals("http://www.eclipse.org", topic.getHref()); 136 137 related = context2.getRelatedTopics(); 138 assertEquals(1, related.length); 139 assertEquals("enabled", related[0].getLabel()); 140 assertTrue(related[0] instanceof IUAElement); 141 topic = (Topic)related[0]; 142 assertEquals("http://www.eclipse.org", topic.getHref()); 143 144 related = context3.getRelatedTopics(); 145 assertEquals(1, related.length); 146 assertEquals("enabled", related[0].getLabel()); 147 assertTrue(related[0] instanceof IUAElement); 148 topic = (Topic)related[0]; 149 assertEquals("http://www.eclipse.org", topic.getHref()); 150 } 151 152 @Test testEnablement()153 public void testEnablement() { 154 final String contextSource = CONTEXT_HEAD + 155 CONTEXT_DESCRIPTION + 156 TOPIC_WITH_ENABLEMENT + 157 TOPIC_DISABLED + 158 TOPIC_OLD_FILTER_DISABLED + 159 END_CONTEXT; 160 Context context = createContext(contextSource); 161 IHelpResource[] related = context.getRelatedTopics(); 162 assertEquals(3, related.length); 163 assertTrue(((Topic)related[0]).isEnabled(HelpEvaluationContext.getContext())); 164 assertFalse(((Topic)related[1]).isEnabled(HelpEvaluationContext.getContext())); 165 assertFalse(((Topic)related[2]).isEnabled(HelpEvaluationContext.getContext())); 166 } 167 168 @Test testOldStyleFilteringOfCopies()169 public void testOldStyleFilteringOfCopies() { 170 final String contextSource = CONTEXT_HEAD + 171 CONTEXT_DESCRIPTION + 172 TOPIC_WITH_ENABLEMENT + 173 TOPIC_OLD_FILTER_DISABLED + 174 END_CONTEXT; 175 Context context1 = createContext(contextSource); 176 Context context2 = new Context(context1, "id"); 177 Context context3 = new Context(context2, "id2"); 178 179 IHelpResource[] related1 = context1.getRelatedTopics(); 180 assertEquals(2, related1.length); 181 assertTrue(((Topic)related1[0]).isEnabled(HelpEvaluationContext.getContext())); 182 assertFalse(((Topic)related1[1]).isEnabled(HelpEvaluationContext.getContext())); 183 184 IHelpResource[] related2 = context2.getRelatedTopics(); 185 assertEquals(2, related2.length); 186 assertTrue(((Topic)related2[0]).isEnabled(HelpEvaluationContext.getContext())); 187 assertFalse(((Topic)related2[1]).isEnabled(HelpEvaluationContext.getContext())); 188 189 IHelpResource[] related3 = context3.getRelatedTopics(); 190 assertEquals(2, related3.length); 191 assertTrue(((Topic)related3[0]).isEnabled(HelpEvaluationContext.getContext())); 192 assertFalse(((Topic)related3[1]).isEnabled(HelpEvaluationContext.getContext())); 193 } 194 195 @Test testOldStyleFilteringOfCopies2()196 public void testOldStyleFilteringOfCopies2() { 197 final String contextSource = CONTEXT_HEAD + 198 CONTEXT_DESCRIPTION + 199 TOPIC_WITH_ENABLEMENT + 200 TOPIC_OLD_FILTER_DISABLED + 201 END_CONTEXT; 202 Context context1 = createContext(contextSource); 203 Context context2 = new Context(context1, "id"); 204 Context context3 = new Context(context1, "id2"); 205 206 IHelpResource[] related1 = context1.getRelatedTopics(); 207 assertEquals(2, related1.length); 208 assertTrue(((Topic)related1[0]).isEnabled(HelpEvaluationContext.getContext())); 209 assertFalse(((Topic)related1[1]).isEnabled(HelpEvaluationContext.getContext())); 210 211 IHelpResource[] related2 = context2.getRelatedTopics(); 212 assertEquals(2, related2.length); 213 assertTrue(((Topic)related2[0]).isEnabled(HelpEvaluationContext.getContext())); 214 assertFalse(((Topic)related2[1]).isEnabled(HelpEvaluationContext.getContext())); 215 216 IHelpResource[] related3 = context3.getRelatedTopics(); 217 assertEquals(2, related3.length); 218 assertTrue(((Topic)related3[0]).isEnabled(HelpEvaluationContext.getContext())); 219 assertFalse(((Topic)related3[1]).isEnabled(HelpEvaluationContext.getContext())); 220 } 221 222 @Test testFilteringOfCopies()223 public void testFilteringOfCopies() { 224 final String contextSource = CONTEXT_HEAD + 225 CONTEXT_DESCRIPTION + 226 TOPIC_WITH_ENABLEMENT + 227 TOPIC_FILTER_OUT + 228 END_CONTEXT; 229 Context context1 = createContext(contextSource); 230 Context context2 = new Context(context1, "id"); 231 Context context3 = new Context(context2, "id2"); 232 IHelpResource[] related1 = context1.getRelatedTopics(); 233 assertEquals(2, related1.length); 234 assertTrue(((Topic)related1[0]).isEnabled(HelpEvaluationContext.getContext())); 235 assertFalse(((Topic)related1[1]).isEnabled(HelpEvaluationContext.getContext())); 236 237 IHelpResource[] related2 = context2.getRelatedTopics(); 238 assertEquals(2, related2.length); 239 assertTrue(((Topic)related2[0]).isEnabled(HelpEvaluationContext.getContext())); 240 assertFalse(((Topic)related2[1]).isEnabled(HelpEvaluationContext.getContext())); 241 242 IHelpResource[] related3 = context3.getRelatedTopics(); 243 assertEquals(2, related3.length); 244 assertTrue(((Topic)related3[0]).isEnabled(HelpEvaluationContext.getContext())); 245 assertFalse(((Topic)related3[1]).isEnabled(HelpEvaluationContext.getContext())); 246 } 247 248 @Test testFilteringOfCopies2()249 public void testFilteringOfCopies2() { 250 final String contextSource = CONTEXT_HEAD + 251 CONTEXT_DESCRIPTION + 252 TOPIC_WITH_ENABLEMENT + 253 TOPIC_FILTER_OUT + 254 END_CONTEXT; 255 Context context1 = createContext(contextSource); 256 Context context2 = new Context(context1, "id"); 257 Context context3 = new Context(context1, "id2"); 258 259 IHelpResource[] related1 = context1.getRelatedTopics(); 260 assertEquals(2, related1.length); 261 assertTrue(((Topic)related1[0]).isEnabled(HelpEvaluationContext.getContext())); 262 assertFalse(((Topic)related1[1]).isEnabled(HelpEvaluationContext.getContext())); 263 264 IHelpResource[] related2 = context2.getRelatedTopics(); 265 assertEquals(2, related2.length); 266 assertTrue(((Topic)related2[0]).isEnabled(HelpEvaluationContext.getContext())); 267 assertFalse(((Topic)related2[1]).isEnabled(HelpEvaluationContext.getContext())); 268 269 IHelpResource[] related3 = context3.getRelatedTopics(); 270 assertEquals(2, related3.length); 271 assertTrue(((Topic)related3[0]).isEnabled(HelpEvaluationContext.getContext())); 272 assertFalse(((Topic)related3[1]).isEnabled(HelpEvaluationContext.getContext())); 273 } 274 275 @Test testEnablementOfCopies()276 public void testEnablementOfCopies() { 277 final String contextSource = CONTEXT_HEAD + 278 CONTEXT_DESCRIPTION + 279 TOPIC_WITH_ENABLEMENT + 280 TOPIC_DISABLED + 281 END_CONTEXT; 282 Context context1 = createContext(contextSource); 283 Context context2 = new Context(context1, "id"); 284 Context context3 = new Context(context2, "id2"); 285 IHelpResource[] related1 = context1.getRelatedTopics(); 286 assertEquals(2, related1.length); 287 assertTrue(((Topic)related1[0]).isEnabled(HelpEvaluationContext.getContext())); 288 assertFalse(((Topic)related1[1]).isEnabled(HelpEvaluationContext.getContext())); 289 290 IHelpResource[] related2 = context2.getRelatedTopics(); 291 assertEquals(2, related2.length); 292 assertTrue(((Topic)related2[0]).isEnabled(HelpEvaluationContext.getContext())); 293 assertFalse(((Topic)related2[1]).isEnabled(HelpEvaluationContext.getContext())); 294 295 IHelpResource[] related3 = context3.getRelatedTopics(); 296 assertEquals(2, related3.length); 297 assertTrue(((Topic)related3[0]).isEnabled(HelpEvaluationContext.getContext())); 298 assertFalse(((Topic)related3[1]).isEnabled(HelpEvaluationContext.getContext())); 299 } 300 301 @Test testEnablementOfCopies2()302 public void testEnablementOfCopies2() { 303 final String contextSource = CONTEXT_HEAD + 304 CONTEXT_DESCRIPTION + 305 TOPIC_WITH_ENABLEMENT + 306 TOPIC_DISABLED + 307 END_CONTEXT; 308 Context context1 = createContext(contextSource); 309 Context context2 = new Context(context1, "id"); 310 Context context3 = new Context(context1, "id2"); 311 312 IHelpResource[] related1 = context1.getRelatedTopics(); 313 assertEquals(2, related1.length); 314 assertTrue(((Topic)related1[0]).isEnabled(HelpEvaluationContext.getContext())); 315 assertFalse(((Topic)related1[1]).isEnabled(HelpEvaluationContext.getContext())); 316 317 IHelpResource[] related2 = context2.getRelatedTopics(); 318 assertEquals(2, related2.length); 319 assertTrue(((Topic)related2[0]).isEnabled(HelpEvaluationContext.getContext())); 320 assertFalse(((Topic)related2[1]).isEnabled(HelpEvaluationContext.getContext())); 321 322 IHelpResource[] related3 = context3.getRelatedTopics(); 323 assertEquals(2, related3.length); 324 assertTrue(((Topic)related3[0]).isEnabled(HelpEvaluationContext.getContext())); 325 assertFalse(((Topic)related3[1]).isEnabled(HelpEvaluationContext.getContext())); 326 } 327 328 @Test testEnablementOfCopies3()329 public void testEnablementOfCopies3() { 330 final String contextSource = CONTEXT_HEAD + 331 CONTEXT_DESCRIPTION + 332 TOPIC_WITH_ENABLEMENT + 333 TOPIC_DISABLED + 334 END_CONTEXT; 335 Context context1 = createContext(contextSource); 336 Context context2 = new Context(context1, "id"); 337 Context context3 = new Context(context1, "id2"); 338 339 deleteAndInsert(context1); 340 deleteAndInsert(context2); 341 deleteAndInsert(context3); 342 } 343 deleteAndInsert(Context context)344 private void deleteAndInsert(Context context) { 345 IHelpResource[] related = context.getRelatedTopics(); 346 assertEquals(2, related.length); 347 IHelpResource enabled= related[0]; 348 context.removeChild((UAElement) enabled); 349 related = context.getRelatedTopics(); 350 assertEquals(1, related.length); 351 Topic disabled = (Topic)related[0]; 352 assertFalse(disabled.isEnabled(HelpEvaluationContext.getContext())); 353 context.insertBefore((UAElement) enabled, disabled); 354 related = context.getRelatedTopics(); 355 assertEquals(2, related.length); 356 assertTrue(((Topic)related[0]).isEnabled(HelpEvaluationContext.getContext())); 357 assertFalse(((Topic)related[1]).isEnabled(HelpEvaluationContext.getContext())); 358 } 359 360 @Test testContextWithAttribute()361 public void testContextWithAttribute() { 362 final String contextSource = CONTEXT_HEAD_WITH_ATTRIBUTE + 363 CONTEXT_DESCRIPTION + 364 TOPIC_ECLIPSE + 365 END_CONTEXT; 366 Context context; 367 context = createContext(contextSource); 368 assertEquals("abc", context.getAttribute("att")); 369 } 370 371 @Test testContextWithoutDescription()372 public void testContextWithoutDescription() { 373 final String contextSource = CONTEXT_HEAD + 374 TOPIC_ECLIPSE + 375 END_CONTEXT; 376 Context context; 377 context = createContext(contextSource); 378 assertNull(context.getText()); 379 } 380 381 @Test testContextWithEmptyDescription()382 public void testContextWithEmptyDescription() { 383 final String contextSource = CONTEXT_HEAD + 384 EMPTY_DESCRIPTION + 385 TOPIC_ECLIPSE + 386 END_CONTEXT; 387 Context context; 388 context = createContext(contextSource); 389 assertEquals("", context.getText()); 390 } 391 392 @Test testContextWithoutDescriptionSelfCatenation()393 public void testContextWithoutDescriptionSelfCatenation() { 394 final String contextSource = CONTEXT_HEAD + 395 TOPIC_ECLIPSE + 396 END_CONTEXT; 397 Context context1 = createContext(contextSource); 398 Context context2 = createContext(contextSource); 399 context1.mergeContext(context2); 400 assertNull(context1.getText()); 401 } 402 403 @Test testContextWithoutDescriptionMixedCatenation()404 public void testContextWithoutDescriptionMixedCatenation() { 405 final String contextSourceEmpty = CONTEXT_HEAD + 406 TOPIC_ECLIPSE + 407 END_CONTEXT; 408 final String contextSourceWithDesc = CONTEXT_HEAD + 409 CONTEXT_DESCRIPTION + 410 TOPIC_ECLIPSE + 411 END_CONTEXT; 412 Context context1 = createContext(contextSourceEmpty); 413 Context context2 = createContext(contextSourceWithDesc); 414 context1.mergeContext(context2); 415 assertEquals("Context Description", context1.getText()); 416 Context context3 = createContext(contextSourceWithDesc); 417 Context context4 = createContext(contextSourceEmpty); 418 context3.mergeContext(context4); 419 assertEquals("Context Description", context3.getText()); 420 } 421 422 /* 423 public void testCopyContextWithAttribute() { 424 final String contextSource = CONTEXT_HEAD_WITH_ATTRIBUTE + 425 CONTEXT_DESCRIPTION + 426 TOPIC_ECLIPSE + 427 END_CONTEXT; 428 Context context1; 429 context1 = createContext(contextSource); 430 Context context2 = new Context(context1, "id"); 431 assertEquals("abc", context1.getAttribute("att")); 432 assertEquals("abc", context2.getAttribute("att")); 433 } 434 */ 435 436 } 437