csharp: fix some unit tests that rely on garbage collection

Summary:
Fix unit tests `TestEoInherit.inherited_collected` and
`TestFunctionPointers.set_callback_inherited_called_from_c`.

Iterate through garbage collection and EFL main loop more times to ensure that
allocated objects are really collected.

Also expand the test utility method `CollectAndIterate` to receive the number of
times to call the whole cleaning iteration process (not only the garbage
collection).

Test Plan: `meson test`

Reviewers: lauromoura

Reviewed By: lauromoura

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D9271
This commit is contained in:
Vitor Sousa 2019-07-12 17:09:41 -03:00
parent b799ba1a10
commit c3c81263fd
3 changed files with 10 additions and 9 deletions

View File

@ -120,7 +120,7 @@ class TestEoInherit
public static void inherited_collected()
{
var wref = CreateCollectableInherited();
Test.CollectAndIterate();
Test.CollectAndIterate(300, 10);
Test.AssertNull(wref.Target);
}

View File

@ -171,9 +171,7 @@ class TestFunctionPointers
// Should release the handle to the wrapper allocated when calling set_callback from C.
obj.SetCallback(twice);
GC.Collect();
GC.WaitForPendingFinalizers();
Efl.App.AppMain.Iterate();
Test.CollectAndIterate(300, 10);
Test.Assert(obj.set_called, "set_callback override must have been called");
Test.Assert(!obj.invoke_called, "invoke_callback must not have been called");

View File

@ -200,14 +200,17 @@ public static class Test
/// <summary>Runs a number of garbage collections and iterate the main loop.
/// The iteration is needed to make sure objects collected in the GC thread
/// are efl_unref'd in the main thread.</summary>
public static void CollectAndIterate(int iterations=1000)
public static void CollectAndIterate(int iterations=1000, int global_iterations=1)
{
for (int i = 0; i < iterations; i++)
for (int g = 0; g < global_iterations; ++g)
{
System.GC.Collect();
for (int i = 0; i < iterations; ++i)
{
System.GC.Collect();
}
System.GC.WaitForPendingFinalizers();
Efl.App.AppMain.Iterate();
}
System.GC.WaitForPendingFinalizers();
Efl.App.AppMain.Iterate();
}
}