xref: /trunk/main/package/qa/storages/RegressionTest_i27773.java (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
1 package complex.storages;
2 
3 import com.sun.star.uno.XInterface;
4 import com.sun.star.lang.XMultiServiceFactory;
5 import com.sun.star.lang.XSingleServiceFactory;
6 
7 import com.sun.star.bridge.XUnoUrlResolver;
8 import com.sun.star.uno.UnoRuntime;
9 import com.sun.star.uno.XInterface;
10 import com.sun.star.io.XStream;
11 import com.sun.star.io.XInputStream;
12 import com.sun.star.beans.XPropertySet;
13 import com.sun.star.uno.AnyConverter;
14 
15 import com.sun.star.embed.*;
16 
17 import share.LogWriter;
18 import complex.storages.TestHelper;
19 import complex.storages.StorageTest;
20 
21 ///////////////////////////////////
22 // Tests also fix for i51352
23 ///////////////////////////////////
24 
25 public class RegressionTest_i27773 implements StorageTest {
26 
27     XMultiServiceFactory m_xMSF;
28     XSingleServiceFactory m_xStorageFactory;
29     TestHelper m_aTestHelper;
30 
31     public RegressionTest_i27773( XMultiServiceFactory xMSF, XSingleServiceFactory xStorageFactory, LogWriter aLogWriter )
32     {
33         m_xMSF = xMSF;
34         m_xStorageFactory = xStorageFactory;
35         m_aTestHelper = new TestHelper( aLogWriter, "RegressionTest_i27773: " );
36     }
37 
38     public boolean test()
39     {
40         try
41         {
42             XStream xTempFileStream = m_aTestHelper.CreateTempFileStream( m_xMSF );
43             if ( xTempFileStream == null )
44                 return false;
45 
46             if ( true )
47             {
48                 // for debugging proposes
49 
50                 XPropertySet xPropSet = (XPropertySet) UnoRuntime.queryInterface( XPropertySet.class, xTempFileStream );
51                 if ( xPropSet != null )
52                 {
53                     try
54                     {
55                         String sTempURL = AnyConverter.toString( xPropSet.getPropertyValue( "Uri" ) );
56                         // m_aTestHelper.Message( "URL: " + sTempURL );
57                         xPropSet.setPropertyValue( "RemoveFile", new Boolean( false ) );
58                     }
59                     catch ( Exception e )
60                     {
61                     }
62                 }
63             }
64 
65             // create storage based on the temporary stream
66             Object pArgs[] = new Object[2];
67             pArgs[0] = (Object) xTempFileStream;
68             pArgs[1] = new Integer( ElementModes.WRITE );
69 
70             Object oTempStorage = m_xStorageFactory.createInstanceWithArguments( pArgs );
71             XStorage xTempStorage = (XStorage) UnoRuntime.queryInterface( XStorage.class, oTempStorage );
72             if ( xTempStorage == null )
73             {
74                 m_aTestHelper.Error( "Can't create temporary storage representation!" );
75                 return false;
76             }
77 
78             // open a new substorage
79             XStorage xTempSubStorage = m_aTestHelper.openSubStorage( xTempStorage,
80                                                                     "SubStorage1",
81                                                                     ElementModes.WRITE );
82             if ( xTempSubStorage == null )
83             {
84                 m_aTestHelper.Error( "Can't create substorage!" );
85                 return false;
86             }
87 
88             // open an empty substorage
89             XStorage xEmptySubStorage = m_aTestHelper.openSubStorage( xTempStorage,
90                                                                     "EmptySubStorage1",
91                                                                     ElementModes.WRITE );
92             if ( xEmptySubStorage == null )
93             {
94                 m_aTestHelper.Error( "Can't create substorage!" );
95                 return false;
96             }
97 
98             // open an empty substorage
99             XStorage xEmptySubSubStorage = m_aTestHelper.openSubStorage( xTempSubStorage,
100                                                                         "EmptySubSubStorage1",
101                                                                         ElementModes.WRITE );
102             if ( xEmptySubSubStorage == null )
103             {
104                 m_aTestHelper.Error( "Can't create substorage!" );
105                 return false;
106             }
107 
108 
109             byte pBytes1[] = { 1, 1, 1, 1, 1 };
110 
111             // open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes
112             if ( !m_aTestHelper.WriteBytesToSubstream( xTempSubStorage, "SubStream1", "MediaType1", true, pBytes1 ) )
113                 return false;
114 
115             // set "MediaType" property for storages and check that "IsRoot" and "OpenMode" properties are set correctly
116             if ( !m_aTestHelper.setStorageTypeAndCheckProps( xTempStorage,
117                                                             "MediaType2",
118                                                             true,
119                                                             ElementModes.WRITE ) )
120                 return false;
121 
122             // set "MediaType" property for storages and check that "IsRoot" and "OpenMode" properties are set correctly
123             if ( !m_aTestHelper.setStorageTypeAndCheckProps( xEmptySubStorage,
124                                                             "MediaType3",
125                                                             false,
126                                                             ElementModes.WRITE ) )
127                 return false;
128 
129             // set "MediaType" property for storages and check that "IsRoot" and "OpenMode" properties are set correctly
130             if ( !m_aTestHelper.setStorageTypeAndCheckProps( xTempSubStorage,
131                                                             "MediaType4",
132                                                             false,
133                                                             ElementModes.WRITE ) )
134                 return false;
135 
136             // set "MediaType" property for storages and check that "IsRoot" and "OpenMode" properties are set correctly
137             if ( !m_aTestHelper.setStorageTypeAndCheckProps( xEmptySubSubStorage,
138                                                             "MediaType5",
139                                                             false,
140                                                             ElementModes.WRITE ) )
141                 return false;
142 
143 
144             // make a copy of substorage
145 
146             if ( !m_aTestHelper.copyElementTo( xTempStorage, "SubStorage1", xTempStorage, "SubStorage1_copy" ) )
147                 return false;
148 
149             if ( !m_aTestHelper.copyElementTo( xTempStorage, "EmptySubStorage1", xTempStorage, "EmptySubStorage1_copy" ) )
150                 return false;
151 
152             // ================================================
153             // copy all the changed and noncommited substorages
154             // and dispose them
155             // ================================================
156 
157             if ( !m_aTestHelper.commitStorage( xEmptySubSubStorage ) )
158                 return false;
159 
160             if ( !m_aTestHelper.commitStorage( xTempSubStorage ) )
161                 return false;
162 
163             if ( !m_aTestHelper.commitStorage( xEmptySubStorage ) )
164                 return false;
165 
166             if ( !m_aTestHelper.commitStorage( xTempStorage ) )
167                 return false;
168 
169             // dispose substorages
170 
171             if ( !m_aTestHelper.disposeStorage( xEmptySubSubStorage ) )
172                 return false;
173 
174             if ( !m_aTestHelper.disposeStorage( xTempSubStorage ) )
175                 return false;
176 
177             if ( !m_aTestHelper.disposeStorage( xEmptySubStorage ) )
178                 return false;
179 
180             if ( !m_aTestHelper.disposeStorage( xTempStorage ) )
181                 return false;
182 
183             // ================================================
184             // reopen the storage in readonly mode an check contents
185             // ================================================
186 
187             pArgs[1] = new Integer( ElementModes.READ );
188 
189             oTempStorage = m_xStorageFactory.createInstanceWithArguments( pArgs );
190             xTempStorage = (XStorage) UnoRuntime.queryInterface( XStorage.class, oTempStorage );
191             if ( xTempStorage == null )
192             {
193                 m_aTestHelper.Error( "Can't create temporary storage representation!" );
194                 return false;
195             }
196 
197             // open original substorage
198             xTempSubStorage = m_aTestHelper.openSubStorage( xTempStorage,
199                                                                     "SubStorage1",
200                                                                     ElementModes.READ );
201             if ( xTempSubStorage == null )
202             {
203                 m_aTestHelper.Error( "Can't create substorage!" );
204                 return false;
205             }
206 
207             // open copy of the original substorage
208             XStorage xTempSubStorage_copy = m_aTestHelper.openSubStorage( xTempStorage,
209                                                                     "SubStorage1_copy",
210                                                                     ElementModes.READ );
211             if ( xTempSubStorage_copy == null )
212             {
213                 m_aTestHelper.Error( "Can't create substorage!" );
214                 return false;
215             }
216 
217             // open empty substorage
218             xEmptySubStorage = m_aTestHelper.openSubStorage( xTempStorage,
219                                                             "EmptySubStorage1",
220                                                             ElementModes.READ );
221             if ( xEmptySubStorage == null )
222             {
223                 m_aTestHelper.Error( "Can't create substorage!" );
224                 return false;
225             }
226 
227             // open copy of empty substorage
228             XStorage xEmptySubStorage_copy = m_aTestHelper.openSubStorage( xTempStorage,
229                                                                         "EmptySubStorage1_copy",
230                                                                         ElementModes.READ );
231             if ( xEmptySubStorage_copy == null )
232             {
233                 m_aTestHelper.Error( "Can't create substorage!" );
234                 return false;
235             }
236 
237             // open an empty substorage of the substorage
238             xEmptySubSubStorage = m_aTestHelper.openSubStorage( xTempSubStorage,
239                                                                 "EmptySubSubStorage1",
240                                                                 ElementModes.READ );
241             if ( xEmptySubSubStorage == null )
242             {
243                 m_aTestHelper.Error( "Can't create substorage!" );
244                 return false;
245             }
246 
247             // open an empty substorage of the substorage copy
248             XStorage xEmptySubSubStorage_inCopy = m_aTestHelper.openSubStorage( xTempSubStorage_copy,
249                                                                                 "EmptySubSubStorage1",
250                                                                                 ElementModes.READ );
251             if ( xEmptySubSubStorage_inCopy == null )
252             {
253                 m_aTestHelper.Error( "Can't create substorage!" );
254                 return false;
255             }
256 
257 
258             // check contents
259 
260             if ( !m_aTestHelper.checkStorageProperties( xEmptySubSubStorage, "MediaType5", false, ElementModes.READ ) )
261                 return false;
262 
263             if ( !m_aTestHelper.checkStorageProperties( xEmptySubSubStorage_inCopy, "MediaType5", false, ElementModes.READ ) )
264                 return false;
265 
266             if ( !m_aTestHelper.checkStorageProperties( xTempSubStorage, "MediaType4", false, ElementModes.READ ) )
267                 return false;
268 
269             if ( !m_aTestHelper.checkStorageProperties( xTempSubStorage_copy, "MediaType4", false, ElementModes.READ ) )
270                 return false;
271 
272             if ( !m_aTestHelper.checkStorageProperties( xEmptySubStorage, "MediaType3", false, ElementModes.READ ) )
273                 return false;
274 
275             if ( !m_aTestHelper.checkStorageProperties( xEmptySubStorage_copy, "MediaType3", false, ElementModes.READ ) )
276                 return false;
277 
278             if ( !m_aTestHelper.checkStorageProperties( xTempStorage, "MediaType2", true, ElementModes.READ ) )
279                 return false;
280 
281             if ( !m_aTestHelper.checkStream( xTempSubStorage, "SubStream1", "MediaType1", true, pBytes1 ) )
282                 return false;
283 
284             if ( !m_aTestHelper.checkStream( xTempSubStorage_copy, "SubStream1", "MediaType1", true, pBytes1 ) )
285                 return false;
286 
287             // the root storage is based on the temporary stream so it can be left undisposed, since it does not lock
288             // any resource, later the garbage collector will release the object and it must die by refcount
289 
290             return true;
291         }
292         catch( Exception e )
293         {
294             m_aTestHelper.Error( "Exception: " + e );
295             return false;
296         }
297     }
298 }
299 
300