PageRenderTime 33ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/libreoffice-3.6.0.2/package/qa/storages/Test05.java

#
Java | 299 lines | 216 code | 57 blank | 26 comment | 56 complexity | 9e58a4d75aa49d6f05009c92d5957bac MD5 | raw file
Possible License(s): MPL-2.0-no-copyleft-exception, LGPL-2.1, AGPL-1.0, BSD-3-Clause-No-Nuclear-License-2014, GPL-3.0, LGPL-3.0
  1. package complex.storages;
  2. import com.sun.star.uno.XInterface;
  3. import com.sun.star.lang.XMultiServiceFactory;
  4. import com.sun.star.lang.XSingleServiceFactory;
  5. import com.sun.star.bridge.XUnoUrlResolver;
  6. import com.sun.star.uno.UnoRuntime;
  7. import com.sun.star.uno.XInterface;
  8. import com.sun.star.io.XStream;
  9. import com.sun.star.embed.*;
  10. import share.LogWriter;
  11. import complex.storages.TestHelper;
  12. import complex.storages.StorageTest;
  13. public class Test05 implements StorageTest {
  14. XMultiServiceFactory m_xMSF;
  15. XSingleServiceFactory m_xStorageFactory;
  16. TestHelper m_aTestHelper;
  17. public Test05( XMultiServiceFactory xMSF, XSingleServiceFactory xStorageFactory, LogWriter aLogWriter )
  18. {
  19. m_xMSF = xMSF;
  20. m_xStorageFactory = xStorageFactory;
  21. m_aTestHelper = new TestHelper( aLogWriter, "Test05: " );
  22. }
  23. public boolean test()
  24. {
  25. try
  26. {
  27. String sTempFileURL = m_aTestHelper.CreateTempFile( m_xMSF );
  28. if ( sTempFileURL == null || sTempFileURL == "" )
  29. {
  30. m_aTestHelper.Error( "No valid temporary file was created!" );
  31. return false;
  32. }
  33. // create temporary storage based on a previously created temporary file
  34. Object pArgs[] = new Object[2];
  35. pArgs[0] = (Object) sTempFileURL;
  36. pArgs[1] = new Integer( ElementModes.WRITE );
  37. Object oTempFileStorage = m_xStorageFactory.createInstanceWithArguments( pArgs );
  38. XStorage xTempFileStorage = (XStorage)UnoRuntime.queryInterface( XStorage.class, oTempFileStorage );
  39. if ( xTempFileStorage == null )
  40. {
  41. m_aTestHelper.Error( "Can't create storage based on temporary file!" );
  42. return false;
  43. }
  44. // open a new substorage
  45. XStorage xTempSubStorage = m_aTestHelper.openSubStorage( xTempFileStorage,
  46. "SubStorage1",
  47. ElementModes.WRITE );
  48. if ( xTempSubStorage == null )
  49. {
  50. m_aTestHelper.Error( "Can't create substorage!" );
  51. return false;
  52. }
  53. // open a new substorage
  54. XStorage xSubSubStorage = m_aTestHelper.openSubStorage( xTempSubStorage,
  55. "SubSubStorage1",
  56. ElementModes.WRITE );
  57. if ( xSubSubStorage == null )
  58. {
  59. m_aTestHelper.Error( "Can't create substorage!" );
  60. return false;
  61. }
  62. byte pBigBytes[] = new byte[33000];
  63. for ( int nInd = 0; nInd < 33000; nInd++ )
  64. pBigBytes[nInd] = (byte)( nInd % 128 );
  65. // open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes
  66. if ( !m_aTestHelper.WriteBytesToSubstream( xSubSubStorage, "BigSubStream1", "MediaType1", true, pBigBytes ) )
  67. return false;
  68. // open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes
  69. if ( !m_aTestHelper.WriteBytesToSubstream( xSubSubStorage, "BigSubStream2", "MediaType2", false, pBigBytes ) )
  70. return false;
  71. byte pBytes1[] = { 1, 1, 1, 1, 1 };
  72. // open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes
  73. if ( !m_aTestHelper.WriteBytesToSubstream( xSubSubStorage, "SubStream1", "MediaType1", true, pBytes1 ) )
  74. return false;
  75. byte pBytes2[] = { 2, 2, 2, 2, 2 };
  76. // open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes
  77. if ( !m_aTestHelper.WriteBytesToSubstream( xSubSubStorage, "SubStream2", "MediaType2", false, pBytes2 ) )
  78. return false;
  79. // set "MediaType" property for storages and check that "IsRoot" and "OpenMode" properties are set correctly
  80. if ( !m_aTestHelper.setStorageTypeAndCheckProps( xTempFileStorage,
  81. "MediaType3",
  82. true,
  83. ElementModes.WRITE ) )
  84. return false;
  85. // set "MediaType" property for storages and check that "IsRoot" and "OpenMode" properties are set correctly
  86. if ( !m_aTestHelper.setStorageTypeAndCheckProps( xTempSubStorage,
  87. "MediaType4",
  88. false,
  89. ElementModes.WRITE ) )
  90. return false;
  91. // set "MediaType" property for storages and check that "IsRoot" and "OpenMode" properties are set correctly
  92. if ( !m_aTestHelper.setStorageTypeAndCheckProps( xSubSubStorage,
  93. "MediaType5",
  94. false,
  95. ElementModes.WRITE ) )
  96. return false;
  97. // commit all the storages
  98. if ( !m_aTestHelper.commitStorage( xSubSubStorage ) )
  99. return false;
  100. if ( !m_aTestHelper.commitStorage( xTempSubStorage ) )
  101. return false;
  102. if ( !m_aTestHelper.commitStorage( xTempFileStorage ) )
  103. return false;
  104. // try to open an opened substorage, open call must fail
  105. if ( !m_aTestHelper.cantOpenStorage( xTempFileStorage, "SubStorage1" ) )
  106. return false;
  107. // reopen created streams
  108. XStream xSubStream1 = m_aTestHelper.OpenStream( xSubSubStorage,
  109. "SubStream1",
  110. ElementModes.WRITE | ElementModes.NOCREATE );
  111. XStream xBigSubStream1 = m_aTestHelper.OpenStream( xSubSubStorage,
  112. "BigSubStream1",
  113. ElementModes.WRITE | ElementModes.NOCREATE );
  114. XStream xSubStream2 = m_aTestHelper.OpenStream( xSubSubStorage,
  115. "SubStream2",
  116. ElementModes.READ | ElementModes.NOCREATE );
  117. XStream xBigSubStream2 = m_aTestHelper.OpenStream( xSubSubStorage,
  118. "BigSubStream2",
  119. ElementModes.READ | ElementModes.NOCREATE );
  120. if ( xSubStream1 == null || xBigSubStream1 == null || xSubStream2 == null || xBigSubStream2 == null )
  121. return false;
  122. // it should be possible to have more then one copy of stream for reading
  123. XStream xSubStream2clone = m_aTestHelper.OpenStream( xSubSubStorage,
  124. "SubStream2",
  125. ElementModes.READ | ElementModes.NOCREATE );
  126. XStream xBigSubStream2clone = m_aTestHelper.OpenStream( xSubSubStorage,
  127. "BigSubStream2",
  128. ElementModes.READ | ElementModes.NOCREATE );
  129. if ( xSubStream2clone == null || xBigSubStream2clone == null )
  130. return false;
  131. // so now the first streams can not be open neither for reading nor for writing
  132. if ( !m_aTestHelper.cantOpenStream( xSubSubStorage, "SubStream1", ElementModes.WRITE )
  133. || !m_aTestHelper.cantOpenStream( xSubSubStorage, "SubStream1", ElementModes.READ )
  134. || !m_aTestHelper.cantOpenStream( xSubSubStorage, "BigSubStream1", ElementModes.WRITE )
  135. || !m_aTestHelper.cantOpenStream( xSubSubStorage, "BigSubStream1", ElementModes.READ ) )
  136. return false;
  137. // the second streams can not be open for writing
  138. if ( !m_aTestHelper.cantOpenStream( xSubSubStorage, "SubStream2", ElementModes.WRITE )
  139. || !m_aTestHelper.cantOpenStream( xSubSubStorage, "BigSubStream2", ElementModes.WRITE ) )
  140. return false;
  141. // dispose xTestSubStorage, all the subtree must be disposed
  142. if ( !m_aTestHelper.disposeStorage( xTempSubStorage ) )
  143. return false;
  144. // check that subtree was disposed correctly
  145. try
  146. {
  147. xSubSubStorage.isStreamElement( "SubStream1" );
  148. m_aTestHelper.Error( "Substorage was not disposed!" );
  149. return false;
  150. }
  151. catch ( com.sun.star.lang.DisposedException de )
  152. {}
  153. catch ( Exception e )
  154. {
  155. m_aTestHelper.Error( "Wrong exception is thrown by disposed storage: " + e );
  156. return false;
  157. }
  158. try
  159. {
  160. xSubStream1.getInputStream();
  161. m_aTestHelper.Error( "Writeable substream was not disposed!" );
  162. return false;
  163. }
  164. catch ( com.sun.star.lang.DisposedException de )
  165. {}
  166. catch ( Exception e )
  167. {
  168. m_aTestHelper.Error( "Wrong exception is thrown by disposed stream: " + e );
  169. return false;
  170. }
  171. try
  172. {
  173. xSubStream2.getInputStream();
  174. m_aTestHelper.Error( "Readonly substream was not disposed!" );
  175. return false;
  176. }
  177. catch ( com.sun.star.lang.DisposedException de )
  178. {}
  179. catch ( Exception e )
  180. {
  181. m_aTestHelper.Error( "Wrong exception is thrown by disposed stream: " + e );
  182. return false;
  183. }
  184. // dispose root storage
  185. if ( !m_aTestHelper.disposeStorage( xTempFileStorage ) )
  186. return false;
  187. // ================================================
  188. // now check all the written and copied information
  189. // ================================================
  190. pArgs[1] = new Integer( ElementModes.READ );
  191. Object oResultStorage = m_xStorageFactory.createInstanceWithArguments( pArgs );
  192. XStorage xResultStorage = (XStorage) UnoRuntime.queryInterface( XStorage.class, oResultStorage );
  193. if ( xResultStorage == null )
  194. {
  195. m_aTestHelper.Error( "Can't reopen storage based on temporary file!" );
  196. return false;
  197. }
  198. if ( !m_aTestHelper.checkStorageProperties( xResultStorage, "MediaType3", true, ElementModes.READ ) )
  199. return false;
  200. // open existing substorage
  201. XStorage xResSubStorage = m_aTestHelper.openSubStorage( xResultStorage,
  202. "SubStorage1",
  203. ElementModes.READ );
  204. if ( xResSubStorage == null )
  205. {
  206. m_aTestHelper.Error( "Can't open existing substorage 'SubSubStorage'!" );
  207. return false;
  208. }
  209. if ( !m_aTestHelper.checkStorageProperties( xResSubStorage, "MediaType4", false, ElementModes.READ ) )
  210. return false;
  211. // open existing substorage
  212. XStorage xResSubSubStorage = m_aTestHelper.openSubStorage( xResSubStorage,
  213. "SubSubStorage1",
  214. ElementModes.READ );
  215. if ( xResSubSubStorage == null )
  216. {
  217. m_aTestHelper.Error( "Can't open existing substorage 'SubSubStorage'!" );
  218. return false;
  219. }
  220. if ( !m_aTestHelper.checkStorageProperties( xResSubSubStorage, "MediaType5", false, ElementModes.READ ) )
  221. return false;
  222. // check substreams
  223. if ( !m_aTestHelper.checkStream( xResSubSubStorage, "SubStream1", "MediaType1", true, pBytes1 ) )
  224. return false;
  225. if ( !m_aTestHelper.checkStream( xResSubSubStorage, "BigSubStream1", "MediaType1", true, pBigBytes ) )
  226. return false;
  227. if ( !m_aTestHelper.checkStream( xResSubSubStorage, "SubStream2", "MediaType2", false, pBytes2 ) )
  228. return false;
  229. if ( !m_aTestHelper.checkStream( xResSubSubStorage, "BigSubStream2", "MediaType2", false, pBigBytes ) )
  230. return false;
  231. // dispose used storages to free resources
  232. if ( !m_aTestHelper.disposeStorage( xResultStorage ) )
  233. return false;
  234. return true;
  235. }
  236. catch( Exception e )
  237. {
  238. m_aTestHelper.Error( "Exception: " + e );
  239. return false;
  240. }
  241. }
  242. }