From d0f755eaade8c0115d07588047750a699f6599e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20C=C3=A2mara?= Date: Fri, 20 Jan 2017 16:34:55 +0000 Subject: [PATCH] [BACKLOG-14131] Part 1- Return false when cancel button pressed, solution for Cancel button when prompted for save doesn't cancel the operation --- ui/src/org/pentaho/di/ui/spoon/Spoon.java | 5 +- .../org/pentaho/di/ui/spoon/SpoonTest.java | 50 +++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/ui/src/org/pentaho/di/ui/spoon/Spoon.java b/ui/src/org/pentaho/di/ui/spoon/Spoon.java index baf902f8e1ce..7404a0d09f93 100644 --- a/ui/src/org/pentaho/di/ui/spoon/Spoon.java +++ b/ui/src/org/pentaho/di/ui/spoon/Spoon.java @@ -4885,7 +4885,7 @@ public void loadRepositoryObjects( TransMeta transMeta ) { } } - public void promptForSave() throws KettleException { + public boolean promptForSave() throws KettleException { List list = delegates.tabs.getTabs(); for ( TabMapEntry mapEntry : list ) { @@ -4900,9 +4900,12 @@ public void promptForSave() throws KettleException { int reply = itemInterface.showChangedWarning(); if ( reply == SWT.YES ) { itemInterface.applyChanges(); + } else if ( reply == SWT.CANCEL ) { + return false; } } } + return true; } public boolean quitFile( boolean canCancel ) throws KettleException { diff --git a/ui/test-src/org/pentaho/di/ui/spoon/SpoonTest.java b/ui/test-src/org/pentaho/di/ui/spoon/SpoonTest.java index db6c48726d52..00c1e8744b05 100644 --- a/ui/test-src/org/pentaho/di/ui/spoon/SpoonTest.java +++ b/ui/test-src/org/pentaho/di/ui/spoon/SpoonTest.java @@ -29,6 +29,7 @@ import java.util.ArrayList; import java.util.Collections; +import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Shell; import org.junit.Before; import org.junit.Test; @@ -61,6 +62,7 @@ import org.pentaho.di.ui.spoon.delegates.SpoonTabsDelegate; import org.pentaho.metastore.stores.delegate.DelegatingMetaStore; import org.pentaho.xul.swt.tab.TabItem; +import org.pentaho.xul.swt.tab.TabSet; /** * Spoon tests @@ -724,4 +726,52 @@ private void setLoadLastUsedJobLocalWithRepository( boolean isSourceRepository, doCallRealMethod().when( spoon ).loadLastUsedFile( mockLastUsedFile, repositoryName ); spoon.loadLastUsedFile( mockLastUsedFile, repositoryName ); } + + @Test + public void testCancelPromptToSave() throws Exception { + setPromptToSave( SWT.CANCEL, false ); + assertFalse( spoon.promptForSave() ); + } + + @Test + public void testNoPromptToSave() throws Exception { + SpoonBrowser mockBrowser = setPromptToSave( SWT.NO, false ); + assertTrue( spoon.promptForSave() ); + verify( mockBrowser, never() ).applyChanges(); + } + + @Test + public void testYesPromptToSave() throws Exception { + SpoonBrowser mockBrowser = setPromptToSave( SWT.YES, false ); + assertTrue( spoon.promptForSave() ); + verify( mockBrowser ).applyChanges(); + } + + @Test + public void testCanClosePromptToSave() throws Exception { + setPromptToSave( SWT.YES, true ); + assertTrue( spoon.promptForSave() ); + } + + private SpoonBrowser setPromptToSave( int buttonPressed, boolean canbeClosed ) throws Exception { + TabMapEntry mockTabMapEntry = mock( TabMapEntry.class ); + TabSet mockTabSet = mock( TabSet.class ); + ArrayList lTabs = new ArrayList<>(); + lTabs.add( mockTabMapEntry ); + + SpoonBrowser mockSpoonBrowser = mock( SpoonBrowser.class ); + + spoon.delegates = mock( SpoonDelegates.class ); + spoon.delegates.tabs = mock( SpoonTabsDelegate.class ); + spoon.tabfolder = mockTabSet; + + doReturn( lTabs ).when( spoon.delegates.tabs ).getTabs(); + doReturn( mockSpoonBrowser ).when( mockTabMapEntry ).getObject(); + doReturn( canbeClosed ).when( mockSpoonBrowser ).canBeClosed(); + doReturn( buttonPressed ).when( mockSpoonBrowser ).showChangedWarning(); + + doCallRealMethod().when( spoon ).promptForSave(); + + return mockSpoonBrowser; + } }