| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| /* $Id$ */ |
| |
| package org.apache.fop.render.afp; |
| |
| import java.awt.Color; |
| import java.awt.Rectangle; |
| import java.util.Map; |
| |
| import org.junit.Test; |
| |
| import static org.junit.Assert.fail; |
| import static org.mockito.Matchers.any; |
| import static org.mockito.Mockito.mock; |
| import static org.mockito.Mockito.verify; |
| import static org.mockito.Mockito.when; |
| |
| import org.apache.xmlgraphics.image.loader.Image; |
| import org.apache.xmlgraphics.image.loader.ImageFlavor; |
| import org.apache.xmlgraphics.image.loader.ImageManager; |
| import org.apache.xmlgraphics.image.loader.impl.DefaultImageContext; |
| import org.apache.xmlgraphics.image.loader.impl.DefaultImageSessionContext; |
| import org.apache.xmlgraphics.image.loader.impl.ImageBuffered; |
| |
| import org.apache.fop.afp.AFPEventProducer; |
| import org.apache.fop.afp.AFPPaintingState; |
| import org.apache.fop.afp.AFPResourceManager; |
| import org.apache.fop.apps.FOUserAgent; |
| import org.apache.fop.events.EventBroadcaster; |
| import org.apache.fop.fo.Constants; |
| import org.apache.fop.render.ImageHandlerRegistry; |
| import org.apache.fop.render.intermediate.IFContext; |
| import org.apache.fop.traits.BorderProps; |
| |
| public class AFPPainterTestCase { |
| |
| @Test |
| public void testDrawBorderRect() { |
| // the goal of this test is to check that the drawing of rounded corners in AFP uses a bitmap of the |
| // rounded corners (in fact the whole rectangle with rounded corners). the check is done by verifying |
| // that the AFPImageHandlerRenderedImage.handleImage() method is called |
| // mock |
| AFPPaintingState afpPaintingState = mock(AFPPaintingState.class); |
| when(afpPaintingState.getResolution()).thenReturn(72); |
| // mock |
| EventBroadcaster eventBroadcaster = mock(EventBroadcaster.class); |
| // mock |
| DefaultImageContext defaultImageContext = mock(DefaultImageContext.class); |
| when(defaultImageContext.getSourceResolution()).thenReturn(72000f); |
| // mock |
| DefaultImageSessionContext defaultImageSessionContxt = mock(DefaultImageSessionContext.class); |
| when(defaultImageSessionContxt.getParentContext()).thenReturn(defaultImageContext); |
| when(defaultImageSessionContxt.getTargetResolution()).thenReturn(72000f); |
| // mock |
| ImageBuffered imageBuffered = mock(ImageBuffered.class); |
| // mock |
| ImageManager imageManager = mock(ImageManager.class); |
| // mock |
| AFPImageHandlerRenderedImage afpImageHandlerRenderedImage = mock(AFPImageHandlerRenderedImage.class); |
| // mock |
| ImageHandlerRegistry imageHandlerRegistry = mock(ImageHandlerRegistry.class); |
| when(imageHandlerRegistry.getHandler(any(AFPRenderingContext.class), any(Image.class))).thenReturn( |
| afpImageHandlerRenderedImage); |
| // mock |
| FOUserAgent foUserAgent = mock(FOUserAgent.class); |
| when(foUserAgent.getEventBroadcaster()).thenReturn(eventBroadcaster); |
| when(foUserAgent.getImageSessionContext()).thenReturn(defaultImageSessionContxt); |
| when(foUserAgent.getImageManager()).thenReturn(imageManager); |
| when(foUserAgent.getImageHandlerRegistry()).thenReturn(imageHandlerRegistry); |
| // mock |
| AFPEventProducer afpEventProducer = mock(AFPEventProducer.class); |
| when(AFPEventProducer.Provider.get(eventBroadcaster)).thenReturn(afpEventProducer); |
| // mock |
| AFPResourceManager afpResourceManager = mock(AFPResourceManager.class); |
| when(afpResourceManager.isObjectCached(null)).thenReturn(false); |
| // mock |
| IFContext ifContext = mock(IFContext.class); |
| when(ifContext.getUserAgent()).thenReturn(foUserAgent); |
| // mock |
| AFPDocumentHandler afpDocumentHandler = mock(AFPDocumentHandler.class); |
| when(afpDocumentHandler.getPaintingState()).thenReturn(afpPaintingState); |
| when(afpDocumentHandler.getContext()).thenReturn(ifContext); |
| when(afpDocumentHandler.getResourceManager()).thenReturn(afpResourceManager); |
| when(afpDocumentHandler.cacheRoundedCorner("a2a48964ba2d")).thenReturn("RC000000"); |
| // real instance, no mock |
| AFPPainter afpPainter = new AFPPainter(afpDocumentHandler); |
| // build rectangle 200 x 50 (points, which are converted to millipoints) |
| Rectangle rectangle = new Rectangle(0, 0, 200000, 50000); |
| // build border properties |
| int style = Constants.EN_SOLID; |
| BorderProps.Mode mode = BorderProps.Mode.SEPARATE; |
| Color color = Color.BLACK; |
| int borderWidth = 4000; |
| int radiusStart = 30000; |
| int radiusEnd = 30000; |
| BorderProps border1 = new BorderProps(style, borderWidth, radiusStart, radiusEnd, color, mode); |
| BorderProps border2 = new BorderProps(style, borderWidth, radiusStart, radiusEnd, color, mode); |
| BorderProps border3 = new BorderProps(style, borderWidth, radiusStart, radiusEnd, color, mode); |
| BorderProps border4 = new BorderProps(style, borderWidth, radiusStart, radiusEnd, color, mode); |
| try { |
| when(imageManager.convertImage(any(Image.class), any(ImageFlavor[].class), any(Map.class))) |
| .thenReturn(imageBuffered); |
| afpPainter.drawBorderRect(rectangle, border1, border2, border3, border4, Color.WHITE); |
| // note: here we would really like to verify that the second and third arguments passed to |
| // handleImage() are the instances ib and rect declared above but that causes mockito to throw |
| // an exception, probably because we cannot declare the AFPRenderingContext and are forced to |
| // use any(), which forces the use of any() for all arguments |
| verify(afpImageHandlerRenderedImage).handleImage(any(AFPRenderingContext.class), |
| any(Image.class), any(Rectangle.class)); |
| } catch (Exception e) { |
| fail("something broke..."); |
| } |
| } |
| |
| } |