blob: 7c513131ad0f7205a1aa4e94dd8de44917069a76 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
package com.sun.star.uno;
import com.sun.star.beans.Optional;
import complexlib.ComplexTestCase;
public final class UnoRuntime_Test extends ComplexTestCase {
public String getTestObjectName() {
return getClass().getName();
}
public String[] getTestMethodNames() {
return new String[] {
"test_generateOid", "test_queryInterface", "test_areSame",
"test_completeValue", "test_currentContext" };
}
public void test_generateOid() {
// Test if UnoRuntime generates an OID for a simple class:
assure("Test1", UnoRuntime.generateOid(new Test1()) != null);
// Test if UnoRuntime generates an OID for a class implementing
// IQueryInterface and returning null from getOid:
assure("Test2", UnoRuntime.generateOid(new Test2()) != null);
// Test if a delegator object has the same OID as its creator:
Test4 test4 = new Test4();
Ifc ifc = UnoRuntime.queryInterface(Ifc.class, test4);
assure(
"Test4",
UnoRuntime.generateOid(test4).equals(UnoRuntime.generateOid(ifc)));
}
public void test_queryInterface() {
// Test if a query for an interface which is not supported returns null:
assure(
"Test1",
UnoRuntime.queryInterface(Ifc.class, new Test1()) == null);
// Test if a query for an interface which is supported through
// IQueryInterface succeeds:
assure(
"Test2",
UnoRuntime.queryInterface(Ifc.class, new Test2()) != null);
// Test if a query for an interface which is directly supported (through
// inheritance) succeeds:
assure(
"Test3",
UnoRuntime.queryInterface(Ifc.class, new Test3()) != null);
}
public void test_areSame() {
assure(
UnoRuntime.areSame(
new Any(Type.UNSIGNED_LONG, new Integer(3)),
new Any(Type.UNSIGNED_LONG, new Integer(3))));
assure(
!UnoRuntime.areSame(
new Any(Type.UNSIGNED_LONG, new Integer(3)), new Integer(3)));
assure(!UnoRuntime.areSame(new int[] { 1 }, new int[] { 1, 2 }));
assure(
UnoRuntime.areSame(
TypeClass.UNSIGNED_LONG,
new Any(new Type(TypeClass.class), TypeClass.UNSIGNED_LONG)));
assure(
UnoRuntime.areSame(
new Any(
new Type("com.sun.star.beans.Optional<unsigned long>"),
new Optional()),
new Any(
new Type("com.sun.star.beans.Optional<unsigned long>"),
new Optional(false, new Integer(0)))));
assure(!UnoRuntime.areSame(new Test1(), new Test2()));
Test2 test2 = new Test2();
assure(
"Test2",
UnoRuntime.areSame(
UnoRuntime.queryInterface(Ifc.class, test2), test2));
}
public void test_completeValue() {
assure(
UnoRuntime.completeValue(Type.UNSIGNED_LONG, null).equals(
new Integer(0)));
Object v = UnoRuntime.completeValue(
new Type("[][]unsigned long"), null);
assure(v instanceof int[][]);
assure(((int[][]) v).length == 0);
assure(
UnoRuntime.completeValue(new Type(TypeClass.class), null) ==
TypeClass.VOID);
v = UnoRuntime.completeValue(
new Type("com.sun.star.beans.Optional<unsigned long>"), null);
assure(v instanceof Optional);
assure(!((Optional) v).IsPresent);
assure(((Optional) v).Value == null);
}
public void test_currentContext() throws InterruptedException {
TestThread t1 = new TestThread();
TestThread t2 = new TestThread();
t1.start();
t2.start();
t1.join();
t2.join();
Object v1 = t1.context.getValueByName("");
Object v2 = t2.context.getValueByName("");
assure("", t1.context != t2.context);
assure("", v1 == t1);
assure("", v2 == t2);
assure("", v1 != v2);
}
private interface Ifc extends XInterface {}
private static class Test1 {}
private static class Test2 implements XInterface, IQueryInterface {
public String getOid() {
return null;
}
public Object queryInterface(Type type) {
return type.equals(new Type(Ifc.class)) ? t2 : null;
}
public boolean isSame(Object object) {
return object == t2;
}
private static final class T2 implements Ifc {}
private final T2 t2 = new T2();
}
private static class Test3 implements Ifc {}
private static class Test4 implements XInterface, IQueryInterface {
public String getOid() {
return null;
}
public Object queryInterface(Type type) {
return type.equals(new Type(Ifc.class)) ? t4 : null;
}
public boolean isSame(Object object) {
return object == t4;
}
private final class T4 implements Ifc, IQueryInterface {
public String getOid() {
return UnoRuntime.generateOid(Test4.this);
}
public Object queryInterface(Type type) {
return Test4.this.queryInterface(type);
}
public boolean isSame(Object object) {
return UnoRuntime.areSame(Test4.this, object);
}
}
private final T4 t4 = new T4();
}
private final class TestThread extends Thread {
public void run() {
assure("", UnoRuntime.getCurrentContext() == null);
context = new TestCurrentContext();
UnoRuntime.setCurrentContext(context);
assure("", UnoRuntime.getCurrentContext() == context);
assure("", context.getValueByName("") == this);
UnoRuntime.setCurrentContext(null);
assure("", UnoRuntime.getCurrentContext() == null);
}
public XCurrentContext context = null;
}
private static final class TestCurrentContext implements XCurrentContext {
public Object getValueByName(String name) {
return value;
}
private final Object value = Thread.currentThread();
}
}