1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski package ifc.io; 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski import lib.MultiMethodTest; 27*b1cdbd2cSJim Jagielski import lib.Status; 28*b1cdbd2cSJim Jagielski import lib.StatusException; 29*b1cdbd2cSJim Jagielski 30*b1cdbd2cSJim Jagielski import com.sun.star.io.XInputStream; 31*b1cdbd2cSJim Jagielski import com.sun.star.io.XOutputStream; 32*b1cdbd2cSJim Jagielski 33*b1cdbd2cSJim Jagielski /** 34*b1cdbd2cSJim Jagielski * Testing <code>com.sun.star.io.XOutputStream</code> 35*b1cdbd2cSJim Jagielski * interface methods: 36*b1cdbd2cSJim Jagielski * <ul> 37*b1cdbd2cSJim Jagielski * <li><code>writeBytes()</code></li> 38*b1cdbd2cSJim Jagielski * <li><code>flush()</code></li> 39*b1cdbd2cSJim Jagielski * <li><code>closeOutput()</code></li> 40*b1cdbd2cSJim Jagielski * </ul> <p> 41*b1cdbd2cSJim Jagielski * This test needs the following object relations : 42*b1cdbd2cSJim Jagielski * <ul> 43*b1cdbd2cSJim Jagielski * <li> <code>'ByteData'</code> : Data that is written on the stream. 44*b1cdbd2cSJim Jagielski * </li> 45*b1cdbd2cSJim Jagielski * <li> <code>'XOutputStream.StreamChecker'</code> : <code> 46*b1cdbd2cSJim Jagielski * _XOutputStream.StreamChecker</code> interface implementation 47*b1cdbd2cSJim Jagielski * which can reset streams and return input stream for check if the 48*b1cdbd2cSJim Jagielski * data was successfully written.</li> 49*b1cdbd2cSJim Jagielski * <ul> <p> 50*b1cdbd2cSJim Jagielski * After test completion object environment has to be recreated. 51*b1cdbd2cSJim Jagielski * @see com.sun.star.io.XOutputStream 52*b1cdbd2cSJim Jagielski */ 53*b1cdbd2cSJim Jagielski public class _XOutputStream extends MultiMethodTest { 54*b1cdbd2cSJim Jagielski 55*b1cdbd2cSJim Jagielski public XOutputStream oObj = null; 56*b1cdbd2cSJim Jagielski StreamChecker checker = null; 57*b1cdbd2cSJim Jagielski byte[] data = null; 58*b1cdbd2cSJim Jagielski 59*b1cdbd2cSJim Jagielski public static interface StreamChecker { getInStream()60*b1cdbd2cSJim Jagielski public XInputStream getInStream(); resetStreams()61*b1cdbd2cSJim Jagielski public void resetStreams(); 62*b1cdbd2cSJim Jagielski } 63*b1cdbd2cSJim Jagielski before()64*b1cdbd2cSJim Jagielski protected void before() { 65*b1cdbd2cSJim Jagielski checker = (StreamChecker) 66*b1cdbd2cSJim Jagielski tEnv.getObjRelation("XOutputStream.StreamChecker"); 67*b1cdbd2cSJim Jagielski if (checker == null) throw 68*b1cdbd2cSJim Jagielski new StatusException(Status.failed( 69*b1cdbd2cSJim Jagielski "Couldn't get relation 'XOutputStream.StreamChecker'")); 70*b1cdbd2cSJim Jagielski 71*b1cdbd2cSJim Jagielski data = (byte[])tEnv.getObjRelation("ByteData"); 72*b1cdbd2cSJim Jagielski if (data == null) throw 73*b1cdbd2cSJim Jagielski new StatusException(Status.failed( 74*b1cdbd2cSJim Jagielski "Couldn't get relation 'ByteData'")); 75*b1cdbd2cSJim Jagielski } 76*b1cdbd2cSJim Jagielski /** 77*b1cdbd2cSJim Jagielski * Test writes data to stream. <p> 78*b1cdbd2cSJim Jagielski * Has <b> OK </b> status if the method successfully returns 79*b1cdbd2cSJim Jagielski * and no exceptions were thrown. <p> 80*b1cdbd2cSJim Jagielski */ _writeBytes()81*b1cdbd2cSJim Jagielski public void _writeBytes() { 82*b1cdbd2cSJim Jagielski boolean res = true; 83*b1cdbd2cSJim Jagielski try { 84*b1cdbd2cSJim Jagielski oObj.writeBytes(data); 85*b1cdbd2cSJim Jagielski } catch (com.sun.star.io.IOException e) { 86*b1cdbd2cSJim Jagielski e.printStackTrace(log) ; 87*b1cdbd2cSJim Jagielski res = false; 88*b1cdbd2cSJim Jagielski } 89*b1cdbd2cSJim Jagielski 90*b1cdbd2cSJim Jagielski XInputStream xInStream = checker.getInStream(); 91*b1cdbd2cSJim Jagielski byte[][] readData = new byte[1][data.length]; 92*b1cdbd2cSJim Jagielski try { 93*b1cdbd2cSJim Jagielski xInStream.readBytes(readData, data.length); 94*b1cdbd2cSJim Jagielski } catch(com.sun.star.io.IOException e) { 95*b1cdbd2cSJim Jagielski log.println("Couldn't read data:" + e); 96*b1cdbd2cSJim Jagielski res = false; 97*b1cdbd2cSJim Jagielski } 98*b1cdbd2cSJim Jagielski 99*b1cdbd2cSJim Jagielski for(int i = 0; i < readData[0].length; i++) { 100*b1cdbd2cSJim Jagielski log.println("Expected: "+data[i]+", actual is "+readData[0][i]); 101*b1cdbd2cSJim Jagielski res &= readData[0][i] == data[i]; 102*b1cdbd2cSJim Jagielski } 103*b1cdbd2cSJim Jagielski 104*b1cdbd2cSJim Jagielski tRes.tested("writeBytes()", res); 105*b1cdbd2cSJim Jagielski } 106*b1cdbd2cSJim Jagielski 107*b1cdbd2cSJim Jagielski /** 108*b1cdbd2cSJim Jagielski * Test flushes out data from stream. <p> 109*b1cdbd2cSJim Jagielski * Has <b> OK </b> status if the method successfully returns 110*b1cdbd2cSJim Jagielski * and no exceptions were thrown. <p> 111*b1cdbd2cSJim Jagielski * The following method tests are to be completed successfully before : 112*b1cdbd2cSJim Jagielski * <ul> 113*b1cdbd2cSJim Jagielski * <li> <code> writeBytes() </code></li> 114*b1cdbd2cSJim Jagielski * </ul> 115*b1cdbd2cSJim Jagielski */ _flush()116*b1cdbd2cSJim Jagielski public void _flush() { 117*b1cdbd2cSJim Jagielski requiredMethod("writeBytes()"); 118*b1cdbd2cSJim Jagielski 119*b1cdbd2cSJim Jagielski boolean res; 120*b1cdbd2cSJim Jagielski try { 121*b1cdbd2cSJim Jagielski oObj.flush(); 122*b1cdbd2cSJim Jagielski res = true; 123*b1cdbd2cSJim Jagielski } catch (com.sun.star.io.IOException e) { 124*b1cdbd2cSJim Jagielski e.printStackTrace(log) ; 125*b1cdbd2cSJim Jagielski res = false; 126*b1cdbd2cSJim Jagielski } 127*b1cdbd2cSJim Jagielski 128*b1cdbd2cSJim Jagielski tRes.tested("flush()", res); 129*b1cdbd2cSJim Jagielski } 130*b1cdbd2cSJim Jagielski 131*b1cdbd2cSJim Jagielski /** 132*b1cdbd2cSJim Jagielski * Test calls the method. <p> 133*b1cdbd2cSJim Jagielski * Has <b> OK </b> status if the method successfully returns 134*b1cdbd2cSJim Jagielski * and no exceptions were thrown. <p> 135*b1cdbd2cSJim Jagielski * The following method tests are to be completed successfully before : 136*b1cdbd2cSJim Jagielski * <ul> 137*b1cdbd2cSJim Jagielski * <li> <code> writeBytes() </code></li> 138*b1cdbd2cSJim Jagielski * </ul> 139*b1cdbd2cSJim Jagielski * The following method tests are to be executed before : 140*b1cdbd2cSJim Jagielski * <ul> 141*b1cdbd2cSJim Jagielski * <li><code> flush() </code></li> 142*b1cdbd2cSJim Jagielski * </ul> 143*b1cdbd2cSJim Jagielski */ _closeOutput()144*b1cdbd2cSJim Jagielski public void _closeOutput() { 145*b1cdbd2cSJim Jagielski requiredMethod("writeBytes()"); 146*b1cdbd2cSJim Jagielski executeMethod("flush()"); 147*b1cdbd2cSJim Jagielski 148*b1cdbd2cSJim Jagielski boolean res; 149*b1cdbd2cSJim Jagielski try { 150*b1cdbd2cSJim Jagielski oObj.closeOutput(); 151*b1cdbd2cSJim Jagielski res = true; 152*b1cdbd2cSJim Jagielski } catch (com.sun.star.io.IOException e) { 153*b1cdbd2cSJim Jagielski e.printStackTrace(log); 154*b1cdbd2cSJim Jagielski res = false; 155*b1cdbd2cSJim Jagielski } 156*b1cdbd2cSJim Jagielski 157*b1cdbd2cSJim Jagielski log.println("This method is called in main module"); 158*b1cdbd2cSJim Jagielski 159*b1cdbd2cSJim Jagielski tRes.tested("closeOutput()", res); 160*b1cdbd2cSJim Jagielski } 161*b1cdbd2cSJim Jagielski 162*b1cdbd2cSJim Jagielski /** 163*b1cdbd2cSJim Jagielski * Forces object environment recreation. 164*b1cdbd2cSJim Jagielski */ after()165*b1cdbd2cSJim Jagielski public void after() { 166*b1cdbd2cSJim Jagielski this.disposeEnvironment() ; 167*b1cdbd2cSJim Jagielski } 168*b1cdbd2cSJim Jagielski } 169*b1cdbd2cSJim Jagielski 170