Skip to content

Commit 499b4aa

Browse files
committed
Fix all memory leaks in tests
Signed-off-by: Dimitar Dobrev <[email protected]>
1 parent 653f4cc commit 499b4aa

File tree

5 files changed

+439
-302
lines changed

5 files changed

+439
-302
lines changed

tests/CLI/CLI.Tests.cs

+12-6
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,26 @@ public class CLITests : GeneratorTestFixture
88
public void TestTypes()
99
{
1010
// Attributed types
11-
var sum = new Types().AttributedSum(3, 4);
12-
Assert.That(sum, Is.EqualTo(7));
11+
using (var types = new Types())
12+
{
13+
var sum = types.AttributedSum(3, 4);
14+
Assert.That(sum, Is.EqualTo(7));
15+
}
1316
}
1417

1518
[Test]
1619
public void TestStdString()
1720
{
18-
Assert.AreEqual("test_test", new Date(0, 0, 0).TestStdString("test"));
21+
using (var date = new Date(0, 0, 0))
22+
{
23+
Assert.AreEqual("test_test", date.TestStdString("test"));
24+
}
1925
}
2026

2127
[Test]
2228
public void GetEmployeeNameFromOrgTest()
2329
{
24-
using (EmployeeOrg org = new EmployeeOrg())
30+
using (var org = new EmployeeOrg())
2531
{
2632
Assert.AreEqual("Employee", org.Employee.Name);
2733
}
@@ -30,7 +36,7 @@ public void GetEmployeeNameFromOrgTest()
3036
[Test]
3137
public void TestConsumerOfEnumNestedInClass()
3238
{
33-
using (NestedEnumConsumer consumer = new NestedEnumConsumer())
39+
using (var consumer = new NestedEnumConsumer())
3440
{
3541
Assert.AreEqual(ClassWithNestedEnum.NestedEnum.E1, consumer.GetPassedEnum(ClassWithNestedEnum.NestedEnum.E1));
3642
}
@@ -39,7 +45,7 @@ public void TestConsumerOfEnumNestedInClass()
3945
[Test]
4046
public void TestChangePassedMappedTypeNonConstRefParam()
4147
{
42-
using (TestMappedTypeNonConstRefParamConsumer consumer = new TestMappedTypeNonConstRefParamConsumer())
48+
using (var consumer = new TestMappedTypeNonConstRefParamConsumer())
4349
{
4450
string val = "Initial";
4551
consumer.ChangePassedMappedTypeNonConstRefParam(ref val);

tests/CSharp/CSharp.Tests.cs

+135-89
Original file line numberDiff line numberDiff line change
@@ -113,18 +113,24 @@ public void TestReturnCharPointer()
113113
[Test]
114114
public void TestIndexer()
115115
{
116-
var foo = new Foo();
117-
118-
Assert.That(foo[0], Is.EqualTo(50));
119-
foo[0] = 250;
120-
Assert.That(foo[0], Is.EqualTo(250));
116+
using (var foo = new Foo())
117+
{
118+
Assert.That(foo[0], Is.EqualTo(50));
119+
foo[0] = 250;
120+
Assert.That(foo[0], Is.EqualTo(250));
121121

122-
Assert.That(foo[(uint) 0], Is.EqualTo(15));
122+
Assert.That(foo[(uint) 0], Is.EqualTo(15));
123+
}
123124

124-
var bar = new Bar();
125-
Assert.That(bar[0].A, Is.EqualTo(10));
126-
bar[0] = new Foo { A = 25 };
127-
Assert.That(bar[0].A, Is.EqualTo(25));
125+
using (var bar = new Bar())
126+
{
127+
Assert.That(bar[0].A, Is.EqualTo(10));
128+
using (Foo foo = new Foo { A = 25 })
129+
{
130+
bar[0] = foo;
131+
Assert.That(bar[0].A, Is.EqualTo(25));
132+
}
133+
}
128134
}
129135

130136
[Test]
@@ -143,8 +149,11 @@ public void TestMultipleInheritance()
143149
var bar = (IBar) baz;
144150
Assert.That(bar.Method, Is.EqualTo(2));
145151
Assert.That(baz[0], Is.EqualTo(50));
146-
bar[0] = new Foo { A = 1000 };
147-
Assert.That(bar[0].A, Is.EqualTo(1000));
152+
using (Foo foo = new Foo { A = 1000 })
153+
{
154+
bar[0] = foo;
155+
Assert.That(bar[0].A, Is.EqualTo(1000));
156+
}
148157
Assert.That(baz.FarAwayFunc, Is.EqualTo(20));
149158
Assert.That(baz.TakesQux(baz), Is.EqualTo(20));
150159
Assert.That(baz.ReturnQux().FarAwayFunc, Is.EqualTo(20));
@@ -160,12 +169,14 @@ public void TestMultipleInheritance()
160169
[Test]
161170
public void TestProperties()
162171
{
163-
var proprietor = new Proprietor();
164-
Assert.That(proprietor.Parent, Is.EqualTo(0));
165-
proprietor.Value = 20;
166-
Assert.That(proprietor.Value, Is.EqualTo(20));
167-
proprietor.Prop = 50;
168-
Assert.That(proprietor.Prop, Is.EqualTo(50));
172+
using (var proprietor = new Proprietor())
173+
{
174+
Assert.That(proprietor.Parent, Is.EqualTo(0));
175+
proprietor.Value = 20;
176+
Assert.That(proprietor.Value, Is.EqualTo(20));
177+
proprietor.Prop = 50;
178+
Assert.That(proprietor.Prop, Is.EqualTo(50));
179+
}
169180
using (var qux = new Qux())
170181
{
171182
using (var p = new P((IQux) qux) { Value = 20 })
@@ -200,21 +211,25 @@ public void TestDestructors()
200211
CSharp.TestDestructors.InitMarker();
201212
Assert.AreEqual(0, CSharp.TestDestructors.Marker);
202213

203-
var dtors = new TestDestructors();
204-
Assert.AreEqual(0xf00d, CSharp.TestDestructors.Marker);
205-
dtors.Dispose();
214+
using (var dtors = new TestDestructors())
215+
{
216+
Assert.AreEqual(0xf00d, CSharp.TestDestructors.Marker);
217+
dtors.Dispose();
218+
}
206219
Assert.AreEqual(0xcafe, CSharp.TestDestructors.Marker);
207220
}
208221

209222
[Test]
210223
public unsafe void TestArrayOfPointersToPrimitives()
211224
{
212-
var bar = new Bar();
213-
var array = new IntPtr[1];
214-
int i = 5;
215-
array[0] = new IntPtr(&i);
216-
bar.ArrayOfPrimitivePointers = array;
217-
Assert.That(i, Is.EqualTo(*(int*) bar.ArrayOfPrimitivePointers[0]));
225+
using (var bar = new Bar())
226+
{
227+
var array = new IntPtr[1];
228+
int i = 5;
229+
array[0] = new IntPtr(&i);
230+
bar.ArrayOfPrimitivePointers = array;
231+
Assert.That(i, Is.EqualTo(*(int*) bar.ArrayOfPrimitivePointers[0]));
232+
}
218233
}
219234

220235
[Test]
@@ -229,9 +244,11 @@ public void TestCopyConstructorValue()
229244
[Test]
230245
public void TestPropertiesConflictingWithMethod()
231246
{
232-
var p = new P((IQux) new Qux()) { Test = true };
233-
Assert.That(p.Test, Is.True);
234-
p.GetTest();
247+
using (var p = new P((IQux) new Qux()) { Test = true })
248+
{
249+
Assert.That(p.Test, Is.True);
250+
p.GetTest();
251+
}
235252
}
236253

237254
[Test]
@@ -310,43 +327,51 @@ public void TestQFlags()
310327
[Test]
311328
public void TestCopyCtor()
312329
{
313-
Qux q1 = new Qux();
314-
for (int i = 0; i < q1.Array.Length; i++)
330+
using (Qux q1 = new Qux())
315331
{
316-
q1.Array[i] = i;
317-
}
318-
Qux q2 = new Qux(q1);
319-
for (int i = 0; i < q2.Array.Length; i++)
320-
{
321-
Assert.AreEqual(q1.Array[i], q2.Array[i]);
332+
for (int i = 0; i < q1.Array.Length; i++)
333+
{
334+
q1.Array[i] = i;
335+
}
336+
using (Qux q2 = new Qux(q1))
337+
{
338+
for (int i = 0; i < q2.Array.Length; i++)
339+
{
340+
Assert.AreEqual(q1.Array[i], q2.Array[i]);
341+
}
342+
}
322343
}
323344
}
324345

325346
[Test]
326347
public void TestBooleanArray()
327348
{
328-
Foo foo = new Foo { A = 10 };
329-
var new_values = new bool[5];
330-
for(int i = 0; i < new_values.Length; ++i)
349+
using (Foo foo = new Foo { A = 10 })
331350
{
332-
new_values[i] = i % 2 == 0;
351+
var new_values = new bool[5];
352+
for (int i = 0; i < new_values.Length; ++i)
353+
{
354+
new_values[i] = i % 2 == 0;
355+
}
356+
foo.Btest = new_values;
357+
Assert.AreEqual(true, foo.Btest[0]);
358+
Assert.AreEqual(false, foo.Btest[1]);
359+
Assert.AreEqual(true, foo.Btest[2]);
360+
Assert.AreEqual(false, foo.Btest[3]);
361+
Assert.AreEqual(true, foo.Btest[4]);
333362
}
334-
foo.Btest = new_values;
335-
Assert.AreEqual(true, foo.Btest[0]);
336-
Assert.AreEqual(false, foo.Btest[1]);
337-
Assert.AreEqual(true, foo.Btest[2]);
338-
Assert.AreEqual(false, foo.Btest[3]);
339-
Assert.AreEqual(true, foo.Btest[4]);
340363
}
341364

342365

343366
[Test]
344367
public void TestImplicitCtor()
345368
{
346-
Foo foo = new Foo { A = 10 };
347-
using (MethodsWithDefaultValues m = foo)
369+
using (Foo foo = new Foo { A = 10 })
348370
{
349-
Assert.AreEqual(foo.A, m.A);
371+
using (MethodsWithDefaultValues m = foo)
372+
{
373+
Assert.AreEqual(foo.A, m.A);
374+
}
350375
}
351376
using (MethodsWithDefaultValues m1 = 5)
352377
{
@@ -431,9 +456,11 @@ public void TestNativeToManagedMapWithOwnObjects()
431456
[Test]
432457
public void TestCallingVirtualDtor()
433458
{
434-
var callDtorVirtually = new CallDtorVirtually();
435-
var hasVirtualDtor1 = CallDtorVirtually.GetHasVirtualDtor1(callDtorVirtually);
436-
hasVirtualDtor1.Dispose();
459+
using (var callDtorVirtually = new CallDtorVirtually())
460+
{
461+
var hasVirtualDtor1 = CallDtorVirtually.GetHasVirtualDtor1(callDtorVirtually);
462+
hasVirtualDtor1.Dispose();
463+
}
437464
Assert.That(CallDtorVirtually.Destroyed, Is.True);
438465
}
439466

@@ -451,43 +478,46 @@ public void TestParamTypeToInterfacePass()
451478
Assert.AreEqual(dervClass.M, 2);
452479
dervClass = new TestParamToInterfacePass(dervClass + baseInterface);
453480
Assert.AreEqual(dervClass.M, 2);
481+
baseClass.Dispose();
454482
}
455-
483+
456484
[Test]
457485
public unsafe void TestMultiOverLoadPtrToRef()
458486
{
459487
var r = 0;
460488
MultiOverloadPtrToRef m = &r;
461489
m.Dispose();
462-
var obj = new MultiOverloadPtrToRef(ref r);
463-
var p = obj.ReturnPrimTypePtr();
464-
Assert.AreEqual(0, p[0]);
465-
Assert.AreEqual(0, p[1]);
466-
Assert.AreEqual(0, p[2]);
490+
using (var obj = new MultiOverloadPtrToRef(ref r))
491+
{
492+
var p = obj.ReturnPrimTypePtr();
493+
Assert.AreEqual(0, p[0]);
494+
Assert.AreEqual(0, p[1]);
495+
Assert.AreEqual(0, p[2]);
467496

468-
obj.TakePrimTypePtr(ref *p);
469-
Assert.AreEqual(100, p[0]);
470-
Assert.AreEqual(200, p[1]);
471-
Assert.AreEqual(300, p[2]);
497+
obj.TakePrimTypePtr(ref *p);
498+
Assert.AreEqual(100, p[0]);
499+
Assert.AreEqual(200, p[1]);
500+
Assert.AreEqual(300, p[2]);
472501

473-
int[] array = { 1, 2, 3 };
474-
fixed (int* p1 = array)
475-
{
476-
obj.TakePrimTypePtr(ref *p1);
477-
Assert.AreEqual(100, p1[0]);
478-
Assert.AreEqual(200, p1[1]);
479-
Assert.AreEqual(300, p1[2]);
480-
}
502+
int[] array = { 1, 2, 3 };
503+
fixed (int* p1 = array)
504+
{
505+
obj.TakePrimTypePtr(ref *p1);
506+
Assert.AreEqual(100, p1[0]);
507+
Assert.AreEqual(200, p1[1]);
508+
Assert.AreEqual(300, p1[2]);
509+
}
481510

482-
Assert.AreEqual(100, array[0]);
483-
Assert.AreEqual(200, array[1]);
484-
Assert.AreEqual(300, array[2]);
511+
Assert.AreEqual(100, array[0]);
512+
Assert.AreEqual(200, array[1]);
513+
Assert.AreEqual(300, array[2]);
485514

486-
float pThree = 0;
487-
var refInt = 0;
488-
obj.FuncPrimitivePtrToRef(ref refInt, null, ref pThree);
489-
obj.FuncPrimitivePtrToRefWithDefVal(ref refInt, null, null, ref refInt);
490-
obj.FuncPrimitivePtrToRefWithMultiOverload(ref refInt, null, null, ref refInt);
515+
float pThree = 0;
516+
var refInt = 0;
517+
obj.FuncPrimitivePtrToRef(ref refInt, null, ref pThree);
518+
obj.FuncPrimitivePtrToRefWithDefVal(ref refInt, null, null, ref refInt);
519+
obj.FuncPrimitivePtrToRefWithMultiOverload(ref refInt, null, null, ref refInt);
520+
}
491521
}
492522

493523
[Test]
@@ -506,23 +536,37 @@ public void TestFixedArrayRefType()
506536
Assert.AreEqual(7, retFoos[2].A);
507537
Assert.AreEqual(8, retFoos[3].A);
508538

539+
foreach (Foo foo in foos)
540+
{
541+
foo.Dispose();
542+
}
543+
509544
Foo[] foosMore = new Foo[2];
510545
foosMore[0] = new Foo();
511546
foosMore[1] = new Foo();
512547
var ex = Assert.Throws<ArgumentOutOfRangeException>(() => bar.Foos = foosMore);
513548
Assert.AreEqual("value", ex.ParamName);
514549
Assert.AreEqual("The dimensions of the provided array don't match the required size." + Environment.NewLine + "Parameter name: value", ex.Message);
550+
551+
foreach (Foo foo in foosMore)
552+
{
553+
foo.Dispose();
554+
}
515555
}
516556

517557
[Test]
518558
public void TestOutTypeInterfacePassTry()
519559
{
520-
var interfaceClassObj = new TestParamToInterfacePassBaseTwo();
521-
ITestParamToInterfacePassBaseTwo interfaceType = interfaceClassObj;
522-
var obj = new TestOutTypeInterfaces();
523-
obj.FuncTryInterfaceTypeOut(out interfaceType);
524-
ITestParamToInterfacePassBaseTwo interfaceTypePtr;
525-
obj.FuncTryInterfaceTypePtrOut(out interfaceTypePtr);
560+
using (var interfaceClassObj = new TestParamToInterfacePassBaseTwo())
561+
{
562+
ITestParamToInterfacePassBaseTwo interfaceType = interfaceClassObj;
563+
using (var obj = new TestOutTypeInterfaces())
564+
{
565+
obj.FuncTryInterfaceTypeOut(out interfaceType);
566+
ITestParamToInterfacePassBaseTwo interfaceTypePtr;
567+
obj.FuncTryInterfaceTypePtrOut(out interfaceTypePtr);
568+
}
569+
}
526570
}
527571

528572
[Test]
@@ -1030,9 +1074,11 @@ public void TestGenerationOfIncompleteClasses()
10301074
[Test]
10311075
public void TestForwardDeclaredStruct()
10321076
{
1033-
var forwardDeclaredStruct = CSharp.CSharp.CreateForwardDeclaredStruct(10);
1034-
var i = CSharp.CSharp.UseForwardDeclaredStruct(forwardDeclaredStruct);
1035-
Assert.AreEqual(forwardDeclaredStruct.I, i);
1077+
using (var forwardDeclaredStruct = CSharp.CSharp.CreateForwardDeclaredStruct(10))
1078+
{
1079+
var i = CSharp.CSharp.UseForwardDeclaredStruct(forwardDeclaredStruct);
1080+
Assert.AreEqual(forwardDeclaredStruct.I, i);
1081+
}
10361082
}
10371083

10381084
[Test]

0 commit comments

Comments
 (0)