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_cppuhelper.hxx" 26 27 #include "sal/config.h" 28 29 #include "test/cppuhelper/propertysetmixin/CppSupplier.hpp" 30 #include "test/cppuhelper/propertysetmixin/JavaSupplier.hpp" 31 #include "test/cppuhelper/propertysetmixin/XSupplier.hpp" 32 #include "test/cppuhelper/propertysetmixin/XTest3.hpp" 33 34 #include "com/sun/star/beans/Ambiguous.hpp" 35 #include "com/sun/star/beans/Defaulted.hpp" 36 #include "com/sun/star/beans/Optional.hpp" 37 #include "com/sun/star/beans/Property.hpp" 38 #include "com/sun/star/beans/PropertyAttribute.hpp" 39 #include "com/sun/star/beans/PropertyChangeEvent.hpp" 40 #include "com/sun/star/beans/PropertyState.hpp" 41 #include "com/sun/star/beans/PropertyValue.hpp" 42 #include "com/sun/star/beans/PropertyVetoException.hpp" 43 #include "com/sun/star/beans/UnknownPropertyException.hpp" 44 #include "com/sun/star/beans/XFastPropertySet.hpp" 45 #include "com/sun/star/beans/XPropertyAccess.hpp" 46 #include "com/sun/star/beans/XPropertyChangeListener.hpp" 47 #include "com/sun/star/beans/XPropertySet.hpp" 48 #include "com/sun/star/beans/XPropertySetInfo.hpp" 49 #include "com/sun/star/beans/XVetoableChangeListener.hpp" 50 #include "com/sun/star/lang/XComponent.hpp" 51 #include "com/sun/star/uno/Any.hxx" 52 #include "com/sun/star/uno/Reference.hxx" 53 #include "com/sun/star/uno/RuntimeException.hpp" 54 #include "com/sun/star/uno/Sequence.hxx" 55 #include "com/sun/star/uno/Type.hxx" 56 #include "com/sun/star/uno/XComponentContext.hpp" 57 #include "cppuhelper/bootstrap.hxx" 58 #include "cppuhelper/implbase1.hxx" 59 #include "gtest/gtest.h" 60 #include "osl/mutex.hxx" 61 #include "rtl/ref.hxx" 62 #include "rtl/string.h" 63 #include "rtl/textenc.h" 64 #include "rtl/ustring.h" 65 #include "rtl/ustring.hxx" 66 #include "sal/types.h" 67 #include "osl/process.h" 68 69 #include <limits> 70 #include <ostream> 71 72 namespace com { namespace sun { namespace star { 73 struct EventObject; 74 } } } 75 76 namespace css = com::sun::star; 77 78 namespace { 79 80 std::ostream & operator <<(std::ostream & out, rtl::OUString const & value) { 81 return out << rtl::OUStringToOString(value, RTL_TEXTENCODING_UTF8).getStr(); 82 } 83 84 std::ostream & operator <<(std::ostream & out, css::uno::Type const & value) { 85 return out << "com::sun::star::uno::Type[" << value.getTypeName() << ']'; 86 } 87 88 std::ostream & operator <<(std::ostream & out, css::uno::Any const & value) { 89 return 90 out << "com::sun::star::uno::Any[" << value.getValueType() << ", ...]"; 91 } 92 93 class BoundListener: 94 public cppu::WeakImplHelper1< css::beans::XPropertyChangeListener > 95 { 96 public: 97 BoundListener(): m_count(0) {} 98 99 int count() const { 100 osl::MutexGuard g(m_mutex); 101 return m_count; 102 } 103 104 virtual void SAL_CALL disposing(css::lang::EventObject const &) 105 { 106 osl::MutexGuard g(m_mutex); 107 ASSERT_TRUE(m_count < std::numeric_limits< int >::max()); 108 ++m_count; 109 } 110 111 virtual void SAL_CALL propertyChange( 112 css::beans::PropertyChangeEvent const &) 113 { FAIL() << "BoundListener::propertyChange called"; } 114 115 private: 116 BoundListener(BoundListener &); // not defined 117 void operator =(BoundListener &); // not defined 118 119 virtual ~BoundListener() {} 120 121 mutable osl::Mutex m_mutex; 122 int m_count; 123 }; 124 125 class VetoListener: 126 public cppu::WeakImplHelper1< css::beans::XVetoableChangeListener > 127 { 128 public: 129 VetoListener(): m_count(0) {} 130 131 int count() const { 132 osl::MutexGuard g(m_mutex); 133 return m_count; 134 } 135 136 virtual void SAL_CALL disposing(css::lang::EventObject const &) 137 { 138 osl::MutexGuard g(m_mutex); 139 ASSERT_TRUE(m_count < std::numeric_limits< int >::max()); 140 ++m_count; 141 } 142 143 virtual void SAL_CALL vetoableChange( 144 css::beans::PropertyChangeEvent const &) 145 { FAIL() << "VetoListener::vetoableChange called"; } 146 147 private: 148 VetoListener(VetoListener &); // not defined 149 void operator =(VetoListener &); // not defined 150 151 virtual ~VetoListener() {} 152 153 mutable osl::Mutex m_mutex; 154 int m_count; 155 }; 156 157 class Test: public ::testing::Test { 158 public: 159 virtual void SetUp(); 160 161 virtual void TearDown(); 162 163 protected: 164 css::uno::Reference< test::cppuhelper::propertysetmixin::XSupplier > 165 getCppSupplier() const; 166 167 css::uno::Reference< test::cppuhelper::propertysetmixin::XSupplier > 168 getJavaSupplier() const; 169 170 void testEmpty1( 171 css::uno::Reference< test::cppuhelper::propertysetmixin::XSupplier > 172 const & supplier) const; 173 174 void testEmpty2( 175 css::uno::Reference< test::cppuhelper::propertysetmixin::XSupplier > 176 const & supplier) const; 177 178 void testFull( 179 css::uno::Reference< test::cppuhelper::propertysetmixin::XSupplier > 180 const & supplier) const; 181 182 css::uno::Reference< css::uno::XComponentContext > m_context; 183 }; 184 185 void Test::SetUp() { 186 m_context = cppu::defaultBootstrap_InitialComponentContext(); 187 ASSERT_TRUE(m_context.is()); 188 } 189 190 void Test::TearDown() { 191 css::uno::Reference< css::lang::XComponent >( 192 m_context, css::uno::UNO_QUERY_THROW)->dispose(); 193 } 194 195 css::uno::Reference< test::cppuhelper::propertysetmixin::XSupplier > 196 Test::getCppSupplier() const 197 { 198 return test::cppuhelper::propertysetmixin::CppSupplier::create(m_context); 199 } 200 201 css::uno::Reference< test::cppuhelper::propertysetmixin::XSupplier > 202 Test::getJavaSupplier() const 203 { 204 return test::cppuhelper::propertysetmixin::JavaSupplier::create(m_context); 205 } 206 207 void Test::testEmpty1( 208 css::uno::Reference< test::cppuhelper::propertysetmixin::XSupplier > 209 const & supplier) const 210 { 211 css::uno::Reference< css::lang::XComponent > empty1( 212 supplier->getEmpty1(), css::uno::UNO_QUERY_THROW); 213 ASSERT_TRUE( 214 !css::uno::Reference< css::beans::XPropertySet >( 215 empty1, css::uno::UNO_QUERY).is()); 216 ASSERT_TRUE( 217 !css::uno::Reference< css::beans::XFastPropertySet >( 218 empty1, css::uno::UNO_QUERY).is()); 219 ASSERT_TRUE( 220 !css::uno::Reference< css::beans::XPropertyAccess >( 221 empty1, css::uno::UNO_QUERY).is()); 222 empty1->dispose(); 223 } 224 225 void Test::testEmpty2( 226 css::uno::Reference< test::cppuhelper::propertysetmixin::XSupplier > 227 const & supplier) const 228 { 229 css::uno::Reference< css::lang::XComponent > empty2( 230 supplier->getEmpty2(), css::uno::UNO_QUERY_THROW); 231 css::uno::Reference< css::beans::XPropertySet > empty2p( 232 empty2, css::uno::UNO_QUERY); 233 ASSERT_TRUE(empty2p.is()); 234 css::uno::Reference< css::beans::XPropertySetInfo > info( 235 empty2p->getPropertySetInfo()); 236 ASSERT_TRUE(info.is()); 237 ASSERT_EQ( 238 static_cast< sal_Int32 >(0), info->getProperties().getLength()); 239 try { 240 info->getPropertyByName( 241 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("any"))); 242 FAIL() << "exception expected"; 243 } catch (css::beans::UnknownPropertyException &) {} 244 ASSERT_TRUE( 245 !info->hasPropertyByName( 246 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("any")))); 247 try { 248 empty2p->setPropertyValue( 249 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("any")), css::uno::Any()); 250 FAIL() << "exception expected"; 251 } catch (css::beans::UnknownPropertyException &) {} 252 try { 253 empty2p->getPropertyValue( 254 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("any"))); 255 FAIL() << "exception expected"; 256 } catch (css::beans::UnknownPropertyException &) {} 257 rtl::Reference< BoundListener > boundListener1(new BoundListener); 258 empty2p->addPropertyChangeListener(rtl::OUString(), boundListener1.get()); 259 empty2p->addPropertyChangeListener(rtl::OUString(), boundListener1.get()); 260 rtl::Reference< BoundListener > boundListener2(new BoundListener); 261 empty2p->removePropertyChangeListener( 262 rtl::OUString(), boundListener2.get()); 263 rtl::Reference< VetoListener > vetoListener1(new VetoListener); 264 empty2p->addVetoableChangeListener(rtl::OUString(), vetoListener1.get()); 265 empty2p->addVetoableChangeListener(rtl::OUString(), vetoListener1.get()); 266 rtl::Reference< VetoListener > vetoListener2(new VetoListener); 267 empty2p->addVetoableChangeListener(rtl::OUString(), vetoListener2.get()); 268 empty2p->removeVetoableChangeListener(rtl::OUString(), vetoListener2.get()); 269 css::uno::Reference< css::beans::XFastPropertySet > empty2f( 270 empty2, css::uno::UNO_QUERY); 271 ASSERT_TRUE(empty2f.is()); 272 try { 273 empty2f->setFastPropertyValue(-1, css::uno::Any()); 274 FAIL() << "exception expected"; 275 } catch (css::beans::UnknownPropertyException &) {} 276 try { 277 empty2f->setFastPropertyValue(0, css::uno::Any()); 278 FAIL() << "exception expected"; 279 } catch (css::beans::UnknownPropertyException &) {} 280 try { 281 empty2f->getFastPropertyValue(-1); 282 FAIL() << "exception expected"; 283 } catch (css::beans::UnknownPropertyException &) {} 284 try { 285 empty2f->getFastPropertyValue(0); 286 FAIL() << "exception expected"; 287 } catch (css::beans::UnknownPropertyException &) {} 288 css::uno::Reference< css::beans::XPropertyAccess > empty2a( 289 empty2, css::uno::UNO_QUERY); 290 ASSERT_TRUE(empty2a.is()); 291 ASSERT_EQ( 292 static_cast< sal_Int32 >(0), empty2a->getPropertyValues().getLength()); 293 empty2a->setPropertyValues( 294 css::uno::Sequence< css::beans::PropertyValue >()); 295 css::uno::Sequence< css::beans::PropertyValue > vs(2); 296 vs[0].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("any1")); 297 vs[0].Handle = -1; 298 vs[0].State = css::beans::PropertyState_DIRECT_VALUE; 299 vs[0].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("any2")); 300 vs[0].Handle = -1; 301 vs[0].State = css::beans::PropertyState_DIRECT_VALUE; 302 try { 303 empty2a->setPropertyValues(vs); 304 FAIL() << "exception expected"; 305 } catch (css::beans::UnknownPropertyException &) {} 306 ASSERT_EQ(0, boundListener1->count()); 307 ASSERT_EQ(0, boundListener2->count()); 308 ASSERT_EQ(0, vetoListener1->count()); 309 ASSERT_EQ(0, vetoListener2->count()); 310 empty2->dispose(); 311 ASSERT_EQ(2, boundListener1->count()); 312 ASSERT_EQ(0, boundListener2->count()); 313 ASSERT_EQ(2, vetoListener1->count()); 314 ASSERT_EQ(0, vetoListener2->count()); 315 empty2p->removePropertyChangeListener( 316 rtl::OUString(), boundListener1.get()); 317 empty2p->removePropertyChangeListener( 318 rtl::OUString(), boundListener2.get()); 319 empty2p->removeVetoableChangeListener(rtl::OUString(), vetoListener1.get()); 320 empty2p->removeVetoableChangeListener(rtl::OUString(), vetoListener2.get()); 321 empty2p->addPropertyChangeListener(rtl::OUString(), boundListener1.get()); 322 empty2p->addPropertyChangeListener(rtl::OUString(), boundListener2.get()); 323 empty2p->addVetoableChangeListener(rtl::OUString(), vetoListener1.get()); 324 empty2p->addVetoableChangeListener(rtl::OUString(), vetoListener2.get()); 325 try { 326 empty2p->addPropertyChangeListener( 327 rtl::OUString(), 328 css::uno::Reference< css::beans::XPropertyChangeListener >()); 329 } catch (css::uno::RuntimeException &) {} 330 try { 331 empty2p->addVetoableChangeListener( 332 rtl::OUString(), 333 css::uno::Reference< css::beans::XVetoableChangeListener >()); 334 } catch (css::uno::RuntimeException &) {} 335 ASSERT_EQ(3, boundListener1->count()); 336 ASSERT_EQ(1, boundListener2->count()); 337 ASSERT_EQ(3, vetoListener1->count()); 338 ASSERT_EQ(1, vetoListener2->count()); 339 } 340 341 void Test::testFull( 342 css::uno::Reference< test::cppuhelper::propertysetmixin::XSupplier > 343 const & supplier) const 344 { 345 css::uno::Reference< test::cppuhelper::propertysetmixin::XTest3 > full( 346 supplier->getFull(), css::uno::UNO_QUERY_THROW); 347 css::uno::Reference< css::beans::XPropertySet > fullp( 348 full, css::uno::UNO_QUERY); 349 ASSERT_TRUE(fullp.is()); 350 css::uno::Reference< css::beans::XPropertySetInfo > info( 351 fullp->getPropertySetInfo()); 352 ASSERT_TRUE(info.is()); 353 ASSERT_EQ( 354 static_cast< sal_Int32 >(3), info->getProperties().getLength()); 355 css::beans::Property prop( 356 info->getPropertyByName( 357 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("First")))); 358 ASSERT_EQ( 359 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("First")), prop.Name); 360 ASSERT_EQ(static_cast< sal_Int32 >(0), prop.Handle); 361 ASSERT_EQ(getCppuType(static_cast< sal_Int32 * >(0)), prop.Type); 362 ASSERT_EQ(static_cast< sal_Int16 >(0), prop.Attributes); 363 prop = info->getPropertyByName( 364 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Second"))); 365 ASSERT_EQ( 366 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Second")), prop.Name); 367 ASSERT_EQ(static_cast< sal_Int32 >(1), prop.Handle); 368 ASSERT_EQ(getCppuType(static_cast< sal_Int32 * >(0)), prop.Type); 369 ASSERT_EQ( 370 static_cast< sal_Int16 >( 371 css::beans::PropertyAttribute::MAYBEVOID 372 | css::beans::PropertyAttribute::BOUND 373 | css::beans::PropertyAttribute::CONSTRAINED 374 | css::beans::PropertyAttribute::MAYBEAMBIGUOUS 375 | css::beans::PropertyAttribute::MAYBEDEFAULT 376 | css::beans::PropertyAttribute::OPTIONAL), 377 prop.Attributes); 378 try { 379 info->getPropertyByName( 380 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Third"))); 381 FAIL() << "exception expected"; 382 } catch (css::beans::UnknownPropertyException &) {} 383 prop = info->getPropertyByName( 384 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Fourth"))); 385 ASSERT_EQ( 386 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Fourth")), prop.Name); 387 ASSERT_EQ(static_cast< sal_Int32 >(3), prop.Handle); 388 ASSERT_EQ(getCppuType(static_cast< sal_Int32 * >(0)), prop.Type); 389 ASSERT_EQ( 390 static_cast< sal_Int16 >(css::beans::PropertyAttribute::OPTIONAL), 391 prop.Attributes); 392 try { 393 info->getPropertyByName( 394 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("first"))); 395 FAIL() << "exception expected"; 396 } catch (css::beans::UnknownPropertyException &) {} 397 ASSERT_TRUE( 398 info->hasPropertyByName( 399 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("First")))); 400 ASSERT_TRUE( 401 info->hasPropertyByName( 402 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Second")))); 403 ASSERT_TRUE( 404 !info->hasPropertyByName( 405 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Third")))); 406 ASSERT_TRUE( 407 info->hasPropertyByName( 408 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Fourth")))); 409 ASSERT_TRUE( 410 !info->hasPropertyByName( 411 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("first")))); 412 ASSERT_EQ( 413 css::uno::makeAny(static_cast< sal_Int32 >(0)), 414 fullp->getPropertyValue( 415 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("First")))); 416 fullp->setPropertyValue( 417 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("First")), 418 css::uno::makeAny(static_cast< sal_Int32 >(-100))); 419 ASSERT_EQ( 420 css::uno::makeAny(static_cast< sal_Int32 >(-100)), 421 fullp->getPropertyValue( 422 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("First")))); 423 css::uno::Any voidAny; 424 ASSERT_EQ( 425 voidAny, 426 fullp->getPropertyValue( 427 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Second")))); 428 fullp->setPropertyValue( 429 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Second")), 430 css::uno::makeAny(static_cast< sal_Int32 >(100))); 431 ASSERT_EQ( 432 css::uno::makeAny(static_cast< sal_Int32 >(100)), 433 fullp->getPropertyValue( 434 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Second")))); 435 ASSERT_TRUE(full->getSecond().Value.Value.IsPresent); 436 ASSERT_EQ( 437 static_cast< sal_Int32 >(100), full->getSecond().Value.Value.Value); 438 ASSERT_TRUE(!full->getSecond().Value.IsDefaulted); 439 ASSERT_TRUE(!full->getSecond().IsAmbiguous); 440 fullp->setPropertyValue( 441 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Second")), 442 css::uno::Any()); 443 ASSERT_EQ( 444 voidAny, 445 fullp->getPropertyValue( 446 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Second")))); 447 ASSERT_TRUE(!full->getSecond().Value.Value.IsPresent); 448 ASSERT_TRUE(!full->getSecond().Value.IsDefaulted); 449 ASSERT_TRUE(!full->getSecond().IsAmbiguous); 450 try { 451 fullp->setPropertyValue( 452 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Third")), 453 css::uno::makeAny(static_cast< sal_Int32 >(100))); 454 FAIL() << "exception expected"; 455 } catch (css::beans::UnknownPropertyException &) {} 456 try { 457 fullp->getPropertyValue( 458 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Third"))); 459 FAIL() << "exception expected"; 460 } catch (css::beans::UnknownPropertyException &) {} 461 try { 462 fullp->setPropertyValue( 463 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Fourth")), 464 css::uno::makeAny(static_cast< sal_Int32 >(100))); 465 FAIL() << "exception expected"; 466 } catch (css::beans::UnknownPropertyException &) {} 467 try { 468 fullp->getPropertyValue( 469 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Fourth"))); 470 FAIL() << "exception expected"; 471 } catch (css::beans::UnknownPropertyException &) {} 472 try { 473 fullp->setPropertyValue( 474 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("first")), 475 css::uno::Any()); 476 FAIL() << "exception expected"; 477 } catch (css::beans::UnknownPropertyException &) {} 478 try { 479 fullp->getPropertyValue( 480 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("first"))); 481 FAIL() << "exception expected"; 482 } catch (css::beans::UnknownPropertyException &) {} 483 css::uno::Reference< css::beans::XFastPropertySet > fullf( 484 full, css::uno::UNO_QUERY); 485 ASSERT_TRUE(fullf.is()); 486 ASSERT_EQ( 487 css::uno::makeAny(static_cast< sal_Int32 >(-100)), 488 fullf->getFastPropertyValue(0)); 489 fullf->setFastPropertyValue( 490 0, css::uno::makeAny(static_cast< sal_Int32 >(0))); 491 ASSERT_EQ( 492 css::uno::makeAny(static_cast< sal_Int32 >(0)), 493 fullf->getFastPropertyValue(0)); 494 try { 495 fullf->getFastPropertyValue(-1); 496 } catch (css::beans::UnknownPropertyException &) {} 497 try { 498 fullf->setFastPropertyValue(-1, css::uno::Any()); 499 } catch (css::beans::UnknownPropertyException &) {} 500 css::uno::Reference< css::beans::XPropertyAccess > fulla( 501 full, css::uno::UNO_QUERY); 502 ASSERT_TRUE(fulla.is()); 503 css::uno::Sequence< css::beans::PropertyValue > vs( 504 fulla->getPropertyValues()); 505 ASSERT_EQ(static_cast< sal_Int32 >(2), vs.getLength()); 506 ASSERT_EQ( 507 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("First")), vs[0].Name); 508 ASSERT_EQ(static_cast< sal_Int32 >(0), vs[0].Handle); 509 ASSERT_EQ( 510 css::uno::makeAny(static_cast< sal_Int32 >(0)), vs[0].Value); 511 ASSERT_EQ(css::beans::PropertyState_DIRECT_VALUE, vs[0].State); 512 ASSERT_EQ( 513 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Second")), vs[1].Name); 514 ASSERT_EQ(static_cast< sal_Int32 >(1), vs[1].Handle); 515 ASSERT_EQ(voidAny, vs[1].Value); 516 ASSERT_EQ(css::beans::PropertyState_DIRECT_VALUE, vs[1].State); 517 vs[0].Value <<= static_cast< sal_Int32 >(-100); 518 vs[1].Value <<= static_cast< sal_Int32 >(100); 519 vs[1].State = css::beans::PropertyState_AMBIGUOUS_VALUE; 520 fulla->setPropertyValues(vs); 521 vs = fulla->getPropertyValues(); 522 ASSERT_EQ(static_cast< sal_Int32 >(2), vs.getLength()); 523 ASSERT_EQ( 524 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("First")), vs[0].Name); 525 ASSERT_EQ( 526 css::uno::makeAny(static_cast< sal_Int32 >(-100)), vs[0].Value); 527 ASSERT_EQ(css::beans::PropertyState_DIRECT_VALUE, vs[0].State); 528 ASSERT_EQ( 529 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Second")), vs[1].Name); 530 ASSERT_EQ( 531 css::uno::makeAny(static_cast< sal_Int32 >(100)), vs[1].Value); 532 ASSERT_EQ( 533 css::beans::PropertyState_AMBIGUOUS_VALUE, vs[1].State); 534 ASSERT_TRUE(full->getSecond().Value.Value.IsPresent); 535 ASSERT_EQ( 536 static_cast< sal_Int32 >(100), full->getSecond().Value.Value.Value); 537 ASSERT_TRUE(!full->getSecond().Value.IsDefaulted); 538 ASSERT_TRUE(full->getSecond().IsAmbiguous); 539 css::uno::Reference< css::beans::XPropertyChangeListener > boundListener( 540 new BoundListener); 541 fullp->addPropertyChangeListener( 542 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("First")), boundListener); 543 fullp->removePropertyChangeListener( 544 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("First")), boundListener); 545 fullp->addPropertyChangeListener( 546 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Second")), boundListener); 547 fullp->removePropertyChangeListener( 548 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Second")), boundListener); 549 try { 550 fullp->addPropertyChangeListener( 551 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Third")), 552 boundListener); 553 FAIL() << "exception expected"; 554 } catch (css::beans::UnknownPropertyException &) {} 555 try { 556 fullp->removePropertyChangeListener( 557 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Third")), 558 boundListener); 559 FAIL() << "exception expected"; 560 } catch (css::beans::UnknownPropertyException &) {} 561 fullp->addPropertyChangeListener( 562 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Fourth")), boundListener); 563 fullp->removePropertyChangeListener( 564 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Fourth")), boundListener); 565 try { 566 fullp->addPropertyChangeListener( 567 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Fifth")), 568 boundListener); 569 FAIL() << "exception expected"; 570 } catch (css::beans::UnknownPropertyException &) {} 571 try { 572 fullp->removePropertyChangeListener( 573 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Fifth")), 574 boundListener); 575 FAIL() << "exception expected"; 576 } catch (css::beans::UnknownPropertyException &) {} 577 css::uno::Reference< css::beans::XVetoableChangeListener > vetoListener( 578 new VetoListener); 579 fullp->addVetoableChangeListener( 580 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("First")), vetoListener); 581 fullp->removeVetoableChangeListener( 582 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("First")), vetoListener); 583 fullp->addVetoableChangeListener( 584 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Second")), vetoListener); 585 fullp->removeVetoableChangeListener( 586 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Second")), vetoListener); 587 try { 588 fullp->addVetoableChangeListener( 589 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Third")), 590 vetoListener); 591 FAIL() << "exception expected"; 592 } catch (css::beans::UnknownPropertyException &) {} 593 try { 594 fullp->removeVetoableChangeListener( 595 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Third")), 596 vetoListener); 597 FAIL() << "exception expected"; 598 } catch (css::beans::UnknownPropertyException &) {} 599 fullp->addVetoableChangeListener( 600 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Fourth")), vetoListener); 601 fullp->removeVetoableChangeListener( 602 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Fourth")), vetoListener); 603 try { 604 fullp->addVetoableChangeListener( 605 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Fifth")), 606 vetoListener); 607 FAIL() << "exception expected"; 608 } catch (css::beans::UnknownPropertyException &) {} 609 try { 610 fullp->removeVetoableChangeListener( 611 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Fifth")), 612 vetoListener); 613 FAIL() << "exception expected"; 614 } catch (css::beans::UnknownPropertyException &) {} 615 } 616 617 TEST_F(Test, testCppEmpty1) { testEmpty1(getCppSupplier()); } 618 619 TEST_F(Test, testCppEmpty2) { testEmpty2(getCppSupplier()); } 620 621 TEST_F(Test, testCppFull) { testFull(getCppSupplier()); } 622 623 TEST_F(Test, testJavaEmpty1) { testEmpty1(getJavaSupplier()); } 624 625 TEST_F(Test, testJavaEmpty2) { testEmpty2(getJavaSupplier()); } 626 627 TEST_F(Test, testJavaFull) { testFull(getJavaSupplier()); } 628 629 630 631 } 632 633 int main(int argc, char **argv) 634 { 635 osl_setCommandArgs(argc, argv); 636 ::testing::InitGoogleTest(&argc, argv); 637 return RUN_ALL_TESTS(); 638 } 639