Skip to content

Commit fa97b38

Browse files
committed
Added new tests for parameterized ctors
1 parent 8a7f740 commit fa97b38

File tree

3 files changed

+51
-11
lines changed

3 files changed

+51
-11
lines changed

test/Interop/Cxx/class/Inputs/constructors.h

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -307,15 +307,15 @@ __attribute__((swift_attr("release:Release10"))) DeletedCtor {
307307

308308
struct __attribute__((swift_attr("import_reference")))
309309
__attribute__((swift_attr("retain:Retain11")))
310-
__attribute__((swift_attr("release:Release11"))) CtorWithDefaultArg {
310+
__attribute__((swift_attr("release:Release11"))) CtorWithDefaultArg { // expected-note {{'init(_:)' declared here}}
311311
public:
312312
int val = 1;
313313
CtorWithDefaultArg(int x = 2) : val(x) {}
314314
};
315315

316316
struct __attribute__((swift_attr("import_reference")))
317317
__attribute__((swift_attr("retain:Retain12"))) __attribute__((
318-
swift_attr("release:Release12"))) CtorWithDefaultAndNonDefaultArg {
318+
swift_attr("release:Release12"))) CtorWithDefaultAndNonDefaultArg { // expected-note {{'init(_:_:)' declared here}}
319319
public:
320320
int val;
321321
CtorWithDefaultAndNonDefaultArg(int x, int y = 42) : val(x + y) {}
@@ -337,6 +337,17 @@ __attribute__((swift_attr("release:Release14"))) ParameterizedCtor {
337337
int val = 1;
338338
ParameterizedCtor(int x) : val(x) {}
339339
};
340+
341+
struct __attribute__((swift_attr("import_reference")))
342+
__attribute__((swift_attr("retain:Retain16")))
343+
__attribute__((swift_attr("release:Release16"))) ParameterizedCtor2 {
344+
public:
345+
int val1 = 1;
346+
int val2 = 1;
347+
ParameterizedCtor2() {};
348+
ParameterizedCtor2(int x) : val1(x) {}
349+
ParameterizedCtor2(int x, int y) : val1(x), val2(y) {}
350+
};
340351
} // namespace SwiftInitSynthesisForCXXRefTypes
341352

342353
void Retain1(SwiftInitSynthesisForCXXRefTypes::CompilerGeneratedDefaultCtor
@@ -397,5 +408,9 @@ void Retain15(
397408
SwiftInitSynthesisForCXXRefTypes::UserProvidedStaticFactory *_Nonnull v) {};
398409
void Release15(
399410
SwiftInitSynthesisForCXXRefTypes::UserProvidedStaticFactory *_Nonnull v) {};
411+
void Retain16(
412+
SwiftInitSynthesisForCXXRefTypes::ParameterizedCtor2 *_Nonnull v) {};
413+
void Release16(
414+
SwiftInitSynthesisForCXXRefTypes::ParameterizedCtor2 *_Nonnull v) {};
400415

401416
#endif // TEST_INTEROP_CXX_CLASS_INPUTS_CONSTRUCTORS_H

test/Interop/Cxx/class/constructors-diagnostics.swift

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,6 @@ let _ = SwiftInitSynthesisForCXXRefTypes.PrivateCtor() // expected-error {{'Swi
1616
let _ = SwiftInitSynthesisForCXXRefTypes.ProtectedCtor() // expected-error {{'SwiftInitSynthesisForCXXRefTypes.ProtectedCtor' cannot be constructed because it has no accessible initializers}}
1717
let _ = SwiftInitSynthesisForCXXRefTypes.DeletedCtor() // expected-error {{'SwiftInitSynthesisForCXXRefTypes.DeletedCtor' cannot be constructed because it has no accessible initializers}}
1818

19-
let _ = SwiftInitSynthesisForCXXRefTypes.CtorWithDefaultArg() // expected-error {{'SwiftInitSynthesisForCXXRefTypes.CtorWithDefaultArg' cannot be constructed because it has no accessible initializers}}
20-
let _ = SwiftInitSynthesisForCXXRefTypes.CtorWithDefaultAndNonDefaultArg() // expected-error {{'SwiftInitSynthesisForCXXRefTypes.CtorWithDefaultAndNonDefaultArg' cannot be constructed because it has no accessible initializers}}
21-
22-
let _ = SwiftInitSynthesisForCXXRefTypes.DefaulltAndNonDefaultCtors()
23-
// TODO: change the error message when we start supporting parameterised ctors
24-
let _ = SwiftInitSynthesisForCXXRefTypes.DefaulltAndNonDefaultCtors(2) // expected-error {{argument passed to call that takes no arguments}}
25-
26-
// TODO: fix the error message in this case
27-
let _ = SwiftInitSynthesisForCXXRefTypes.ParameterizedCtor() // expected-error {{missing argument for parameter #1 in call}}
19+
// Todo: add support for default args in ctors and fix this error
20+
let _ = SwiftInitSynthesisForCXXRefTypes.CtorWithDefaultArg() // expected-error {{missing argument for parameter #1 in call}}
21+
let _ = SwiftInitSynthesisForCXXRefTypes.CtorWithDefaultAndNonDefaultArg() // expected-error {{missing arguments for parameters #1, #2 in call}}

test/Interop/Cxx/class/constructors-executable.swift

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,37 @@ CxxConstructorTestSuite.test("SynthesizeAndImportStaticFactoryAsInitializer") {
118118
expectEqual(x7.val, 2)
119119
x7.val = 3
120120
expectEqual(x7.val, 3)
121+
122+
let x8 = SwiftInitSynthesisForCXXRefTypes.ParameterizedCtor2()
123+
expectEqual(x8.val1, 1)
124+
expectEqual(x8.val2, 1)
125+
x8.val1 = 2
126+
expectEqual(x8.val1, 2)
127+
expectEqual(x8.val2, 1)
128+
129+
let y8 = SwiftInitSynthesisForCXXRefTypes.ParameterizedCtor2(2)
130+
expectEqual(y8.val1, 2)
131+
expectEqual(y8.val2, 1)
132+
y8.val1 = 3
133+
expectEqual(y8.val1, 3)
134+
expectEqual(y8.val2, 1)
135+
136+
let z8 = SwiftInitSynthesisForCXXRefTypes.ParameterizedCtor2(2, 3)
137+
expectEqual(z8.val1, 2)
138+
expectEqual(z8.val2, 3)
139+
z8.val1 = 4
140+
z8.val2 = 5
141+
expectEqual(z8.val1, 4)
142+
expectEqual(z8.val2, 5)
143+
144+
let x9 = SwiftInitSynthesisForCXXRefTypes.DefaulltAndNonDefaultCtors()
145+
expectEqual(x9.val, 1)
146+
x9.val = 2
147+
expectEqual(x9.val, 2)
148+
let y9 = SwiftInitSynthesisForCXXRefTypes.DefaulltAndNonDefaultCtors(3)
149+
expectEqual(y9.val, 3)
150+
y9.val = 4
151+
expectEqual(y9.val, 4)
121152
}
122153

123154
runAllTests()

0 commit comments

Comments
 (0)