1/* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4
5/**
6 * Test pararameter passing and argument conversion.
7 *
8 * Each test method returns the value in 'b', and copies 'a' into 'b'. This lets
9 * us test return values, in params, and inout params (out params should be
10 * covered by the intersection of return values and inout).
11 */
12
13#include "nsISupports.idl"
14
15interface nsIURI;
16interface nsIXPCTestInterfaceA;
17interface nsIXPCTestInterfaceB;
18
19[scriptable, uuid(812145c7-9fcc-425e-a878-36ad1b7730b7)]
20interface nsIXPCTestParams : nsISupports {
21
22  // These types correspond to the ones in typelib.py
23  boolean               testBoolean(in boolean a, inout boolean b);
24  octet                 testOctet(in octet a, inout octet b);
25  short                 testShort(in short a, inout short b);
26  long                  testLong(in long a, inout long b);
27  long long             testLongLong(in long long a, inout long long b);
28  unsigned short        testUnsignedShort(in unsigned short a, inout unsigned short b);
29  unsigned long         testUnsignedLong(in unsigned long a, inout unsigned long b);
30  unsigned long long    testUnsignedLongLong(in unsigned long long a, inout unsigned long long b);
31  float                 testFloat(in float a, inout float b);
32  double                testDouble(in double a, inout float b);
33  char                  testChar(in char a, inout char b);
34  string                testString(in string a, inout string b);
35  wchar                 testWchar(in wchar a, inout wchar b);
36  wstring               testWstring(in wstring a, inout wstring b);
37  AString               testAString(in AString a, inout AString b);
38  AUTF8String           testAUTF8String(in AUTF8String a, inout AUTF8String b);
39  ACString              testACString(in ACString a, inout ACString b);
40  jsval                 testJsval(in jsval a, inout jsval b);
41
42  // Test various forms of the Array<T> type.
43  Array<short>          testShortSequence(in Array<short> a, inout Array<short> b);
44  Array<double>         testDoubleSequence(in Array<double> a, inout Array<double> b);
45  Array<nsIXPCTestInterfaceA> testInterfaceSequence(in Array<nsIXPCTestInterfaceA> a, inout Array<nsIXPCTestInterfaceA> b);
46  Array<AString>        testAStringSequence(in Array<AString> a, inout Array<AString> b);
47  Array<ACString>       testACStringSequence(in Array<ACString> a, inout Array<ACString> b);
48  Array<jsval>          testJsvalSequence(in Array<jsval> a, inout Array<jsval> b);
49  Array<Array<short> >  testSequenceSequence(in Array<Array<short> > a, inout Array<Array<short> > b);
50
51  void                  testInterfaceIsSequence(in nsIIDPtr aIID, [iid_is(aIID)] in Array<nsQIResult> a,
52                                                inout nsIIDPtr bIID, [iid_is(bIID)] inout Array<nsQIResult> b,
53                                                out nsIIDPtr rvIID, [retval, iid_is(rvIID)] out Array<nsQIResult> rv);
54
55  // Returns whatever was passed in.
56  Array<uint8_t>        testOptionalSequence([optional] in Array<uint8_t> arr);
57
58  //
59  // Dependent parameters use the same types as above, but are handled much differently.
60  //
61
62  // Test arrays.
63  void                  testShortArray(in unsigned long aLength, [array, size_is(aLength)] in short a,
64                                       inout unsigned long bLength, [array, size_is(bLength)] inout short b,
65                                       out unsigned long rvLength, [retval, array, size_is(rvLength)] out short rv);
66  void                  testDoubleArray(in unsigned long aLength, [array, size_is(aLength)] in double a,
67                                        inout unsigned long bLength, [array, size_is(bLength)] inout double b,
68                                        out unsigned long rvLength, [retval, array, size_is(rvLength)] out double rv);
69  void                  testStringArray(in unsigned long aLength, [array, size_is(aLength)] in string a,
70                                        inout unsigned long bLength, [array, size_is(bLength)] inout string b,
71                                        out unsigned long rvLength, [retval, array, size_is(rvLength)] out string rv);
72  void                  testWstringArray(in unsigned long aLength, [array, size_is(aLength)] in wstring a,
73                                         inout unsigned long bLength, [array, size_is(bLength)] inout wstring b,
74                                         out unsigned long rvLength, [retval, array, size_is(rvLength)] out wstring rv);
75  void                  testInterfaceArray(in unsigned long aLength, [array, size_is(aLength)] in nsIXPCTestInterfaceA a,
76                                           inout unsigned long bLength, [array, size_is(bLength)] inout nsIXPCTestInterfaceA b,
77                                           out unsigned long rvLength, [retval, array, size_is(rvLength)] out nsIXPCTestInterfaceA rv);
78
79  // uint8 array with optional length. Returns array length.
80  unsigned long         testByteArrayOptionalLength([array, size_is(aLength)] in uint8_t a, [optional] in unsigned long aLength);
81
82  // Test sized strings.
83  void                  testSizedString(in unsigned long aLength, [size_is(aLength)] in string a,
84                                        inout unsigned long bLength, [size_is(bLength)] inout string b,
85                                        out unsigned long rvLength, [retval, size_is(rvLength)] out string rv);
86  void                  testSizedWstring(in unsigned long aLength, [size_is(aLength)] in wstring a,
87                                         inout unsigned long bLength, [size_is(bLength)] inout wstring b,
88                                         out unsigned long rvLength, [retval, size_is(rvLength)] out wstring rv);
89
90  // Test iid_is.
91  void                  testInterfaceIs(in nsIIDPtr aIID, [iid_is(aIID)] in nsQIResult a,
92                                        inout nsIIDPtr bIID, [iid_is(bIID)] inout nsQIResult b,
93                                        out nsIIDPtr rvIID, [retval, iid_is(rvIID)] out nsQIResult rv);
94
95  // Test arrays of iid_is. According to khuey we don't use it for anything
96  // in mozilla-central, but calendar stuff depends on it.
97  void                  testInterfaceIsArray(in unsigned long aLength, in nsIIDPtr aIID,
98                                             [array, size_is(aLength), iid_is(aIID)] in nsQIResult a,
99                                             inout unsigned long bLength, inout nsIIDPtr bIID,
100                                             [array, size_is(bLength), iid_is(bIID)] inout nsQIResult b,
101                                             out unsigned long rvLength, out nsIIDPtr rvIID,
102                                             [retval, array, size_is(rvLength), iid_is(rvIID)] out nsQIResult rv);
103
104  // Test arrays of jsvals
105  void                  testJsvalArray(in unsigned long aLength, [array, size_is(aLength)] in jsval a,
106                                       inout unsigned long bLength, [array, size_is(bLength)] inout jsval b,
107                                       out unsigned long rvLength, [retval, array, size_is(rvLength)] out jsval rv);
108
109
110  // Test for out dipper parameters
111  void                 testOutAString(out AString o);
112
113  // Test for optional array size_is.
114  ACString             testStringArrayOptionalSize([array, size_is(aLength)] in string a, [optional] in unsigned long aLength);
115
116  // Test for omitted optional out parameter.
117  void                 testOmittedOptionalOut([optional] out nsIURI aOut);
118};
119