1*ef39d40dSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*ef39d40dSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*ef39d40dSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*ef39d40dSAndrew Rist * distributed with this work for additional information 6*ef39d40dSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*ef39d40dSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*ef39d40dSAndrew Rist * "License"); you may not use this file except in compliance 9*ef39d40dSAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*ef39d40dSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*ef39d40dSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*ef39d40dSAndrew Rist * software distributed under the License is distributed on an 15*ef39d40dSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*ef39d40dSAndrew Rist * KIND, either express or implied. See the License for the 17*ef39d40dSAndrew Rist * specific language governing permissions and limitations 18*ef39d40dSAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*ef39d40dSAndrew Rist *************************************************************/ 21*ef39d40dSAndrew Rist 22*ef39d40dSAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir package ifc.io; 25cdf0e10cSrcweir 26cdf0e10cSrcweir import lib.MultiMethodTest; 27cdf0e10cSrcweir import lib.Status; 28cdf0e10cSrcweir import util.ValueComparer; 29cdf0e10cSrcweir 30cdf0e10cSrcweir import com.sun.star.beans.Property; 31cdf0e10cSrcweir import com.sun.star.beans.XPropertySet; 32cdf0e10cSrcweir import com.sun.star.io.XObjectInputStream; 33cdf0e10cSrcweir import com.sun.star.io.XObjectOutputStream; 34cdf0e10cSrcweir import com.sun.star.io.XPersistObject; 35cdf0e10cSrcweir import com.sun.star.uno.UnoRuntime; 36cdf0e10cSrcweir 37cdf0e10cSrcweir /** 38cdf0e10cSrcweir * Testing <code>com.sun.star.io.XObjectInputStream</code> 39cdf0e10cSrcweir * interface methods: 40cdf0e10cSrcweir * <ul> 41cdf0e10cSrcweir * <li><code>readObject()</code></li> 42cdf0e10cSrcweir * </ul> <p> 43cdf0e10cSrcweir * This test needs the following object relations : 44cdf0e10cSrcweir * <ul> 45cdf0e10cSrcweir * <li> <code>'PersistObject'</code> (of type <code>Object</code>): 46cdf0e10cSrcweir * object that supports interface <code>XPersistObject</code> </li> 47cdf0e10cSrcweir * <ul> <p> 48cdf0e10cSrcweir * After test completion object environment has to be recreated. 49cdf0e10cSrcweir * @see com.sun.star.io.XObjectInputStream 50cdf0e10cSrcweir * @see com.sun.star.io.XPersistObject 51cdf0e10cSrcweir */ 52cdf0e10cSrcweir public class _XObjectInputStream extends MultiMethodTest { 53cdf0e10cSrcweir 54cdf0e10cSrcweir public XObjectInputStream oObj = null; 55cdf0e10cSrcweir private Object objRead = null ; 56cdf0e10cSrcweir private Object objWrite = null ; 57cdf0e10cSrcweir 58cdf0e10cSrcweir /** 59cdf0e10cSrcweir * Test reads perisist object from stream and compares properties 60cdf0e10cSrcweir * of the object with properties of persist object obtained 61cdf0e10cSrcweir * from relation <code>'PersistObject'</code> <p> 62cdf0e10cSrcweir * Has <b> OK </b> status if returned value isn't null and values 63cdf0e10cSrcweir * of objects properties are equal. <p> 64cdf0e10cSrcweir */ _readObject()65cdf0e10cSrcweir public void _readObject() { 66cdf0e10cSrcweir objWrite = tEnv.getObjRelation("PersistObject") ; 67cdf0e10cSrcweir if (objWrite == null) { 68cdf0e10cSrcweir log.println("PersistObject not found in relations") ; 69cdf0e10cSrcweir tRes.tested("readObject()", false) ; 70cdf0e10cSrcweir return ; 71cdf0e10cSrcweir } 72cdf0e10cSrcweir 73cdf0e10cSrcweir // write the object 74cdf0e10cSrcweir try { 75cdf0e10cSrcweir XObjectOutputStream oStream = (XObjectOutputStream) 76cdf0e10cSrcweir tEnv.getObjRelation("StreamWriter"); 77cdf0e10cSrcweir oStream.writeObject((XPersistObject)objWrite); 78cdf0e10cSrcweir } catch(com.sun.star.io.IOException e) { 79cdf0e10cSrcweir log.println("Couldn't write object to stream"); 80cdf0e10cSrcweir e.printStackTrace(log); 81cdf0e10cSrcweir tRes.tested("readObject()", Status.skipped(false)); 82cdf0e10cSrcweir return; 83cdf0e10cSrcweir } 84cdf0e10cSrcweir 85cdf0e10cSrcweir try { 86cdf0e10cSrcweir objRead = oObj.readObject() ; 87cdf0e10cSrcweir } catch(com.sun.star.io.IOException e) { 88cdf0e10cSrcweir log.println("Couldn't read object from stream"); 89cdf0e10cSrcweir e.printStackTrace(log); 90cdf0e10cSrcweir tRes.tested("readObject()", false) ; 91cdf0e10cSrcweir return ; 92cdf0e10cSrcweir } 93cdf0e10cSrcweir 94cdf0e10cSrcweir if (objRead == null) { 95cdf0e10cSrcweir log.println("No object was read.") ; 96cdf0e10cSrcweir tRes.tested("readObject()", false) ; 97cdf0e10cSrcweir return ; 98cdf0e10cSrcweir } 99cdf0e10cSrcweir 100cdf0e10cSrcweir XPropertySet props1 = null ; 101cdf0e10cSrcweir XPropertySet props2 = null ; 102cdf0e10cSrcweir 103cdf0e10cSrcweir props1 = (XPropertySet) UnoRuntime.queryInterface 104cdf0e10cSrcweir (XPropertySet.class, objRead) ; 105cdf0e10cSrcweir 106cdf0e10cSrcweir props2 = (XPropertySet) UnoRuntime.queryInterface 107cdf0e10cSrcweir (XPropertySet.class, objWrite) ; 108cdf0e10cSrcweir 109cdf0e10cSrcweir if (props1 == null) { 110cdf0e10cSrcweir log.println("Object read doesn't implement XPropertySet") ; 111cdf0e10cSrcweir tRes.tested("readObject()", false) ; 112cdf0e10cSrcweir return ; 113cdf0e10cSrcweir } 114cdf0e10cSrcweir if (props2 == null) { 115cdf0e10cSrcweir log.println("Object written doesn't implement XPropertySet") ; 116cdf0e10cSrcweir tRes.tested("readObject()", false) ; 117cdf0e10cSrcweir return ; 118cdf0e10cSrcweir } 119cdf0e10cSrcweir 120cdf0e10cSrcweir tRes.tested("readObject()", 121cdf0e10cSrcweir compareProperties(props1, props2)) ; 122cdf0e10cSrcweir } 123cdf0e10cSrcweir compareProperties(XPropertySet props1, XPropertySet props2)124cdf0e10cSrcweir protected boolean compareProperties(XPropertySet props1, 125cdf0e10cSrcweir XPropertySet props2) { 126cdf0e10cSrcweir 127cdf0e10cSrcweir Property[] p1 = props1.getPropertySetInfo().getProperties() ; 128cdf0e10cSrcweir Property[] p2 = props2.getPropertySetInfo().getProperties() ; 129cdf0e10cSrcweir 130cdf0e10cSrcweir if (p1.length != p2.length) { 131cdf0e10cSrcweir log.println("Number of properties differs") ; 132cdf0e10cSrcweir return false ; 133cdf0e10cSrcweir } 134cdf0e10cSrcweir 135cdf0e10cSrcweir boolean result = true ; 136cdf0e10cSrcweir 137cdf0e10cSrcweir for (int i = 0; i < p1.length; i++) { 138cdf0e10cSrcweir String propName = p1[i].Name ; 139cdf0e10cSrcweir 140cdf0e10cSrcweir log.print("Comparing property '" + propName + "' ...") ; 141cdf0e10cSrcweir boolean res = false ; 142cdf0e10cSrcweir try { 143cdf0e10cSrcweir res = ValueComparer.equalValue 144cdf0e10cSrcweir (props1.getPropertyValue(propName), 145cdf0e10cSrcweir props2.getPropertyValue(propName)) ; 146cdf0e10cSrcweir } catch (com.sun.star.beans.UnknownPropertyException e) { 147cdf0e10cSrcweir log.println("Not found !") ; 148cdf0e10cSrcweir } catch (com.sun.star.lang.WrappedTargetException e) { 149cdf0e10cSrcweir log.println(e) ; 150cdf0e10cSrcweir } 151cdf0e10cSrcweir 152cdf0e10cSrcweir if (res) 153cdf0e10cSrcweir log.println("OK.") ; 154cdf0e10cSrcweir else 155cdf0e10cSrcweir log.println("Different !") ; 156cdf0e10cSrcweir 157cdf0e10cSrcweir result &= res ; 158cdf0e10cSrcweir } 159cdf0e10cSrcweir 160cdf0e10cSrcweir return result ; 161cdf0e10cSrcweir } 162cdf0e10cSrcweir 163cdf0e10cSrcweir /** 164cdf0e10cSrcweir * Forces object environment recreation. 165cdf0e10cSrcweir */ after()166cdf0e10cSrcweir public void after() { 167cdf0e10cSrcweir this.disposeEnvironment() ; 168cdf0e10cSrcweir } 169cdf0e10cSrcweir } 170cdf0e10cSrcweir 171