blob: 9c6f03ab99ef73e974cd51444d79010f5cc6e963 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2013 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
******************************************************************************/
package org.eclipse.ui.tests.internal;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.e4.core.services.events.IEventBroker;
import org.eclipse.e4.ui.internal.workbench.swt.CSSConstants;
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
import org.eclipse.e4.ui.model.internal.ModelUtils;
import org.eclipse.e4.ui.workbench.UIEvents;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.internal.PartSite;
import org.eclipse.ui.internal.progress.WorkbenchSiteProgressService;
import org.eclipse.ui.tests.api.workbenchpart.EmptyView;
import org.eclipse.ui.tests.harness.util.UITestCase;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import org.osgi.service.event.Event;
import org.osgi.service.event.EventHandler;
/**
* @since 3.5
*
*/
@RunWith(JUnit4.class)
public class WorkbenchSiteProgressServiceModelTagsTest extends UITestCase {
private IWorkbenchWindow window;
private IWorkbenchPage page;
private EmptyView view;
private Event receivedEvent;
private EventHandler eventHandler;
private IEventBroker eventBroker;
private PartSite site;
private WorkbenchSiteProgressServiceTestable progressService;
public WorkbenchSiteProgressServiceModelTagsTest() {
super(WorkbenchSiteProgressServiceModelTagsTest.class.getSimpleName());
}
@Override
protected void doSetUp() throws Exception {
super.doSetUp();
window = openTestWindow();
page = window.getActivePage();
view = (EmptyView) page.showView(EmptyView.ID);
assertTrue(page.getActivePart().getSite() instanceof PartSite);
site = (PartSite) page.getActivePart().getSite();
progressService = new WorkbenchSiteProgressServiceTestable(site);
IEclipseContext context = ModelUtils.getContainingContext(site.getModel());
assertNotNull(context);
eventHandler = event -> receivedEvent = event;
eventBroker = context.get(IEventBroker.class);
eventBroker.subscribe(UIEvents.ApplicationElement.TOPIC_TAGS, eventHandler);
}
@Override
protected void doTearDown() throws Exception {
eventBroker.unsubscribe(eventHandler);
eventBroker = null;
page.hideView(view);
super.doTearDown();
}
@Test
public void testShowBusyWhenCurrentlyIdle() throws Exception {
site.getModel().getTags().remove(CSSConstants.CSS_BUSY_CLASS); /* state idle */
progressService.showBusy(true);
assertTrue(site.getModel().getTags().contains(CSSConstants.CSS_BUSY_CLASS));
assertAddBusyTagEvent(receivedEvent);
}
@Test
public void testShowBusyWhenCurrentlyBusy() throws Exception {
site.getModel().getTags().add(CSSConstants.CSS_BUSY_CLASS); /* state busy */
progressService.showBusy(false);
assertFalse(site.getModel().getTags().contains(CSSConstants.CSS_BUSY_CLASS));
assertRemoveBusyTagEvent(receivedEvent);
}
@Test
public void testWarnOfContentChange() throws Exception {
progressService.warnOfContentChange();
assertContentChangeTagEvent(receivedEvent);
}
//helper functions
private static class WorkbenchSiteProgressServiceTestable extends WorkbenchSiteProgressService {
public WorkbenchSiteProgressServiceTestable(PartSite partSite) {
super(partSite);
}
@Override
public void showBusy(boolean busy) {
super.showBusy(busy);
}
}
private void assertModelTagChangedEvent(Event event) {
assertNotNull(event);
assertTrue(event.getProperty(UIEvents.EventTags.ELEMENT) instanceof MPart);
assertEquals(UIEvents.ApplicationElement.TAGS, event.getProperty(UIEvents.EventTags.ATTNAME));
}
private void assertAddBusyTagEvent(Event event) {
assertModelTagChangedEvent(event);
assertNull(event.getProperty(UIEvents.EventTags.OLD_VALUE));
assertEquals(CSSConstants.CSS_BUSY_CLASS, event.getProperty(UIEvents.EventTags.NEW_VALUE));
}
private void assertRemoveBusyTagEvent(Event event) {
assertModelTagChangedEvent(event);
assertEquals(CSSConstants.CSS_BUSY_CLASS, event.getProperty(UIEvents.EventTags.OLD_VALUE));
assertNull(event.getProperty(UIEvents.EventTags.NEW_VALUE));
}
private void assertContentChangeTagEvent(Event event) {
assertModelTagChangedEvent(event);
// we check if any event for the CSS_CONTENT_CHANGE_CLASS tag was propagated.
// It happens when the warmOfContentChange method was executed
assertTrue(CSSConstants.CSS_CONTENT_CHANGE_CLASS.equals(event.getProperty(UIEvents.EventTags.OLD_VALUE)) ||
CSSConstants.CSS_CONTENT_CHANGE_CLASS.equals(event.getProperty(UIEvents.EventTags.NEW_VALUE)));
}
}