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

EXPECT SUCCESS "constructor.tests 1":
interface X {};
service S: X;


EXPECT SUCCESS "constructor.tests 2":
interface X {};
service S: X {};


EXPECT SUCCESS "constructor.tests 3":
interface X {};
service S: X {
    f();
};


EXPECT FAILURE "constructor.tests 4":
interface X {};
service S: X {
    f();
    f();
};


EXPECT FAILURE "constructor.tests 5":
interface X {
    void f([in] any... p);
};


EXPECT FAILURE "constructor.tests 6":
interface X {
    void f([out] any... p);
};


EXPECT SUCCESS "constructor.tests 7":
interface X {};
service S: X {
    f([in] any... p);
};


EXPECT SUCCESS "constructor.tests 8":
interface X {};
typedef any some;
service S: X {
    f([in] some... p);
};


EXPECT FAILURE "constructor.tests 9":
interface X {};
service S: X {
    f([in] long p1, [in] any... p2);
};


EXPECT FAILURE "constructor.tests 10":
interface X {};
service S: X {
    f([in] any... p2, [in] long p1);
};


EXPECT FAILURE "constructor.tests 11":
interface X {};
service S: X {
    f([in] long p1, [in] long... p2);
};


EXPECT FAILURE "constructor.tests 12":
interface X {};
service S: X {
    f([out] long p);
};


EXPECT FAILURE "constructor.tests 13":
interface X {};
service S: X {
    f([out] any... p);
};


EXPECT FAILURE "constructor.tests 14":
interface X {};
singleton S: X {
    f();
};


EXPECT FAILURE "constructor.tests 15":
module com { module sun { module star { module test {
    interface X {};
service S: com::sun::star::test::X {
    c1([in] long a, [in] com::sun::star::test::X b);
    c2([in] long c, [in] X d);
};
}; }; }; };


EXPECT FAILURE "constructor.tests 16":
module com { module sun { module star { module test {
    interface X {};
}; }; }; };
typedef long T;
service S: com::sun::star::test::X {
    c1([in] sequence<long> a);
    c2([in] sequence<T> b);
};


EXPECT FAILURE "constructor.tests 17":
module com { module sun { module star { module test {
    interface X {};
}; }; }; };
service S: com::sun::star::test::X {
    c1([in] any... a);
    c2([in] any... b);
};


EXPECT SUCCESS "constructor.tests 18":
module com { module sun { module star { module test {
    interface X {};
}; }; }; };
service S: com::sun::star::test::X {
    c1([in] any... a);
    c2([in] sequence<any> b);
};


EXPECT SUCCESS "constructor.tests 19":
module com { module sun { module star { module test {
    interface X { void m(); };
}; }; }; };
service S: com::sun::star::test::X {
    c([in] any... a);
};


EXPECT SUCCESS "constructor.tests 20":
module com { module sun { module star { module uno {
    interface XInterface { void m(); };
}; }; }; };
service S: com::sun::star::uno::XInterface {
    c1([in] long a, [in] long b);
    c2([in] long a);
};


EXPECT SUCCESS "constructor.tests 21":
module com { module sun { module star { module uno {
    interface XInterface { void m(); };
}; }; }; };
service S: com::sun::star::uno::XInterface {
    c1([in] long a);
    c2([in] long a, [in] long b);
};


EXPECT SUCCESS "constructor.tests 22":
module com { module sun { module star { module uno {
    interface XInterface { void m(); };
}; }; }; };
service S: com::sun::star::uno::XInterface {
    c1([in] long a, [in] short b);
    c2([in] long a, [in] long b);
};
