EMMA Coverage Report (generated Sun Apr 20 22:38:01 CEST 2008)
[all classes][net.sf.jomic.comic]

COVERAGE SUMMARY FOR SOURCE FILE [AbstractCreateComicTaskTest.java]

nameclass, %method, %block, %line, %
AbstractCreateComicTaskTest.java100% (1/1)100% (12/12)87%  (511/587)96%  (110.9/115)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class AbstractCreateComicTaskTest100% (1/1)100% (12/12)87%  (511/587)96%  (110.9/115)
testCreateNoComicFromNoImages (): void 100% (1/1)76%  (73/96)87%  (13.9/16)
<static initializer> 100% (1/1)80%  (12/15)80%  (0.8/1)
testCreateComicTask (): void 100% (1/1)85%  (81/95)98%  (18.5/19)
testCreateTiffComic (): void 100% (1/1)86%  (68/79)97%  (14.6/15)
testCreateComicFromWrongImageSuffix (): void 100% (1/1)87%  (65/75)98%  (13.7/14)
createCreateComicTask (File, File, File [], Conversion): Task 100% (1/1)90%  (37/41)94%  (8.5/9)
testCreateComicWithTrimmedImage (): void 100% (1/1)92%  (122/133)99%  (25.8/26)
AbstractCreateComicTaskTest (): void 100% (1/1)100% (3/3)100% (1/1)
createCreateComicTask (File, File [], File): Task 100% (1/1)100% (7/7)100% (1/1)
progressChanged (Task): void 100% (1/1)100% (6/6)100% (2/2)
setUp (): void 100% (1/1)100% (28/28)100% (8/8)
tearDown (): void 100% (1/1)100% (9/9)100% (4/4)

1// Jomic - a viewer for comic book archives.
2// Copyright (C) 2004-2008 Thomas Aglassinger
3//
4// This program is free software: you can redistribute it and/or modify
5// it under the terms of the GNU General Public License as published by
6// the Free Software Foundation, either version 3 of the License, or
7// (at your option) any later version.
8//
9// This program is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12// GNU General Public License for more details.
13//
14// You should have received a copy of the GNU General Public License
15// along with this program.  If not, see <http://www.gnu.org/licenses/>.
16package net.sf.jomic.comic;
17 
18import java.awt.Dimension;
19import java.io.File;
20import java.util.Arrays;
21 
22import junit.framework.TestCase;
23import net.sf.jomic.tools.ImageTools;
24import net.sf.jomic.tools.ProgressChangeListener;
25import net.sf.jomic.tools.ProgressFrame;
26import net.sf.jomic.tools.RegExFileFilter;
27import net.sf.jomic.tools.Task;
28import net.sf.jomic.tools.TestTools;
29 
30/**
31 *  Abstract TestCase for CreateXxxComicTasks.
32 *
33 * @author    Thomas Aglassinger
34 */
35public abstract class AbstractCreateComicTaskTest extends TestCase implements ProgressChangeListener
36{
37    private String comicSuffix;
38    private ImageTools imageTools;
39    private ProgressFrame progressFrame;
40    private TestTools testTools;
41 
42    protected void setUp()
43        throws Exception {
44        super.setUp();
45        testTools = TestTools.instance();
46        imageTools = ImageTools.instance();
47        testTools.setupCache();
48        comicSuffix = getComicFormat().toLowerCase();
49        progressFrame = new ProgressFrame();
50        progressFrame.setTitle(getCallerClass().getName());
51    }
52 
53    /**
54     *  The calling test class (required to derive sensible target file names).
55     */
56    protected abstract Class getCallerClass();
57 
58    /**
59     *  The target comic format the created test comics should have.
60     */
61    protected abstract String getComicFormat();
62 
63    public void progressChanged(Task source) {
64        progressFrame.setProgress(source.getProgress());
65    }
66 
67    public void testCreateComicFromWrongImageSuffix()
68        throws Exception {
69        File wrongPngImage = testTools.getTestFile(TestTools.TEST_IMAGE_DISGUISED_PNG);
70        File wrongJpgImage = testTools.getTestFile(TestTools.TEST_IMAGE_DISGUISED_JPG);
71        String targetComicName = testTools.getTestFileName(
72                getCallerClass(), "testCreateComicFromWrongImageSuffix", null, comicSuffix);
73        File targetComicFile = testTools.getTestOutputFile(targetComicName);
74        File baseDir = wrongPngImage.getParentFile();
75        Task createComicTask = createCreateComicTask(
76                baseDir, new File[]{wrongPngImage, wrongJpgImage}, targetComicFile);
77 
78        try {
79            progressFrame.setNote("testCreateComicFromWrongImageSuffix");
80            progressFrame.setVisible(true);
81            createComicTask.start();
82            assertTrue(targetComicFile.exists());
83        } finally {
84            createComicTask.removeProgressChangeListener(this);
85            progressFrame.setVisible(false);
86        }
87    }
88 
89    public void testCreateComicTask()
90        throws Exception {
91 
92        String targetComicName = testTools.getTestFileName(
93                getCallerClass(), "testCreateComicTask", null, comicSuffix);
94        File targetComicFile = testTools.getTestOutputFile(targetComicName);
95        File testImageDir = testTools.getTestImageFile().getParentFile();
96        File[] allTestImageFiles = testImageDir.listFiles(new RegExFileFilter("\\d\\d(\\+\\d\\d)?\\.png"));
97        File[] testImageFiles;
98 
99        assert allTestImageFiles.length > 0;
100        Arrays.sort(allTestImageFiles);
101 
102        // Use only the first few images to save time.
103        testImageFiles = new File[Math.min(8, allTestImageFiles.length)];
104        System.arraycopy(allTestImageFiles, 0, testImageFiles, 0, testImageFiles.length);
105 
106        Task createComicTask = createCreateComicTask(testImageDir, testImageFiles, targetComicFile);
107 
108        try {
109            progressFrame.setNote("testCreateComicTask");
110            progressFrame.setVisible(true);
111            targetComicFile.delete();
112            assertFalse(targetComicFile.exists());
113            createComicTask.start();
114            assertTrue(targetComicFile.exists());
115        } finally {
116            createComicTask.removeProgressChangeListener(this);
117            progressFrame.setVisible(false);
118        }
119    }
120 
121    public void testCreateComicWithTrimmedImage()
122        throws Exception {
123        File portraitImageFile = testTools.getTestFile(TestTools.TEST_IMAGE_PORTRAIT_NAME);
124        File landscapeImageFile = testTools.getTestFile(TestTools.TEST_IMAGE_LANDSCAPE_NAME);
125        File baseDir = portraitImageFile.getParentFile();
126        String targetComicName = testTools.getTestFileName(
127                getCallerClass(), "testCreateComicWithTrimmedImage",
128                null, comicSuffix);
129        File targetComicFile = testTools.getTestOutputFile(targetComicName);
130        Dimension imageSize = imageTools.getImageDimension(portraitImageFile);
131        Conversion trimImageConversion = new Conversion();
132 
133        trimImageConversion.setComicFormat(getComicFormat());
134        trimImageConversion.setLimitImageSize(true);
135        trimImageConversion.setMaxImageWidth(imageSize.width);
136        trimImageConversion.setMaxImageHeight(imageSize.height / 2);
137 
138        Task createComicTask = createCreateComicTask(
139                targetComicFile, baseDir, new File[]{portraitImageFile, landscapeImageFile}, trimImageConversion);
140 
141        try {
142            progressFrame.setNote("testCreateComicWithTrimmedImage");
143            progressFrame.setVisible(true);
144            createComicTask.start();
145            assertTrue(targetComicFile.exists());
146        } finally {
147            createComicTask.removeProgressChangeListener(this);
148            progressFrame.setVisible(false);
149        }
150 
151        ComicModel comic = new ComicModel(targetComicFile);
152 
153        assertTrue(comic.getImageCount() == 2);
154 
155        int portraitImageHeight = comic.getImage(0).getHeight();
156        int landscapeImageHeight = comic.getImage(1).getHeight();
157 
158        assertEquals(trimImageConversion.getMaxImageHeight(), portraitImageHeight);
159        assertEquals(trimImageConversion.getMaxImageHeight(), landscapeImageHeight);
160    }
161 
162    public void testCreateNoComicFromNoImages()
163        throws Exception {
164        File notAnImageFile = testTools.getTestFile(TestTools.TEST_TEXT_NAME);
165        String targetComicName = testTools.getTestFileName(
166                getCallerClass(), "testCreateNoComicFromNoImages", null, comicSuffix);
167        File targetComicFile = testTools.getTestOutputFile(targetComicName);
168        File baseDir = notAnImageFile.getParentFile();
169        Task createComicTask = createCreateComicTask(baseDir,
170                new File[]{notAnImageFile}, targetComicFile);
171 
172        targetComicFile.delete();
173        if (targetComicFile.exists()) {
174            throw new IllegalStateException("target file must be removed because "
175                    + "it should never have existed in the first place: " + targetComicFile);
176        }
177        try {
178            progressFrame.setNote("testCreateComicTask");
179            progressFrame.setVisible(true);
180            createComicTask.start();
181            assertTrue("file must not exist: " + targetComicFile, !targetComicFile.exists());
182        } finally {
183            createComicTask.removeProgressChangeListener(this);
184            progressFrame.setVisible(false);
185        }
186    }
187 
188    public void testCreateTiffComic()
189        throws Exception {
190        File tiffImageFile = testTools.getTestFile(TestTools.TEST_IMAGE_MAC_TIFF);
191        File baseDir = tiffImageFile.getParentFile();
192        String targetComicName = testTools.getTestFileName(
193                getCallerClass(), "testCreateTiffComic",
194                null, comicSuffix);
195        File targetComicFile = testTools.getTestOutputFile(targetComicName);
196        Task createComicTask = createCreateComicTask(
197                baseDir, new File[]{tiffImageFile}, targetComicFile);
198 
199        try {
200            progressFrame.setNote("testCreateTiffComic");
201            progressFrame.setVisible(true);
202            createComicTask.start();
203            assertTrue(targetComicFile.exists());
204        } finally {
205            createComicTask.removeProgressChangeListener(this);
206            progressFrame.setVisible(false);
207        }
208 
209        ComicModel comic = new ComicModel(targetComicFile);
210 
211        assertTrue(comic.getImageCount() == 1);
212    }
213 
214    protected abstract Task createNewComicTask(
215            File baseDir, File[] testImageFiles, File targetComicFile, Conversion conversion);
216 
217    protected void tearDown()
218        throws Exception {
219        imageTools = null;
220        testTools = null;
221        super.tearDown();
222    }
223 
224    private Task createCreateComicTask(File baseDir, File[] testImageFiles, File targetComicFile) {
225        return createCreateComicTask(targetComicFile, baseDir, testImageFiles, null);
226    }
227 
228    private Task createCreateComicTask(
229            File targetComicFile, File baseDir, File[] testImageFiles, Conversion conversion) {
230        assert baseDir != null;
231 
232        Conversion actualConversion;
233 
234        if (conversion == null) {
235            actualConversion = new Conversion(getComicFormat());
236        } else {
237            actualConversion = conversion;
238        }
239        assertEquals(getComicFormat(), actualConversion.getComicFormat());
240 
241        Task result = createNewComicTask(baseDir, testImageFiles, targetComicFile, actualConversion);
242 
243        progressFrame.setMaximum(result.getMaxProgress());
244        result.addProgressChangeListener(this);
245        return result;
246    }
247}

[all classes][net.sf.jomic.comic]
EMMA 2.0.4217 (C) Vladimir Roubtsov