/************************************************************** * * 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"), new Optional()), new Any( new Type("com.sun.star.beans.Optional"), 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"), 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(); } }