1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 package complex.forms; 24 25 import com.sun.star.beans.Property; 26 import com.sun.star.beans.PropertyAttribute; 27 import com.sun.star.beans.PropertyChangeEvent; 28 import com.sun.star.beans.XMultiPropertySet; 29 import com.sun.star.beans.XPropertiesChangeListener; 30 import com.sun.star.lang.EventObject; 31 import com.sun.star.drawing.XControlShape; 32 import com.sun.star.lang.XComponent; 33 import com.sun.star.lang.XMultiServiceFactory; 34 import com.sun.star.uno.UnoRuntime; 35 // import complexlib.ComplexTestCase; 36 import com.sun.star.util.CloseVetoException; 37 import com.sun.star.util.XCloseable; 38 import java.util.Vector; 39 import java.util.logging.Level; 40 import java.util.logging.Logger; 41 import util.FormTools; 42 import util.SOfficeFactory; 43 import util.ValueChanger; 44 45 import org.junit.After; 46 import org.junit.AfterClass; 47 import org.junit.Before; 48 import org.junit.BeforeClass; 49 import org.junit.Test; 50 import org.openoffice.test.OfficeConnection; 51 import static org.junit.Assert.*; 52 53 /** 54 */ 55 public class CheckOGroupBoxModel 56 { 57 58 private XMultiPropertySet m_xPropSet; 59 private XComponent m_xDrawDoc; 60 61 // public String[] getTestMethodNames() { 62 // return new String[] {"setPropertyValues"}; 63 // } 64 @Before public void before() 65 { 66 // XComponent xDrawDoc = null; 67 SOfficeFactory SOF = SOfficeFactory.getFactory(getMSF()); 68 69 try 70 { 71 System.out.println("creating a draw document"); 72 m_xDrawDoc = SOF.createDrawDoc(null); 73 } 74 catch (com.sun.star.uno.Exception e) 75 { 76 fail("Couldn't create document."); 77 } 78 79 String objName = "GroupBox"; 80 XControlShape shape = FormTools.insertControlShape(m_xDrawDoc, 5000, 7000, 2000, 2000, objName); 81 m_xPropSet = UnoRuntime.queryInterface(XMultiPropertySet.class, shape.getControl()); 82 } 83 84 @After public void after() 85 { 86 XCloseable xClose = UnoRuntime.queryInterface(XCloseable.class, m_xDrawDoc); 87 if (xClose != null) 88 { 89 try 90 { 91 xClose.close(true); 92 } 93 catch (CloseVetoException ex) 94 { 95 fail("Can't close document. Exception caught: " + ex.getMessage()); 96 /* ignore! */ 97 } 98 } 99 } 100 @Test public void setPropertyValues() 101 { 102 String[] boundPropsToTest = getBoundPropsToTest(); 103 104 MyChangeListener ml = new MyChangeListener(); 105 m_xPropSet.addPropertiesChangeListener(boundPropsToTest, ml); 106 107 Object[] gValues = m_xPropSet.getPropertyValues(boundPropsToTest); 108 Object[] newValue = new Object[gValues.length]; 109 System.out.println("Trying to change all properties."); 110 for (int i = 0; i < boundPropsToTest.length; i++) 111 { 112 newValue[i] = ValueChanger.changePValue(gValues[i]); 113 } 114 try 115 { 116 m_xPropSet.setPropertyValues(boundPropsToTest, newValue); 117 } 118 catch (com.sun.star.beans.PropertyVetoException e) 119 { 120 fail("Exception occurred while trying to change the properties."); 121 } 122 catch (com.sun.star.lang.IllegalArgumentException e) 123 { 124 fail("Exception occurred while trying to change the properties."); 125 } 126 catch (com.sun.star.lang.WrappedTargetException e) 127 { 128 fail("Exception occurred while trying to change the properties."); 129 } // end of try-catch 130 131 assertTrue("Listener was not called.", ml.wasListenerCalled()); 132 m_xPropSet.removePropertiesChangeListener(ml); 133 } 134 135 private String[] getBoundPropsToTest() 136 { 137 Property[] properties = m_xPropSet.getPropertySetInfo().getProperties(); 138 String[] testPropsNames = null; 139 140 Vector<String> tNames = new Vector<String>(); 141 142 for (int i = 0; i < properties.length; i++) 143 { 144 145 Property property = properties[i]; 146 String name = property.Name; 147 boolean isWritable = ((property.Attributes 148 & PropertyAttribute.READONLY) == 0); 149 boolean isNotNull = ((property.Attributes 150 & PropertyAttribute.MAYBEVOID) == 0); 151 boolean isBound = ((property.Attributes 152 & PropertyAttribute.BOUND) != 0); 153 154 if (isWritable && isNotNull && isBound) 155 { 156 tNames.add(name); 157 } 158 159 } // endfor 160 161 //get a array of bound properties 162 testPropsNames = new String[tNames.size()]; 163 testPropsNames = tNames.toArray(testPropsNames); 164 return testPropsNames; 165 } 166 167 /** 168 * Listener implementation which sets a flag when 169 * listener was called. 170 */ 171 public class MyChangeListener implements XPropertiesChangeListener 172 { 173 174 boolean propertiesChanged = false; 175 176 public void propertiesChange(PropertyChangeEvent[] e) 177 { 178 propertiesChanged = true; 179 } 180 181 public void disposing(EventObject obj) 182 { 183 } 184 185 public boolean wasListenerCalled() 186 { 187 return propertiesChanged; 188 } 189 190 public void reset() 191 { 192 propertiesChanged = false; 193 } 194 }; 195 196 private XMultiServiceFactory getMSF() 197 { 198 final XMultiServiceFactory xMSF1 = UnoRuntime.queryInterface(XMultiServiceFactory.class, connection.getComponentContext().getServiceManager()); 199 return xMSF1; 200 } 201 202 // setup and close connections 203 @BeforeClass 204 public static void setUpConnection() throws Exception 205 { 206 System.out.println("setUpConnection()"); 207 connection.setUp(); 208 } 209 210 @AfterClass 211 public static void tearDownConnection() 212 throws InterruptedException, com.sun.star.uno.Exception 213 { 214 System.out.println("tearDownConnection()"); 215 connection.tearDown(); 216 } 217 private static final OfficeConnection connection = new OfficeConnection(); 218 } 219