Skip to content

Commit

Permalink
Message bubble display access fix (#367)
Browse files Browse the repository at this point in the history
* Fixed Problems with this method if setGraphics was never called and there was no run

Signed-off-by: Michael Sementsov <michael.sementsov@ibykus.de>

* safe-check for available ViewportPane (display)

Signed-off-by: Frank Gasdorf <fgdrf@users.sourceforge.net>

Co-authored-by: Michael Sementsov <michael.sementsov@ibykus.de>
  • Loading branch information
fgdrf and MSementsov-Ibk committed Dec 31, 2019
1 parent 07ce7ff commit 63796be
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ Require-Bundle: org.eclipse.ui,
org.locationtech.udig.ui,
org.locationtech.udig.ui.tests,
org.junit;bundle-version="[4.0.0,5.0.0)",
org.locationtech.udig.project.ui.tests
org.locationtech.udig.project.ui.tests,
org.easymock;bundle-version="2.4.0"
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package org.locationtech.udig.tools.edit.animation;

import static org.junit.Assert.assertFalse;

import org.easymock.EasyMock;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.junit.Test;
import org.locationtech.udig.project.ui.render.displayAdapter.ViewportPane;
import org.locationtech.udig.ui.graphics.ViewportGraphics;

public class MessageBubbleTest {

ViewportPane viewportPaneMock = EasyMock.createNiceMock(ViewportPane.class);

ViewportGraphics viewportGraphicsMock = EasyMock.createNiceMock(ViewportGraphics.class);

MessageBubble messageBubble = new MessageBubble(0, 0, "whatever", (short) 1);

@Test
public void withoutGraphicContextNoNPEonSetValid() {
messageBubble.setValid(false);
assertFalse(messageBubble.isValid());
}


@Test
public void withoutsetGraphicContextWithNonNullDisplayRegistersListeners() {
viewportPaneMock.addMouseListener(EasyMock.anyObject());
EasyMock.expectLastCall().once();
viewportPaneMock.addMouseWheelListener(EasyMock.anyObject());
EasyMock.expectLastCall().once();

EasyMock.replay(viewportGraphicsMock, viewportPaneMock);
messageBubble.setGraphics(viewportGraphicsMock, viewportPaneMock);
EasyMock.verify(viewportGraphicsMock, viewportPaneMock);
}

@Test
public void withoutGraphicContextListenersRemoveNeverCalled() {
viewportPaneMock.removeMouseListener(EasyMock.anyObject());
EasyMock.expectLastCall().once();
viewportPaneMock.removeMouseWheelListener(EasyMock.anyObject());
EasyMock.expectLastCall().once();

EasyMock.replay(viewportGraphicsMock, viewportPaneMock);

messageBubble.setGraphics(viewportGraphicsMock, viewportPaneMock);

messageBubble.setValid(false);
assertFalse(messageBubble.isValid());

EasyMock.verify(viewportGraphicsMock, viewportPaneMock);
}

@Test
public void runWithoutViewportPaneDoesNotDoAnything() throws Exception {
EasyMock.replay(viewportGraphicsMock);

messageBubble.setGraphics(viewportGraphicsMock, null);

messageBubble.run(new NullProgressMonitor());
EasyMock.verify(viewportGraphicsMock);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -82,14 +82,25 @@ public boolean hasNext() {
public void nextFrame() {
}

@Override
public void setGraphics(ViewportGraphics graphics, IMapDisplay mapDisplay) {
super.setGraphics(graphics, mapDisplay);

if (display != null) {
display.addMouseListener(mouseListener);
display.addMouseWheelListener(wheelListener);
}
}

public void run( IProgressMonitor monitor ) throws Exception {
if (display == null) {
return;
}

if (myFont != null){
graphics.setFont(myFont);
}

display.addMouseListener(mouseListener);
display.addMouseWheelListener(wheelListener);


Rectangle2D messageBounds=new Rectangle(0,0);

for( String part : message ) {
Expand Down Expand Up @@ -221,8 +232,10 @@ public void setTextColor( Color textColor ) {
@Override
public void setValid( boolean valid ) {
super.setValid(valid);
display.removeMouseListener(mouseListener);
display.removeMouseWheelListener(wheelListener);
if (display != null) {
display.removeMouseListener(mouseListener);
display.removeMouseWheelListener(wheelListener);
}
}

private MapMouseListener mouseListener=new MapMouseListener(){
Expand Down

0 comments on commit 63796be

Please sign in to comment.