1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 package ifc.ucb; 29 30 import lib.MultiMethodTest; 31 import lib.Status; 32 import lib.StatusException; 33 34 import com.sun.star.lang.XMultiServiceFactory; 35 import com.sun.star.ucb.ContentProviderInfo; 36 import com.sun.star.ucb.DuplicateProviderException; 37 import com.sun.star.ucb.XContentProvider; 38 import com.sun.star.ucb.XContentProviderManager; 39 import com.sun.star.uno.Exception; 40 import com.sun.star.uno.UnoRuntime; 41 42 /** 43 * Tests XContentProviderManager. The test registers two ContentProviders, calls 44 * queryXXX methods to verify results, and deregisters them. 45 * 46 * Testing <code>com.sun.star.ucb.XContentProviderManager</code> 47 * interface methods : 48 * <ul> 49 * <li><code> registerContentProvider()</code></li> 50 * <li><code> deregisterContentProvider()</code></li> 51 * <li><code> queryContentProviders()</code></li> 52 * <li><code> queryContentProvider()</code></li> 53 * </ul> <p> 54 * The test registers two ContentProviders, calls 55 * queryXXX methods to verify results, and deregisters them. <p> 56 * 57 * Test is <b> NOT </b> multithread compilant. <p> 58 * @see com.sun.star.ucb.XContentProviderManager 59 */ 60 public class _XContentProviderManager extends MultiMethodTest { 61 /** 62 * Contains the tested object. 63 */ 64 public XContentProviderManager oObj; 65 66 /** 67 * The test scheme name. 68 */ 69 static final String myScheme = "test-scheme"; 70 71 /** 72 * First content provider. It will be hidden by <code>contentProvider 73 * </code>, registred with the same <code>myScheme</code> to test 74 * the "hiding" behaviour. 75 */ 76 XContentProvider firstContentProvider; 77 78 /** 79 * The main content provider. 80 */ 81 XContentProvider contentProvider; 82 83 /** 84 * <code>ContentProvider</code>s information which are in the manager 85 * before registering the testing providers. 86 */ 87 ContentProviderInfo[] initialProvidersInfo; 88 89 /** 90 * Creates two testing providers. 91 * 92 * @see #firstContentProvider 93 * @see #contentProvider 94 */ 95 public void before() { 96 XMultiServiceFactory xMSF = (XMultiServiceFactory)tParam.getMSF(); 97 98 log.println("creating testing content providers"); 99 try { 100 firstContentProvider = (XContentProvider)UnoRuntime.queryInterface( 101 XContentProvider.class, xMSF.createInstance( 102 "com.sun.star.ucb.FileContentProvider")); 103 104 contentProvider = (XContentProvider)UnoRuntime.queryInterface( 105 XContentProvider.class, xMSF.createInstance( 106 "com.sun.star.ucb.FileContentProvider")); 107 } catch (Exception e) { 108 log.println("Can't create content providers " + e.getMessage()); 109 e.printStackTrace(log); 110 throw new StatusException("Unexpected exception", e); 111 } 112 } 113 114 /** 115 * At the beginning call <code>queryContentProviders</code> method 116 * 117 * to have info about providers existing before new adding. 118 * It adds two testing contents providers, both for the same scheme. 119 * The second one is added two times: first, in non-replacing mode, to test 120 * <code>DuplicateProviderException</code>, and second, in replacing mode, 121 * to hide the first provider. <p> 122 * 123 * The evaluation of results are performed later, in 124 * <code>queryContentProvider()</code>. 125 * 126 * Has <b> OK </b> status if in the first provider is registered 127 * without exceptions, the second throws 128 * <code>DuplicateProviderException</code> in non-replacing mode, 129 * and no exceptions in replacing mode. <p> 130 * 131 * @see #_queryContentProvider 132 */ 133 public void _registerContentProvider() { 134 // querying providfers info before inserting them, to verify results 135 initialProvidersInfo = oObj.queryContentProviders(); 136 137 log.println("registering the first provider"); 138 try { 139 oObj.registerContentProvider(firstContentProvider, myScheme,false); 140 } catch (DuplicateProviderException e) { 141 log.println("Unexpected exception thrown " + e.getMessage()); 142 e.printStackTrace(log); 143 throw new StatusException("Unexpected exception ", e); 144 } 145 146 log.println("registering the second provider in non-replacing mode"); 147 try { 148 oObj.registerContentProvider(contentProvider, myScheme, false); 149 Status.failed("registerContentProvider(.., .., false)"); 150 } catch (DuplicateProviderException e) { 151 log.println("DuplicateProviderException thrown - OK"); 152 } 153 154 XContentProvider result; 155 156 log.println("registering the second provider in the replace mode"); 157 try { 158 result = oObj.registerContentProvider(contentProvider, myScheme, true); 159 } catch (DuplicateProviderException e) { 160 log.println("Unexpected exception thrown " + e.getMessage()); 161 e.printStackTrace(log); 162 throw new StatusException("Unexpected exception ", e); 163 } 164 165 // check the result is the first provider 166 tRes.tested("registerContentProvider()", 167 result.equals(firstContentProvider)); 168 } 169 170 /** 171 * It calls the method (after registering providers) and compares 172 * its result with the result before registering. 173 * 174 * Has <b> OK </b> status if the number of providers increases 175 * by one after registering custom provider. 176 * 177 * The following method tests are to be completed successfully before : 178 * <ul> 179 * <li> <code> registerContentProvider() </code> : to compare number 180 * of providers. </li> 181 * </ul> 182 * @see #_registerContentProvider 183 */ 184 public void _queryContentProviders() { 185 executeMethod("registerContentProvider()"); 186 187 ContentProviderInfo[] providersInfo = oObj.queryContentProviders(); 188 // verifying that the number of providers increased by 1 189 tRes.tested("queryContentProviders()", 190 providersInfo.length == initialProvidersInfo.length + 1); 191 } 192 193 /** 194 * It queries for added custom provider using its scheme 195 * and verifies its result with 196 * <code>queryContentProviders()</code> result and with 197 * custom provider created in <code>registerContentProvider()</code>. 198 * Also verifies <code>registerContentProvider()</code>. <p> 199 * 200 * Has <b>OK</b> status if the provider returned is found within 201 * all providers and is equal to provider created before. 202 * 203 * The following method tests are to be completed successfully before : 204 * <ul> 205 * <li> <code> registerContentProvider() </code> </li> 206 * </ul> 207 */ 208 public void _queryContentProvider() { 209 executeMethod("registerContentProvider()"); 210 211 XContentProvider result = oObj.queryContentProvider 212 ("http://www.sun.com"); 213 214 log.println("finding queryContentProvider() result"); 215 boolean found = false; 216 217 ContentProviderInfo[] providersInfo = oObj.queryContentProviders(); 218 219 for (int i = 0; i < providersInfo.length; i++) { 220 if (result.equals(providersInfo[i].ContentProvider) 221 /*&& myScheme.equals(providersInfo[i].Scheme)*/) { 222 found = true; 223 break; 224 } 225 } 226 227 // boolean gotTheRightOne = util.ValueComparer.equalValue 228 // (result,contentProvider); 229 230 tRes.tested("queryContentProvider()", found); 231 232 // gotTheRightOne = result.equals(contentProvider); 233 234 } 235 236 /** 237 * At first one provider is deregistered, after that provider 238 * is queried, the second provider must be returned for the 239 * specified scheme. Then the second provider is deregistered. 240 * Now <code>null</code> value must be retruned by the method 241 * <code>queryContentProvider</code> on the specified scheme. <p> 242 * 243 * Has <b>OK</b> status if in the first case the second provider 244 * remains registered, and after its removing no providers remain 245 * registered for the scheme specified. 246 * 247 * The following method tests are to be completed successfully before : 248 * <ul> 249 * <li> <code> registerContentProvider() </code> : two providers 250 * must be registered. </li> 251 * </ul> 252 * The following method tests are to be executed before : 253 * <ul> 254 * <li> <code> queryContentProvider() </code> : to run this test 255 * finally. </li> 256 * <li> <code> queryContentProviders() </code> : to run this test 257 * finally. </li> 258 * </ul> 259 */ 260 public void _deregisterContentProvider() { 261 executeMethod("queryContentProvider()"); 262 executeMethod("queryContentProviders()"); 263 requiredMethod("registerContentProvider()"); 264 265 log.println("deregistering the second provider"); 266 oObj.deregisterContentProvider(contentProvider, myScheme); 267 268 XContentProvider res = oObj.queryContentProvider(myScheme); 269 270 log.println("deregistering the first provider"); 271 oObj.deregisterContentProvider(firstContentProvider, myScheme); 272 273 res = oObj.queryContentProvider(myScheme); 274 275 // verifying that no provider is returned 276 tRes.tested("deregisterContentProvider()", res == null); 277 } 278 } 279