1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_testtools.hxx"
26 
27 #include "sal/config.h"
28 
29 #include "multi.hxx"
30 
31 #include "rtl/string.hxx"
32 #include "rtl/textenc.h"
33 #include "rtl/ustring.hxx"
34 
35 #include <sstream>
36 
operator <<(std::ostream & s,const rtl::OUString r)37 inline std::ostream& operator<<( std::ostream& s, const rtl::OUString r) { return (s << r.getStr()); }
38 
39 namespace css = com::sun::star;
40 
41 namespace {
42 
43 struct CheckFailed {
CheckFailed__anon56bb99de0111::CheckFailed44     explicit CheckFailed(rtl::OUString const & theMessage): message(theMessage)
45     {}
46 
47     rtl::OUString message;
48 };
49 
checkEqual(T const & value,T const & argument)50 template< typename T > void checkEqual(T const & value, T const & argument) {
51     if (argument != value) {
52         std::ostringstream s;
53         s << value << " != " << argument;
54         throw CheckFailed(
55             rtl::OStringToOUString(
56                 rtl::OString(s.str().c_str()), RTL_TEXTENCODING_UTF8));
57     }
58 }
59 
60 }
61 
62 namespace testtools { namespace bridgetest {
63 
testMulti(com::sun::star::uno::Reference<test::testtools::bridgetest::XMulti> const & multi)64 rtl::OUString testMulti(
65     com::sun::star::uno::Reference< test::testtools::bridgetest::XMulti >
66     const & multi)
67 {
68     try {
69         checkEqual(
70             0.0,
71             css::uno::Reference< test::testtools::bridgetest::XMultiBase1 >(
72                 multi, css::uno::UNO_QUERY_THROW)->getatt1());
73         checkEqual(
74             0.0,
75             static_cast< test::testtools::bridgetest::XMultiBase2 * >(
76                 multi.get())->getatt1());
77         checkEqual(
78             0.0,
79             css::uno::Reference< test::testtools::bridgetest::XMultiBase2 >(
80                 multi, css::uno::UNO_QUERY_THROW)->getatt1());
81         checkEqual(
82             0.0,
83             static_cast< test::testtools::bridgetest::XMultiBase5 * >(
84                 multi.get())->getatt1());
85         checkEqual(
86             0.0,
87             css::uno::Reference< test::testtools::bridgetest::XMultiBase5 >(
88                 multi, css::uno::UNO_QUERY_THROW)->getatt1());
89         css::uno::Reference< test::testtools::bridgetest::XMultiBase5 >(
90             multi, css::uno::UNO_QUERY_THROW)->setatt1(0.1);
91         checkEqual(
92             0.1,
93             css::uno::Reference< test::testtools::bridgetest::XMultiBase1 >(
94                 multi, css::uno::UNO_QUERY_THROW)->getatt1());
95         checkEqual(
96             0.1,
97             static_cast< test::testtools::bridgetest::XMultiBase2 * >(
98                 multi.get())->getatt1());
99         checkEqual(
100             0.1,
101             css::uno::Reference< test::testtools::bridgetest::XMultiBase2 >(
102                 multi, css::uno::UNO_QUERY_THROW)->getatt1());
103         checkEqual(
104             0.1,
105             static_cast< test::testtools::bridgetest::XMultiBase5 * >(
106                 multi.get())->getatt1());
107         checkEqual(
108             0.1,
109             css::uno::Reference< test::testtools::bridgetest::XMultiBase5 >(
110                 multi, css::uno::UNO_QUERY_THROW)->getatt1());
111         checkEqual< sal_Int32 >(
112             11 * 1,
113             css::uno::Reference< test::testtools::bridgetest::XMultiBase1 >(
114                 multi, css::uno::UNO_QUERY_THROW)->fn11(1));
115         checkEqual< sal_Int32 >(
116             11 * 1,
117             static_cast< test::testtools::bridgetest::XMultiBase2 * >(
118                 multi.get())->fn11(1));
119         checkEqual< sal_Int32 >(
120             11 * 2,
121             css::uno::Reference< test::testtools::bridgetest::XMultiBase2 >(
122                 multi, css::uno::UNO_QUERY_THROW)->fn11(2));
123         checkEqual< sal_Int32 >(
124             11 * 1,
125             static_cast< test::testtools::bridgetest::XMultiBase5 * >(
126                 multi.get())->fn11(1));
127         checkEqual< sal_Int32 >(
128             11 * 5,
129             css::uno::Reference< test::testtools::bridgetest::XMultiBase5 >(
130                 multi, css::uno::UNO_QUERY_THROW)->fn11(5));
131         checkEqual(
132             rtl::OUString::createFromAscii("12" "abc"),
133             css::uno::Reference< test::testtools::bridgetest::XMultiBase1 >(
134                 multi, css::uno::UNO_QUERY_THROW)->fn12(
135                     rtl::OUString::createFromAscii("abc")));
136         checkEqual(
137             rtl::OUString::createFromAscii("12" "abc-2"),
138             static_cast< test::testtools::bridgetest::XMultiBase2 * >(
139                 multi.get())->fn12(rtl::OUString::createFromAscii("abc-2")));
140         checkEqual(
141             rtl::OUString::createFromAscii("12" "abc-2"),
142             css::uno::Reference< test::testtools::bridgetest::XMultiBase2 >(
143                 multi, css::uno::UNO_QUERY_THROW)->fn12(
144                     rtl::OUString::createFromAscii("abc-2")));
145         checkEqual(
146             rtl::OUString::createFromAscii("12" "abc-5"),
147             static_cast< test::testtools::bridgetest::XMultiBase5 * >(
148                 multi.get())->fn12(rtl::OUString::createFromAscii("abc-5")));
149         checkEqual(
150             rtl::OUString::createFromAscii("12" "abc-5"),
151             css::uno::Reference< test::testtools::bridgetest::XMultiBase5 >(
152                 multi, css::uno::UNO_QUERY_THROW)->fn12(
153                     rtl::OUString::createFromAscii("abc-5")));
154         checkEqual< sal_Int32 >(21 * 2, multi->fn21(2));
155         checkEqual(
156             rtl::OUString::createFromAscii("22" "de"),
157             multi->fn22(rtl::OUString::createFromAscii("de")));
158         checkEqual< sal_Int32 >(
159             31 * 3,
160             css::uno::Reference< test::testtools::bridgetest::XMultiBase3 >(
161                 multi, css::uno::UNO_QUERY_THROW)->fn31(3));
162         checkEqual< sal_Int32 >(
163             31 * 5,
164             static_cast< test::testtools::bridgetest::XMultiBase5 * >(
165                 multi.get())->fn31(5));
166         checkEqual< sal_Int32 >(
167             31 * 5,
168             css::uno::Reference< test::testtools::bridgetest::XMultiBase5 >(
169                 multi, css::uno::UNO_QUERY_THROW)->fn31(5));
170         checkEqual(
171             0.0,
172             css::uno::Reference< test::testtools::bridgetest::XMultiBase3 >(
173                 multi, css::uno::UNO_QUERY_THROW)->getatt3());
174         checkEqual(
175             0.0,
176             static_cast< test::testtools::bridgetest::XMultiBase5 * >(
177                 multi.get())->getatt3());
178         checkEqual(
179             0.0,
180             css::uno::Reference< test::testtools::bridgetest::XMultiBase5 >(
181                 multi, css::uno::UNO_QUERY_THROW)->getatt3());
182         css::uno::Reference< test::testtools::bridgetest::XMultiBase3 >(
183             multi, css::uno::UNO_QUERY_THROW)->setatt3(0.3);
184         checkEqual(
185             0.3,
186             css::uno::Reference< test::testtools::bridgetest::XMultiBase3 >(
187                 multi, css::uno::UNO_QUERY_THROW)->getatt3());
188         checkEqual(
189             0.3,
190             static_cast< test::testtools::bridgetest::XMultiBase5 * >(
191                 multi.get())->getatt3());
192         checkEqual(
193             0.3,
194             css::uno::Reference< test::testtools::bridgetest::XMultiBase5 >(
195                 multi, css::uno::UNO_QUERY_THROW)->getatt3());
196         checkEqual(
197             rtl::OUString::createFromAscii("32" "f"),
198             css::uno::Reference< test::testtools::bridgetest::XMultiBase3 >(
199                 multi, css::uno::UNO_QUERY_THROW)->fn32(
200                     rtl::OUString::createFromAscii("f")));
201         checkEqual(
202             rtl::OUString::createFromAscii("32" "f-5"),
203             static_cast< test::testtools::bridgetest::XMultiBase5 * >(
204                 multi.get())->fn32(rtl::OUString::createFromAscii("f-5")));
205         checkEqual(
206             rtl::OUString::createFromAscii("32" "f-5"),
207             css::uno::Reference< test::testtools::bridgetest::XMultiBase5 >(
208                 multi, css::uno::UNO_QUERY_THROW)->fn32(
209                     rtl::OUString::createFromAscii("f-5")));
210         checkEqual< sal_Int32 >(
211             33,
212             css::uno::Reference< test::testtools::bridgetest::XMultiBase3 >(
213                 multi, css::uno::UNO_QUERY_THROW)->fn33());
214         checkEqual< sal_Int32 >(
215             33,
216             static_cast< test::testtools::bridgetest::XMultiBase5 * >(
217                 multi.get())->fn33());
218         checkEqual< sal_Int32 >(
219             33,
220             css::uno::Reference< test::testtools::bridgetest::XMultiBase5 >(
221                 multi, css::uno::UNO_QUERY_THROW)->fn33());
222         checkEqual< sal_Int32 >(41 * 4, multi->fn41(4));
223         checkEqual< sal_Int32 >(61 * 6, multi->fn61(6));
224         checkEqual(
225             rtl::OUString::createFromAscii("62" ""),
226             multi->fn62(rtl::OUString::createFromAscii("")));
227         checkEqual< sal_Int32 >(71 * 7, multi->fn71(7));
228         checkEqual(
229             rtl::OUString::createFromAscii("72" "g"),
230             multi->fn72(rtl::OUString::createFromAscii("g")));
231         checkEqual< sal_Int32 >(73, multi->fn73());
232     } catch (CheckFailed const & f) {
233         return f.message;
234     }
235     return rtl::OUString();
236 }
237 
238 } }
239