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