/*!
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* Copyright (c) 2002-2015 Pentaho Corporation.. All rights reserved.
*/
package org.pentaho.reporting.designer.extensions.wizard;
import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.anyObject;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import java.awt.Component;
import java.awt.Window;
import javax.swing.Action;
import org.junit.Before;
import org.junit.Test;
import org.pentaho.reporting.designer.core.ReportDesignerContext;
import org.pentaho.reporting.designer.core.ReportDesignerView;
import org.pentaho.reporting.designer.core.editor.ReportDocumentContext;
import org.pentaho.reporting.designer.core.util.ReportDesignerDesignTimeContext;
import org.pentaho.reporting.engine.classic.core.AbstractReportDefinition;
import org.pentaho.reporting.engine.classic.core.AbstractRootLevelBand;
import org.pentaho.reporting.engine.classic.core.Element;
import org.pentaho.reporting.engine.classic.core.MasterReport;
import org.pentaho.reporting.engine.classic.core.ReportDataFactoryException;
import org.pentaho.reporting.engine.classic.core.ReportProcessingException;
import org.pentaho.reporting.engine.classic.core.Section;
import org.pentaho.reporting.engine.classic.core.SubReport;
import org.pentaho.reporting.engine.classic.wizard.ui.xul.EmbeddedWizard;
public class EditWizardReportActionTest {
ReportDesignerContext reportDesignerContext;
ReportDocumentContext reportDocumentContext;
ReportDesignerView reportDesignerView;
Component component;
Window window;
EmbeddedWizard dialog;
AbstractReportDefinition abstractReportDefinition;
MasterReport masterReport;
SubReport subReport, subReport1, subReport2;
Element element1, element2;
Section section;
@Before
public void setUp() throws Exception {
reportDesignerContext = mock( ReportDesignerContext.class );
reportDocumentContext = mock( ReportDocumentContext.class );
reportDesignerView = mock( ReportDesignerView.class );
component = mock( Component.class );
window = mock( Window.class );
dialog = mock( EmbeddedWizard.class );
abstractReportDefinition = mock( AbstractReportDefinition.class );
masterReport = mock( MasterReport.class );
subReport = mock( SubReport.class );
subReport1 = mock( SubReport.class );
subReport2 = mock( SubReport.class );
element1 = mock( Element.class );
element2 = mock( Element.class );
section = mock( AbstractRootLevelBand.class );
}
@Test
public void testConstructor() {
EditWizardReportAction editWizardReportAction = new EditWizardReportAction();
String nameValue = (String) editWizardReportAction.getValue( Action.NAME );
assertEquals( nameValue, Messages.getString( "EditWizardReportAction.MenuText" ) );
}
@Test
public void testActionPerformedWithInvalidConfig() {
EditWizardReportAction reportActionSpy = spy( new EditWizardReportAction() );
reportActionSpy.actionPerformed( null );
verify( reportActionSpy, times( 1 ) ).getReportDesignerContext();
doReturn( reportDesignerContext ).when( reportActionSpy ).getReportDesignerContext();
reportActionSpy.actionPerformed( null );
}
@Test
public void testActionPerformedWithMasterReport() {
EditWizardReportAction reportActionSpy = spy( new EditWizardReportAction() );
doReturn( reportDesignerContext ).when( reportActionSpy ).getReportDesignerContext();
doReturn( window ).when( reportActionSpy ).getWindowAncestor( component );
doReturn( dialog ).when( reportActionSpy ).createDialog( (Window) anyObject(),
(ReportDesignerDesignTimeContext) anyObject() );
doReturn( reportDocumentContext ).when( reportDesignerContext ).getActiveContext();
doReturn( abstractReportDefinition ).when( reportDocumentContext ).getReportDefinition();
doReturn( abstractReportDefinition ).when( abstractReportDefinition ).derive();
doReturn( reportDesignerView ).when( reportDesignerContext ).getView();
doReturn( component ).when( reportDesignerView ).getParent();
try {
doReturn( masterReport ).when( dialog ).run( abstractReportDefinition );
} catch ( ReportProcessingException e ) {
e.printStackTrace();
}
reportActionSpy.actionPerformed( null );
verify( reportActionSpy, times( 1 ) ).getReportDesignerContext();
verify( reportActionSpy, times( 1 ) ).createDialog( (Window) anyObject(),
(ReportDesignerDesignTimeContext) anyObject() );
verify( reportActionSpy, times( 1 ) ).getWindowAncestor( component );
verify( reportDesignerContext, times( 2 ) ).getActiveContext();
verify( reportDesignerContext, times( 1 ) ).getView();
try {
verify( reportDesignerContext, times( 1 ) ).addMasterReport( (MasterReport) anyObject() );
} catch ( ReportDataFactoryException e1 ) {
e1.printStackTrace();
}
verify( reportDocumentContext, times( 1 ) ).getReportDefinition();
verify( abstractReportDefinition, times( 1 ) ).derive();
try {
verify( dialog ).run( (AbstractReportDefinition) anyObject() );
} catch ( ReportProcessingException e ) {
e.printStackTrace();
}
verify( reportDesignerView, times( 1 ) ).getParent();
}
@Test
public void testActionPerformedWithRootBandSubreport() {
EditWizardReportAction reportActionSpy = spy( new EditWizardReportAction() );
doReturn( reportDesignerContext ).when( reportActionSpy ).getReportDesignerContext();
doReturn( window ).when( reportActionSpy ).getWindowAncestor( component );
doReturn( dialog ).when( reportActionSpy ).createDialog( (Window) anyObject(),
(ReportDesignerDesignTimeContext) anyObject() );
doReturn( reportDocumentContext ).when( reportDesignerContext ).getActiveContext();
doReturn( abstractReportDefinition ).when( reportDocumentContext ).getReportDefinition();
doReturn( abstractReportDefinition ).when( abstractReportDefinition ).derive();
doReturn( reportDesignerView ).when( reportDesignerContext ).getView();
doReturn( component ).when( reportDesignerView ).getParent();
try {
doReturn( subReport ).when( dialog ).run( abstractReportDefinition );
} catch ( ReportProcessingException e ) {
e.printStackTrace();
}
doReturn( new SubReport[] { subReport1, subReport2 } ).when( (AbstractRootLevelBand) section ).getSubReports();
doReturn( new Element[] { element1, element2 } ).when( (AbstractRootLevelBand) section ).getElementArray();
doReturn( section ).when( reportActionSpy ).getParentSection( abstractReportDefinition );
reportActionSpy.actionPerformed( null );
verify( reportActionSpy, times( 1 ) ).getReportDesignerContext();
verify( reportActionSpy, times( 1 ) ).createDialog( (Window) anyObject(),
(ReportDesignerDesignTimeContext) anyObject() );
verify( reportActionSpy, times( 1 ) ).getWindowAncestor( component );
verify( reportDesignerContext, times( 2 ) ).getActiveContext();
verify( reportDesignerContext, times( 1 ) ).getView();
verify( reportDocumentContext, times( 1 ) ).getReportDefinition();
verify( abstractReportDefinition, times( 1 ) ).derive();
try {
verify( dialog ).run( (AbstractReportDefinition) anyObject() );
} catch ( ReportProcessingException e ) {
e.printStackTrace();
}
verify( reportDesignerView, times( 1 ) ).getParent();
verify( (AbstractRootLevelBand) section, times( 1 ) ).getSubReports();
verify( (AbstractRootLevelBand) section, times( 1 ) ).getElementArray();
}
}