/*! * 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) 2005-2017 Pentaho Corporation.. All rights reserved. */ package org.pentaho.reporting.engine.classic.extensions.modules.java14print; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.pentaho.reporting.engine.classic.core.MasterReport; import org.pentaho.reporting.engine.classic.core.PageDefinition; import org.pentaho.reporting.engine.classic.core.modules.gui.print.PrintUtil; import org.pentaho.reporting.engine.classic.core.modules.output.pageable.graphics.PrintReportProcessor; import org.pentaho.reporting.libraries.base.config.DefaultConfiguration; import org.pentaho.reporting.libraries.resourceloader.ResourceManager; import javax.print.DocFlavor; import javax.print.DocPrintJob; import javax.print.PrintException; import javax.print.PrintService; import javax.print.SimpleDoc; import javax.print.attribute.HashPrintRequestAttributeSet; import javax.print.attribute.PrintRequestAttributeSet; import javax.print.attribute.standard.Copies; import javax.print.attribute.standard.JobName; import javax.print.attribute.standard.Media; import javax.print.attribute.standard.MediaPrintableArea; import javax.print.attribute.standard.MediaSizeName; import javax.print.attribute.standard.OrientationRequested; import javax.print.attribute.standard.PageRanges; import java.awt.print.PageFormat; import java.awt.print.Paper; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.assertThat; import static org.mockito.Matchers.any; import static org.mockito.Mockito.*; public class Java14PrintUtilTest { private static final String JOB_NAME = "job_name"; private static final String REPOT_TITLE = "report_title"; @Test public void testCopyConfiguration() { PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet(); checkCopyConf( null ); checkCopyConf( attributes ); } private MasterReport mockReport( int orientation ) { MasterReport report = mock( MasterReport.class ); PageDefinition pdef = mock( PageDefinition.class ); PageFormat format = mock( PageFormat.class ); Paper paper = mock( Paper.class ); DefaultConfiguration modConf = mock( DefaultConfiguration.class ); ResourceManager resourceManager = new ResourceManager(); doReturn( pdef ).when( report ).getPageDefinition(); doReturn( modConf ).when( report ).getReportConfiguration(); doReturn( modConf ).when( report ).getConfiguration(); doReturn( resourceManager ).when( report ).getResourceManager(); doReturn( REPOT_TITLE ).when( report ).getTitle(); doReturn( JOB_NAME ).when( modConf ).getConfigProperty( PrintUtil.PRINTER_JOB_NAME_KEY, REPOT_TITLE ); doReturn( format ).when( pdef ).getPageFormat( 0 ); doReturn( paper ).when( format ).getPaper(); doReturn( 600.0 ).when( paper ).getWidth(); doReturn( 850.0 ).when( paper ).getHeight(); doReturn( 10.0 ).when( paper ).getImageableX(); doReturn( 5.0 ).when( paper ).getImageableY(); doReturn( 400.0 ).when( paper ).getImageableWidth(); doReturn( 600.0 ).when( paper ).getImageableHeight(); doReturn( orientation ).when( format ).getOrientation(); return report; } private void checkCopyConf( PrintRequestAttributeSet attributes ) { MasterReport report = mockReport( PageFormat.LANDSCAPE ); PrintRequestAttributeSet result = Java14PrintUtil.copyConfiguration( attributes, report ); assertThat( result, is( notNullValue() ) ); assertThat( result.get( Media.class ), is( instanceOf( MediaSizeName.class ) ) ); assertThat( ( (MediaSizeName) result.get( Media.class ) ).getValue(), is( equalTo( MediaSizeName.ISO_A4.getValue() ) ) ); assertThat( result.get( MediaPrintableArea.class ), is( instanceOf( MediaPrintableArea.class ) ) ); assertThat( result.get( OrientationRequested.class ), is( instanceOf( OrientationRequested.class ) ) ); assertThat( (OrientationRequested) result.get( OrientationRequested.class ), is( equalTo( OrientationRequested.LANDSCAPE ) ) ); } @Test public void testIsValidConfiguration() { PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet(); MasterReport report = mockReport( PageFormat.LANDSCAPE ); int result = Java14PrintUtil.isValidConfiguration( attributes, report ); assertThat( result, is( equalTo( Java14PrintUtil.CONFIGURATION_REPAGINATE ) ) ); attributes.add( new PageRanges( 1 ) ); result = Java14PrintUtil.isValidConfiguration( attributes, report ); assertThat( result, is( equalTo( Java14PrintUtil.CONFIGURATION_SHOW_DIALOG ) ) ); attributes = Java14PrintUtil.copyConfiguration( null, report ); result = Java14PrintUtil.isValidConfiguration( attributes, report ); assertThat( result, is( equalTo( Java14PrintUtil.CONFIGURATION_VALID ) ) ); } @Test public void testCopyAuxillaryAttributes() { MasterReport report = mockReport( PageFormat.LANDSCAPE ); PrintRequestAttributeSet result = Java14PrintUtil.copyAuxillaryAttributes( null, report ); verifyCopyAuxillaryResult( result ); PrintRequestAttributeSet existingResult = Java14PrintUtil.copyAuxillaryAttributes( result, report ); verifyCopyAuxillaryResult( existingResult ); } private void verifyCopyAuxillaryResult( PrintRequestAttributeSet result ) { assertThat( result, is( notNullValue() ) ); assertThat( result.get( JobName.class ), is( instanceOf( JobName.class ) ) ); assertThat( ( (JobName) result.get( JobName.class ) ).getValue(), is( equalTo( JOB_NAME ) ) ); assertThat( result.get( Copies.class ), is( instanceOf( Copies.class ) ) ); assertThat( ( (Copies) result.get( Copies.class ) ).getValue(), is( equalTo( 1 ) ) ); } @Test public void testExtractPageFormat() { verifyPageFormat( PageFormat.PORTRAIT ); verifyPageFormat( PageFormat.LANDSCAPE ); verifyPageFormat( PageFormat.REVERSE_LANDSCAPE ); } private void verifyPageFormat( int orientation ) { MasterReport report = mockReport( orientation ); PrintRequestAttributeSet attributeSet = Java14PrintUtil.copyConfiguration( null, report ); PageFormat result = Java14PrintUtil.extractPageFormat( attributeSet ); assertThat( result, is( notNullValue() ) ); assertThat( result.getOrientation(), is( equalTo( orientation ) ) ); } @Test( expected = PrintException.class ) public void testPrintDirectlyException() throws Exception { MasterReport report = mockReport( PageFormat.LANDSCAPE ); PrintService printService = mock( PrintService.class ); doReturn( false ).when( printService ).isDocFlavorSupported( DocFlavor.SERVICE_FORMATTED.PAGEABLE ); Java14PrintUtil.printDirectly( report, printService ); } @Test public void testPrintDirectly() throws Exception { MasterReport report = mockReport( PageFormat.LANDSCAPE ); PrintService printService = mock( PrintService.class ); DocPrintJob job = mock( DocPrintJob.class ); ArgumentCaptor<SimpleDoc> docCaptor = ArgumentCaptor.forClass( SimpleDoc.class ); ArgumentCaptor<PrintRequestAttributeSet> attrsCaptor = ArgumentCaptor.forClass( PrintRequestAttributeSet.class ); doReturn( true ).when( printService ).isDocFlavorSupported( DocFlavor.SERVICE_FORMATTED.PAGEABLE ); doReturn( job ).when( printService ).createPrintJob(); doNothing().when( job ).print( docCaptor.capture(), attrsCaptor.capture() ); Java14PrintUtil.printDirectly( report, printService ); verify( job ).print( any( SimpleDoc.class ), any( PrintRequestAttributeSet.class ) ); assertThat( docCaptor.getValue().getPrintData(), is( instanceOf( PrintReportProcessor.class ) ) ); assertThat( docCaptor.getValue().getDocFlavor(), is( instanceOf( DocFlavor.SERVICE_FORMATTED.class ) ) ); assertThat( attrsCaptor.getValue().size(), is( equalTo( 5 ) ) ); } }