1 /*******************************************************************************
2  * Copyright (c) 2000, 2009 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.ui.tests.api;
15 
16 import org.eclipse.ui.IEditorPart;
17 import org.eclipse.ui.IViewPart;
18 import org.eclipse.ui.IWorkbenchPage;
19 import org.eclipse.ui.IWorkbenchPart;
20 import org.eclipse.ui.IWorkbenchPartSite;
21 import org.eclipse.ui.IWorkbenchWindow;
22 import org.eclipse.ui.tests.harness.util.UITestCase;
23 import org.junit.Test;
24 
25 /**
26  * Tests the site for an IWorkbenchPart.
27  */
28 public abstract class IWorkbenchPartSiteTest extends UITestCase {
29 
30 	protected IWorkbenchWindow fWindow;
31 
32 	protected IWorkbenchPage fPage;
33 
34 	/**
35 	 * Constructor for IWorkbenchPartSiteTest
36 	 */
IWorkbenchPartSiteTest(String testName)37 	public IWorkbenchPartSiteTest(String testName) {
38 		super(testName);
39 	}
40 
41 	@Override
doSetUp()42 	protected void doSetUp() throws Exception {
43 		super.doSetUp();
44 		fWindow = openTestWindow();
45 		fPage = fWindow.getActivePage();
46 	}
47 
48 	@Test
testGetId()49 	public void testGetId() throws Throwable {
50 		// From Javadoc: "Returns the part registry extension id for
51 		// this workbench site's part."
52 
53 		IWorkbenchPart part = createTestPart(fPage);
54 		IWorkbenchPartSite site = part.getSite();
55 		assertEquals(getTestPartId(), site.getId());
56 	}
57 
58 	@Test
testGetPage()59 	public void testGetPage() throws Throwable {
60 		// From Javadoc: "Returns the page containing this workbench
61 		// site's part."
62 
63 		IWorkbenchPart part = createTestPart(fPage);
64 		IWorkbenchPartSite site = part.getSite();
65 		assertEquals(fPage, site.getPage());
66 	}
67 
68 	@Test
testGetPluginId()69 	public void testGetPluginId() throws Throwable {
70 		// From Javadoc: "Returns the unique identifier of the
71 		// plug-in that defines this workbench site's part."
72 
73 		IWorkbenchPart part = createTestPart(fPage);
74 		IWorkbenchPartSite site = part.getSite();
75 		assertEquals(getTestPartPluginId(), site.getPluginId());
76 	}
77 
78 	@Test
testGetRegisteredName()79 	public void testGetRegisteredName() throws Throwable {
80 		// From Javadoc: "Returns the registered name for this
81 		// workbench site's part."
82 
83 		IWorkbenchPart part = createTestPart(fPage);
84 		IWorkbenchPartSite site = part.getSite();
85 		assertEquals(getTestPartName(), site.getRegisteredName());
86 	}
87 
88 	@Test
testGetShell()89 	public void testGetShell() throws Throwable {
90 		// From Javadoc: "Returns the shell containing this
91 		// workbench site's part"
92 
93 		IWorkbenchPart part = createTestPart(fPage);
94 		IWorkbenchPartSite site = part.getSite();
95 		assertEquals(fWindow.getShell(), site.getShell());
96 	}
97 
98 	@Test
testGetWorkbenchWindow()99 	public void testGetWorkbenchWindow() throws Throwable {
100 		// From Javadoc: "Returns the workbench window
101 		// containing this workbench site's part."
102 
103 		IWorkbenchPart part = createTestPart(fPage);
104 		IWorkbenchPartSite site = part.getSite();
105 		assertEquals(fWindow, site.getWorkbenchWindow());
106 	}
107 
108 	@Test
testGetSelectionProvider()109 	public void testGetSelectionProvider() throws Throwable {
110 		// From Javadoc: "'Get' returns the selection provider
111 		// for this workbench site's part.
112 
113 		IWorkbenchPart part = createTestPart(fPage);
114 		IWorkbenchPartSite site = part.getSite();
115 		assertTrue(part instanceof MockWorkbenchPart);
116 		MockWorkbenchPart mock = (MockWorkbenchPart) part;
117 		assertEquals(mock.getSelectionProvider(), site.getSelectionProvider());
118 	}
119 
120 	@Test
testSetSelectionProvider()121 	public void testSetSelectionProvider() throws Throwable {
122 		// From Javadoc: 'Set' sets the selection provider.
123 
124 		// Set selection provider to null.
125 		IWorkbenchPart part = createTestPart(fPage);
126 		IWorkbenchPartSite site = part.getSite();
127 		site.setSelectionProvider(null);
128 		assertNull(site.getSelectionProvider());
129 
130 		// Set selection provider to real.
131 		MockSelectionProvider provider = new MockSelectionProvider();
132 		site.setSelectionProvider(provider);
133 		assertEquals(provider, site.getSelectionProvider());
134 	}
135 
136 	@Test
testINestableService()137 	public void testINestableService() throws Throwable {
138 		IWorkbenchPart part = createTestPart(fPage);
139 		IWorkbenchPartSite site = part.getSite();
140 		DummyService service = site.getService(DummyService.class);
141 
142 		assertTrue(service.isActive());
143 		if(part instanceof IViewPart) {
144 			fPage.hideView((IViewPart) part);
145 		} else {
146 			fPage.closeEditor((IEditorPart) part, false);
147 		}
148 		assertFalse(service.isActive());
149 
150 	}
151 
152 
153 	/**
154 	 * Creates a test part in the page.
155 	 */
createTestPart(IWorkbenchPage page)156 	abstract protected IWorkbenchPart createTestPart(IWorkbenchPage page)
157 			throws Throwable;
158 
159 	/**
160 	 * Returns the expected id for a test part.
161 	 */
getTestPartId()162 	abstract protected String getTestPartId() throws Throwable;
163 
164 	/**
165 	 * Returns the expected name for a test part.
166 	 */
getTestPartName()167 	abstract protected String getTestPartName() throws Throwable;
168 
169 	/**
170 	 * Returns the expected id for a test part plugin.  Subclasses may
171 	 * override this.
172 	 */
getTestPartPluginId()173 	protected String getTestPartPluginId() throws Throwable {
174 		return "org.eclipse.ui.tests";
175 	}
176 }
177 
178