package org.mozilla.io; import java.io.*; import javax.microedition.io.*; import javax.microedition.io.file.*; import com.nokia.mid.s40.io.LocalMessageProtocolMessage; import com.nokia.mid.s40.io.LocalMessageProtocolConnection; import com.nokia.mid.s40.codec.DataEncoder; import com.nokia.mid.s40.codec.DataDecoder; import gnu.testlet.TestHarness; import gnu.testlet.Testlet; import gnu.testlet.TestUtils; public class TestNokiaImageProcessingServer implements Testlet { public int getExpectedPass() { return 59; } public int getExpectedFail() { return 0; } public int getExpectedKnownFail() { return 0; } LocalMessageProtocolConnection client; static final String PROTO_NAME = "nokia.image-processing"; public void testProtocolVersion(TestHarness th) throws IOException { DataEncoder dataEncoder = new DataEncoder("Conv-BEB"); dataEncoder.putStart(14, "event"); dataEncoder.put(13, "name", "Common"); dataEncoder.putStart(14, "message"); dataEncoder.put(13, "name", "ProtocolVersion"); dataEncoder.put(10, "version", "1.[0-10]"); dataEncoder.putEnd(14, "message"); dataEncoder.putEnd(14, "event"); byte[] sendData = dataEncoder.getData(); client.send(sendData, 0, sendData.length); LocalMessageProtocolMessage msg = client.newMessage(null); client.receive(msg); byte[] clientData = msg.getData(); DataDecoder dataDecoder = new DataDecoder("Conv-BEB", clientData, 0, clientData.length); dataDecoder.getStart(14); String name = dataDecoder.getString(13); th.check(name, "Common"); th.check(dataDecoder.getName(), "message"); dataDecoder.getStart(14); String string2 = dataDecoder.getString(13); String string = string2 + ":" + dataDecoder.getString(10); dataDecoder.getEnd(14); th.check(string.startsWith("ProtocolVersion:")); th.check(string.indexOf(58) + 1 != -1); th.check(string.substring(string.indexOf(58) + 1).length() > 0); } public void testScaleImage(TestHarness th, int maxKb, int maxHres, int maxVres, String fileURL, String filenameParam) throws IOException { // Store an image in the fs FileConnection originalImage = (FileConnection)Connector.open(fileURL, Connector.READ_WRITE); if (!originalImage.exists()) { originalImage.create(); } OutputStream os = originalImage.openDataOutputStream(); InputStream is = getClass().getResourceAsStream("test.jpg"); os.write(TestUtils.read(is)); os.close(); long origFileSize = originalImage.fileSize(); DataEncoder dataEncoder = new DataEncoder("Conv-BEB"); dataEncoder.putStart(14, "event"); dataEncoder.put(13, "name", "Scale"); dataEncoder.put(2, "trans_id", 42); dataEncoder.put(11, "filename", filenameParam); dataEncoder.putStart(15, "limits"); if (maxVres > 0) { dataEncoder.put(5, "max_vres", maxVres); } if (maxKb > 0) { dataEncoder.put(5, "max_kb", maxKb); } if (maxHres > 0) { dataEncoder.put(5, "max_hres", maxHres); } dataEncoder.putEnd(15, "limits"); dataEncoder.put(10, "aspect", "FullImage"); dataEncoder.put(2, "quality", 80); dataEncoder.putEnd(14, "event"); byte[] sendData = dataEncoder.getData(); client.send(sendData, 0, sendData.length); LocalMessageProtocolMessage msg = client.newMessage(null); client.receive(msg); byte[] clientData = msg.getData(); DataDecoder dataDecoder = new DataDecoder("Conv-BEB", clientData, 0, clientData.length); dataDecoder.getStart(14); th.check(dataDecoder.getString(13), "Scale"); th.check(dataDecoder.getInteger(2), 42); th.check(dataDecoder.getString(10), "Complete"); String path = "file:////" + dataDecoder.getString(11); FileConnection file = (FileConnection)Connector.open(path); th.check(file.exists(), "File exists"); if (maxKb > 0) { long scaledFileSize = file.fileSize(); if (origFileSize > maxKb * 1024) { th.check(origFileSize > scaledFileSize, "Image is scaled."); } else { if ((maxHres > 0 && maxHres < 195 /* height of test.jpg */ ) || (maxVres > 0 && maxVres < 195 /* width of test.jpg */ )) { th.check(origFileSize > scaledFileSize, "Image is scaled."); } else { th.check(origFileSize == scaledFileSize, "Image is not scaled"); } } } file.delete(); file.close(); th.check(originalImage.exists(), "Original image has been deleted"); originalImage.delete(); originalImage.close(); } public void test(TestHarness th) { try { client = (LocalMessageProtocolConnection)Connector.open("localmsg://" + PROTO_NAME); testProtocolVersion(th); testScaleImage(th, 0, 100, 100, "file:////test.jpg", "test.jpg"); testScaleImage(th, 1, 0, 0, "file:////test.jpg", "test.jpg"); testScaleImage(th, 10000, 0, 0, "file:////test.jpg", "test.jpg"); testScaleImage(th, 10000, 101, 101, "file:////test.jpg", "test.jpg"); testScaleImage(th, 10000, 10000, 10000, "file:////test.jpg", "test.jpg"); testScaleImage(th, 0, 100, 100, "file:////test.jpg", "/test.jpg"); testScaleImage(th, 0, 100, 100, "file:////test.jpg", "file:////test.jpg"); testScaleImage(th, 0, 100, 100, "file:///MemoryCard/test.jpg", "MemoryCard/test.jpg"); testScaleImage(th, 0, 100, 100, "file:///MemoryCard/test.jpg", "/MemoryCard/test.jpg"); testScaleImage(th, 0, 100, 100, "file:///MemoryCard/test.jpg", "file:///MemoryCard/test.jpg"); client.close(); } catch (IOException ioe) { th.fail("Unexpected exception"); ioe.printStackTrace(); } } }