From 9aee619068c1700e8d64b8ffca98977c2b056c0d Mon Sep 17 00:00:00 2001 From: badcel <1218031+badcel@users.noreply.github.com> Date: Sun, 8 Aug 2021 18:14:10 +0200 Subject: [PATCH] Add Tests This adds some basic tests using GdkPixbuf which allows to run them as integration tests. Integration tests can be automatically run during continous integration on the server. - Add test for basic property reading - Add test for object disposal by garbage collector - Add test for object disposal by "Dispose" method. --- GirCore.sln | 15 +++++ .../GdkPixbuf-2.0.Tests.csproj | 15 +++++ .../MemoryManagementTest.cs | 53 ++++++++++++++++++ .../Libs/GdkPixbuf-2.0.Tests/PropertyTest.cs | 19 +++++++ Tests/Libs/GdkPixbuf-2.0.Tests/test.bmp | Bin 0 -> 750054 bytes 5 files changed, 102 insertions(+) create mode 100644 Tests/Libs/GdkPixbuf-2.0.Tests/GdkPixbuf-2.0.Tests.csproj create mode 100644 Tests/Libs/GdkPixbuf-2.0.Tests/MemoryManagementTest.cs create mode 100644 Tests/Libs/GdkPixbuf-2.0.Tests/PropertyTest.cs create mode 100644 Tests/Libs/GdkPixbuf-2.0.Tests/test.bmp diff --git a/GirCore.sln b/GirCore.sln index 16de37ecc..0aab041ac 100644 --- a/GirCore.sln +++ b/GirCore.sln @@ -83,6 +83,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DrawingArea", "Samples\Gtk3 EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextEditor", "Samples\Gtk3\TextEditor\TextEditor.csproj", "{2510B0C1-793D-4EA7-A296-F54F881C94C8}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GdkPixbuf-2.0.Tests", "Tests\Libs\GdkPixbuf-2.0.Tests\GdkPixbuf-2.0.Tests.csproj", "{61016ABA-608B-47FA-9FBD-CA17D24BAB89}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -504,6 +506,18 @@ Global {2510B0C1-793D-4EA7-A296-F54F881C94C8}.Release|x64.Build.0 = Release|Any CPU {2510B0C1-793D-4EA7-A296-F54F881C94C8}.Release|x86.ActiveCfg = Release|Any CPU {2510B0C1-793D-4EA7-A296-F54F881C94C8}.Release|x86.Build.0 = Release|Any CPU + {61016ABA-608B-47FA-9FBD-CA17D24BAB89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {61016ABA-608B-47FA-9FBD-CA17D24BAB89}.Debug|Any CPU.Build.0 = Debug|Any CPU + {61016ABA-608B-47FA-9FBD-CA17D24BAB89}.Debug|x64.ActiveCfg = Debug|Any CPU + {61016ABA-608B-47FA-9FBD-CA17D24BAB89}.Debug|x64.Build.0 = Debug|Any CPU + {61016ABA-608B-47FA-9FBD-CA17D24BAB89}.Debug|x86.ActiveCfg = Debug|Any CPU + {61016ABA-608B-47FA-9FBD-CA17D24BAB89}.Debug|x86.Build.0 = Debug|Any CPU + {61016ABA-608B-47FA-9FBD-CA17D24BAB89}.Release|Any CPU.ActiveCfg = Release|Any CPU + {61016ABA-608B-47FA-9FBD-CA17D24BAB89}.Release|Any CPU.Build.0 = Release|Any CPU + {61016ABA-608B-47FA-9FBD-CA17D24BAB89}.Release|x64.ActiveCfg = Release|Any CPU + {61016ABA-608B-47FA-9FBD-CA17D24BAB89}.Release|x64.Build.0 = Release|Any CPU + {61016ABA-608B-47FA-9FBD-CA17D24BAB89}.Release|x86.ActiveCfg = Release|Any CPU + {61016ABA-608B-47FA-9FBD-CA17D24BAB89}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution {BF7F9B0B-CB43-4161-BFAD-C6EE479FC86B} = {386AE10F-B7AC-4C97-AC5C-202D3662A868} @@ -539,5 +553,6 @@ Global {189A1440-3BFE-432E-8F43-931D1B571DCA} = {8BC11A63-D52B-40CB-9DDD-CD7C6DC21059} {F1A41389-B4AD-4D0F-8C44-918BF3A6A57F} = {79FE88D9-9545-4AE8-80AF-8E2E2E55E8A3} {2510B0C1-793D-4EA7-A296-F54F881C94C8} = {79FE88D9-9545-4AE8-80AF-8E2E2E55E8A3} + {61016ABA-608B-47FA-9FBD-CA17D24BAB89} = {46D66262-FC61-43B9-8E76-A361FA3D6C81} EndGlobalSection EndGlobal diff --git a/Tests/Libs/GdkPixbuf-2.0.Tests/GdkPixbuf-2.0.Tests.csproj b/Tests/Libs/GdkPixbuf-2.0.Tests/GdkPixbuf-2.0.Tests.csproj new file mode 100644 index 000000000..ba457085c --- /dev/null +++ b/Tests/Libs/GdkPixbuf-2.0.Tests/GdkPixbuf-2.0.Tests.csproj @@ -0,0 +1,15 @@ + + + GdkPixbuf.Tests + + + + + + + + + PreserveNewest + + + diff --git a/Tests/Libs/GdkPixbuf-2.0.Tests/MemoryManagementTest.cs b/Tests/Libs/GdkPixbuf-2.0.Tests/MemoryManagementTest.cs new file mode 100644 index 000000000..0fdbdb466 --- /dev/null +++ b/Tests/Libs/GdkPixbuf-2.0.Tests/MemoryManagementTest.cs @@ -0,0 +1,53 @@ +using System; +using FluentAssertions; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace GdkPixbuf.Tests +{ + [TestClass, TestCategory("IntegrationTest")] + public class MemoryManagementTest + { + [TestMethod] + public void TestAutomaticGObjectDisposal() + { + WeakReference weakReference = new(null); + object? strongReference = null; + + void CreateInstance(bool keepInstance) + { + var obj = Pixbuf.NewFromFile("test.bmp"); + + GObject.Native.ObjectMapper.ObjectCount.Should().Be(1); + + if(keepInstance) + strongReference = obj; + + weakReference.Target = obj; + } + + CreateInstance(keepInstance: false); + + GC.Collect(); + GC.WaitForPendingFinalizers(); + GObject.Native.ObjectMapper.ObjectCount.Should().Be(0); + weakReference.IsAlive.Should().BeFalse(); + strongReference.Should().BeNull(); + + CreateInstance(keepInstance: true); + GC.Collect(); + GC.WaitForPendingFinalizers(); + GObject.Native.ObjectMapper.ObjectCount.Should().Be(1); + weakReference.IsAlive.Should().BeTrue(); + strongReference.Should().NotBeNull(); + } + + [TestMethod] + public void TestManualGObjectDisposal() + { + var obj = Pixbuf.NewFromFile("test.bmp"); + GObject.Native.ObjectMapper.ObjectCount.Should().Be(1); + obj.Dispose(); + GObject.Native.ObjectMapper.ObjectCount.Should().Be(0); + } + } +} diff --git a/Tests/Libs/GdkPixbuf-2.0.Tests/PropertyTest.cs b/Tests/Libs/GdkPixbuf-2.0.Tests/PropertyTest.cs new file mode 100644 index 000000000..9e815842f --- /dev/null +++ b/Tests/Libs/GdkPixbuf-2.0.Tests/PropertyTest.cs @@ -0,0 +1,19 @@ +using FluentAssertions; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace GdkPixbuf.Tests +{ + [TestClass, TestCategory("IntegrationTest")] + public class PropertyTests + { + [TestMethod] + public void ReadPropertyTest() + { + var pixbuf = Pixbuf.NewFromFile("test.bmp"); + pixbuf.GetWidth().Should().Be(500); + pixbuf.GetHeight().Should().Be(500); + pixbuf.GetHasAlpha().Should().Be(false); + pixbuf.GetNChannels().Should().Be(3); + } + } +} diff --git a/Tests/Libs/GdkPixbuf-2.0.Tests/test.bmp b/Tests/Libs/GdkPixbuf-2.0.Tests/test.bmp new file mode 100644 index 0000000000000000000000000000000000000000..c599257f5d3e227071e798896fcdd4e0c7d79172 GIT binary patch literal 750054 zcmeIup%H*U3