xref: /aoo41x/main/package/qa/storages/Test03.java (revision cdf0e10c)
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 
11 import com.sun.star.embed.*;
12 import com.sun.star.container.XNameAccess;
13 
14 import share.LogWriter;
15 import complex.storages.TestHelper;
16 import complex.storages.StorageTest;
17 
18 public class Test03 implements StorageTest {
19 
20 	XMultiServiceFactory m_xMSF;
21 	XSingleServiceFactory m_xStorageFactory;
22 	TestHelper m_aTestHelper;
23 
24 	public Test03( XMultiServiceFactory xMSF, XSingleServiceFactory xStorageFactory, LogWriter aLogWriter )
25 	{
26 		m_xMSF = xMSF;
27 		m_xStorageFactory = xStorageFactory;
28 		m_aTestHelper = new TestHelper( aLogWriter, "Test03: " );
29 	}
30 
31     public boolean test()
32 	{
33 		try
34 		{
35 			// create temporary storage based on arbitrary medium
36 			// after such a storage is closed it is lost
37 			Object oTempStorage = m_xStorageFactory.createInstance();
38 			XStorage xTempStorage = (XStorage) UnoRuntime.queryInterface( XStorage.class, oTempStorage );
39 			if ( xTempStorage == null )
40 			{
41 				m_aTestHelper.Error( "Can't create temporary storage representation!" );
42 				return false;
43 			}
44 
45 			// open a new substorage
46 			XStorage xTempSubStorage = m_aTestHelper.openSubStorage( xTempStorage,
47 																		"SubStorage1",
48 																		ElementModes.WRITE );
49 			if ( xTempSubStorage == null )
50 			{
51 				m_aTestHelper.Error( "Can't create substorage!" );
52 				return false;
53 			}
54 
55             byte pBigBytes[] = new byte[33000];
56 			for ( int nInd = 0; nInd < 33000; nInd++ )
57 				pBigBytes[nInd] = (byte)( nInd % 128 );
58 
59 			// open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes
60 			if ( !m_aTestHelper.WriteBytesToSubstream( xTempStorage, "BigSubStream1", "MediaType1", true, pBigBytes ) )
61 				return false;
62 
63 			// open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes
64 			if ( !m_aTestHelper.WriteBytesToSubstream( xTempSubStorage, "BigSubStream2", "MediaType2", false, pBigBytes ) )
65 				return false;
66 
67 			byte pBytes1[] = { 1, 1, 1, 1, 1 };
68 
69 			// open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes
70 			if ( !m_aTestHelper.WriteBytesToSubstream( xTempStorage, "SubStream1", "MediaType1", true, pBytes1 ) )
71 				return false;
72 
73 			byte pBytes2[] = { 2, 2, 2, 2, 2 };
74 
75 			// open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes
76 			if ( !m_aTestHelper.WriteBytesToSubstream( xTempSubStorage, "SubStream2", "MediaType2", false, pBytes2 ) )
77 				return false;
78 
79 			// set "MediaType" property for storages and check that "IsRoot" and "OpenMode" properties are set correctly
80 			if ( !m_aTestHelper.setStorageTypeAndCheckProps( xTempSubStorage,
81 															"MediaType3",
82 															false,
83 															ElementModes.WRITE ) )
84 				return false;
85 
86 			if ( !m_aTestHelper.commitStorage( xTempSubStorage ) )
87 				return false;
88 
89 			if ( !m_aTestHelper.disposeStorage( xTempSubStorage ) )
90 				return false;
91 
92 			// ================================================
93 			// check storage hyerarchy tree
94 			// ================================================
95 
96 			// check that isStorageElement() and isStreamElement reacts to nonexisting object correctly
97 			try {
98 				xTempStorage.isStorageElement( "does not exist" );
99 				m_aTestHelper.Error( "Nonexisting element doesn't detected by isStorageElement() call!" );
100 				return false;
101 			}
102 			catch( com.sun.star.container.NoSuchElementException ne )
103 			{
104 			}
105 			catch( Exception e )
106 			{
107 				m_aTestHelper.Error( "Wrong exception is thrown by isStorageElement() call: " + e );
108 				return false;
109 			}
110 
111 			try {
112 				xTempStorage.isStreamElement( "does not exist" );
113 				m_aTestHelper.Error( "Nonexisting element doesn't detected by isStreamElement() call!" );
114 				return false;
115 			}
116 			catch( com.sun.star.container.NoSuchElementException ne )
117 			{
118 			}
119 			catch( Exception e )
120 			{
121 				m_aTestHelper.Error( "Wrong exception is thrown by isStreamElement() call: " + e );
122 				return false;
123 			}
124 
125 			XNameAccess xRootNameAccess = (XNameAccess) UnoRuntime.queryInterface( XNameAccess.class, xTempStorage );
126 			if ( xRootNameAccess == null )
127 			{
128 				m_aTestHelper.Error( "Root storage doesn't support XNameAccess!" );
129 				return false;
130 			}
131 
132 			try {
133 				if ( !xTempStorage.isStorageElement( "SubStorage1" ) || xTempStorage.isStreamElement( "SubStorage1" ) )
134 				{
135 					m_aTestHelper.Error( "Child 'SubStorage1' can not be detected as storage!" );
136 					return false;
137 				}
138 
139 				if ( xTempStorage.isStorageElement( "SubStream1" ) || !xTempStorage.isStreamElement( "SubStream1" ) )
140 				{
141 					m_aTestHelper.Error( "Child 'SubStream1' can not be detected as stream!" );
142 					return false;
143 				}
144 			}
145 			catch( Exception e )
146 			{
147 				m_aTestHelper.Error( "Child's type can not be detected, exception: " + e );
148 				return false;
149 			}
150 
151 
152 			// check that root storage contents are represented correctly
153 			String sRootCont[] = xRootNameAccess.getElementNames();
154 
155 			if ( sRootCont.length != 3 )
156 			{
157 				m_aTestHelper.Error( "Root storage contains wrong amount of children!" );
158 				return false;
159 			}
160 
161             int nFlag = 0;
162             for ( int nInd = 0; nInd < sRootCont.length; nInd++ )
163             {
164                 if ( sRootCont[nInd].equals( "SubStorage1" ) )
165                     nFlag |= 1;
166                 else if ( sRootCont[nInd].equals( "SubStream1" ) )
167                     nFlag |= 2;
168                 else if ( sRootCont[nInd].equals( "BigSubStream1" ) )
169                     nFlag |= 4;
170             }
171 
172 			if ( nFlag != 7 || !( xRootNameAccess.hasByName( "BigSubStream1" ) && xRootNameAccess.hasByName( "SubStream1" ) && xRootNameAccess.hasByName( "SubStorage1" ) ) )
173 			{
174 				m_aTestHelper.Error( "Root storage contains wrong list of children!" );
175 				return false;
176 			}
177 
178 			// get storage through XNameAccess
179 			XStorage xResultSubStorage = getStorageFromNameAccess( xRootNameAccess, "SubStorage1" );
180 			if ( xResultSubStorage == null )
181 				return false;
182 
183 			if ( !m_aTestHelper.checkStorageProperties( xResultSubStorage, "MediaType3", false, ElementModes.READ ) )
184 				return false;
185 
186 			XNameAccess xChildAccess = (XNameAccess) UnoRuntime.queryInterface( XNameAccess.class, xResultSubStorage );
187 			if ( xChildAccess == null )
188 			{
189 				m_aTestHelper.Error( "Child storage doesn't support XNameAccess!" );
190 				return false;
191 			}
192 
193 			if ( !( xChildAccess.hasByName( "SubStream2" ) && xChildAccess.hasByName( "BigSubStream2" ) )
194 			  || !xResultSubStorage.isStreamElement( "SubStream2" )
195 			  || !xResultSubStorage.isStreamElement( "BigSubStream2" ) )
196 			{
197 				m_aTestHelper.Error( "'SubStream2' can not be detected as child stream element of 'SubStorage1'!" );
198 				return false;
199 			}
200 
201 			return true;
202 		}
203 		catch( Exception e )
204 		{
205 			m_aTestHelper.Error( "Exception: " + e );
206 			return false;
207 		}
208     }
209 
210 	public XStorage getStorageFromNameAccess( XNameAccess xAccess, String sName )
211 	{
212 		try
213 		{
214 			Object oStorage = xAccess.getByName( sName );
215 			XStorage xResult = (XStorage) UnoRuntime.queryInterface( XStorage.class, oStorage );
216 
217 			if ( xResult != null )
218 				return xResult;
219 			else
220 				m_aTestHelper.Error( "Can't retrieve substorage '" + sName + "' through XNameAccess!" );
221 		}
222 		catch( Exception e )
223 		{
224 			m_aTestHelper.Error( "Can't retrieve substorage '" + sName + "' through XNameAccess, exception: " + e );
225 		}
226 
227 		return null;
228 	}
229 
230 }
231 
232