/*
 * 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.
*/

interface myInterface {
    typedef octet myType;
};

module bar {
    module TestModule {
        interface TestObject {
            long testObjectValue();
            void testObjectValueUpdate(in long value);
        };
    };
};

module foo {

    module bar {
        module TestModule {
            interface TestObject {
                typedef long myLongType;
            };
        };
    };

    interface myInterface {
        typedef short myshort;

    };

    interface TestInterface {
        // Test a default object reference type
        boolean testDefaultObjectParam(in Object param);
        Object testDefaultObjectReturn();

        // Tests LOCAL foo::bar::TestModule::TestObject
        boolean testCustomObjectParam(in foo::bar::TestModule::TestObject param);
        foo::bar::TestModule::TestObject testCustomObjectReturn();

        // Test LOCAL ::foo::bar::TestModule::TestObject
        boolean testCustomObjectParam1(in ::foo::bar::TestModule::TestObject param);
        ::foo::bar::TestModule::TestObject testCustomObjectReturn1();

        // Test LOCAL foo::bar::TestModule::TestObject
        boolean testCustomObjectParam2(in bar::TestModule::TestObject param);
        bar::TestModule::TestObject testCustomObjectReturn2();

        // Test GLOBAL ::bar::TestModule::TestObject
        boolean testCustomObjectParam3(in ::bar::TestModule::TestObject param);
        ::bar::TestModule::TestObject testCustomObjectReturn3();
  
        // Test local foo::bar::TestModule::TestObject
        //boolean testCustomObjectParam4(in TestModule::TestObject param);
        //TestModule::TestObject testCustomObjectReturn4();

        // Test - local foo:myInterface
        boolean testCustomObjectParam5(in foo::myInterface param);
        foo::myInterface testCustomObjectReturn5();

        // Test - local ::foo:myInterface
        boolean testCustomObjectParam6(in ::foo::myInterface param);
        ::foo::myInterface testCustomObjectReturn6();

        // Test - local myInterface
        boolean testCustomObjectParam7(in myInterface param);
        myInterface testCustomObjectReturn7();

        // Test - global myInterface
        boolean testCustomObjectParam8(in ::myInterface param);
        ::myInterface testCustomObjectReturn8();
    };

};
