summaryrefslogtreecommitdiff
path: root/solenv/gbuild
diff options
context:
space:
mode:
authorRMZeroFour <ritobroto04@gmail.com>2024-07-27 20:06:56 +0530
committerHossein <hossein@libreoffice.org>2024-08-03 12:07:11 +0200
commite8a8d32fb3cc8b1f8fc17788ab00dffff1f4a950 (patch)
tree60429f41493b3481d1b28a443cdd12309436185d /solenv/gbuild
parenteca841476386bc78639b24c42e5e95ff201fd4a4 (diff)
.NET Bindings: Add DotnetTest class to gbuild
This commit adds the DotnetTest gbuild class to build a unit test suite using the .NET SDK and the NUnit testing framework. Also adds a DotnetTest target for the net_ure module, with unit tests for the Any type, as well as some minor changes to the Any type that came about when writing the test cases. Change-Id: Idbc08ac8f0736dd7355092dd1e69a5f1b4137c4c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/168956 Tested-by: Jenkins Reviewed-by: Hossein <hossein@libreoffice.org>
Diffstat (limited to 'solenv/gbuild')
-rw-r--r--solenv/gbuild/DotnetTest.mk146
-rw-r--r--solenv/gbuild/TargetLocations.mk3
-rw-r--r--solenv/gbuild/gbuild.help.txt1
-rw-r--r--solenv/gbuild/gbuild.mk1
4 files changed, 151 insertions, 0 deletions
diff --git a/solenv/gbuild/DotnetTest.mk b/solenv/gbuild/DotnetTest.mk
new file mode 100644
index 000000000000..c51487cecf5c
--- /dev/null
+++ b/solenv/gbuild/DotnetTest.mk
@@ -0,0 +1,146 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+###########################
+# DotnetTest Target Class #
+###########################
+
+####### Constant Strings #########
+
+gb_DotnetTest_CS := cs
+gb_DotnetTest_FS := fs
+gb_DotnetTest_VB := vb
+
+define gb_DotnetTest__TEST_NUGETS
+<PackageReference Include="NUnit" Version="4.1.0" /> \
+<PackageReference Include="NUnit3TestAdapter" Version="4.5.0" /> \
+<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.10.0" /> \
+
+endef
+
+####### Build and Clean Targets #########
+
+# Template for a target to generate the project file for a DotnetTest
+define gb_DotnetTest__project_target
+$$(gb_DotnetTest_$(1)_project) :
+ $$(shell mkdir -p $$(dir $$@))
+ $$(file >$$@,<Project Sdk="Microsoft.NET.Sdk">)
+ $$(file >>$$@,<PropertyGroup>)
+ $$(file >>$$@,$$(DOTNET_PROPERTY_ELEMENTS))
+ $$(file >>$$@,</PropertyGroup>)
+ $$(file >>$$@,<ItemGroup>)
+ $$(file >>$$@,$$(DOTNET_ITEM_ELEMENTS))
+ $$(file >>$$@,</ItemGroup>)
+ $$(file >>$$@,</Project>)
+
+endef
+
+# Template for a target to build and run a DotnetTest
+define gb_DotnetTest__build_target
+$$(call gb_DotnetTest_get_target,$(1)) : $$(gb_DotnetTest_$(1)_project)
+ $$(call gb_Output_announce,$(1),$(true),NET,4)
+ $$(call gb_Trace_StartRange,$(1),NET)
+ $$(call gb_Helper_abbreviate_dirs,\
+ $$(call gb_Helper_print_on_error,\
+ "$$(DOTNET)" test $$< $$(DOTNET_BUILD_FLAGS) -o $$(dir $$@),\
+ $$(gb_DotnetTest_workdir)/$(1)/log))
+ $$(call gb_Trace_EndRange,$(1),NET)
+
+endef
+
+# Template for a target to clean a DotnetTest
+define gb_DotnetTest__clean_target
+$$(call gb_DotnetTest_get_clean_target,$(1)) :
+ $$(call gb_Output_announce,$(1),$(false),NET,4)
+ $$(call gb_Helper_abbreviate_dirs,\
+ rm -rf $$(gb_DotnetTest_$(1)_project))
+
+endef
+
+####### Test Target Constructor #########
+
+# Generates one test project for the given language, instantiating
+# the project file, build/run and clean targets from above templates
+# call gb_DotnetTest_DotnetTest,targetname,language
+define gb_DotnetTest_DotnetTest
+gb_DotnetTest_$(1)_language := $(2)
+gb_DotnetTest_$(1)_project := $(gb_DotnetTest_workdir)/$(1)/$(1).$(2)proj
+
+$$(gb_DotnetTest_$(1)_project) : DOTNET_PROPERTY_ELEMENTS := <TargetFramework>net8.0</TargetFramework>
+$$(gb_DotnetTest_$(1)_project) : DOTNET_PROPERTY_ELEMENTS += <IsPackable>false</IsPackable>
+$$(gb_DotnetTest_$(1)_project) : DOTNET_PROPERTY_ELEMENTS += <IsTestProject>true</IsTestProject>
+$$(gb_DotnetTest_$(1)_project) : DOTNET_PROPERTY_ELEMENTS += <AssemblyName>$(1)</AssemblyName>
+$$(gb_DotnetTest_$(1)_project) : DOTNET_ITEM_ELEMENTS := $(gb_DotnetTest__TEST_NUGETS)
+$$(eval $$(call gb_DotnetTest__project_target,$(1)))
+
+$$(call gb_DotnetTest_get_target,$(1)) : DOTNET_BUILD_FLAGS := $(if $(ENABLE_DEBUG),-c Debug,-c Release)
+.PHONY : $$(call gb_DotnetTest_get_target,$(1))
+$$(eval $$(call gb_DotnetTest__build_target,$(1)))
+
+.PHONY : $$(call gb_DotnetTest_get_clean_target,$(1))
+$$(eval $$(call gb_DotnetTest__clean_target,$(1)))
+
+$$(eval $$(call gb_Module_register_target, \
+ $(call gb_DotnetTest_get_target,$(1)), \
+ $(call gb_DotnetTest_get_clean_target,$(1))))
+$(call gb_Helper_make_userfriendly_targets,$(1),DotnetTest)
+
+endef
+
+####### Target Property Setters #########
+
+# Add flags used for compilation
+# call gb_DotnetTest_add_build_flags,target,flags
+define gb_DotnetTest_add_build_flags
+$(call gb_DotnetTest_get_target,$(1)) : DOTNET_BUILD_FLAGS += $(2)
+
+endef
+
+# Add <PropertyGroup> elements to the project file
+# call gb_DotnetTest_add_properties,target,properties
+define gb_DotnetTest_add_properties
+$(gb_DotnetTest_$(1)_project) : DOTNET_PROPERTY_ELEMENTS += $(2)
+
+endef
+
+# Add <ItemGroup> elements to the project file
+# call gb_DotnetTest_add_items,target,items
+define gb_DotnetTest_add_items
+$(gb_DotnetTest_$(1)_project) : DOTNET_ITEM_ELEMENTS += $(2)
+
+endef
+
+# Add one source file to the project file
+# This adds it to the project, and makes it a build dependency
+# so the test is rebuilt if the source changes
+# call gb_DotnetTest_add_source,target,source
+define gb_DotnetTest_add_source
+$(gb_DotnetTest_$(1)_project) : $(SRCDIR)/$(2).$(gb_DotnetTest_$(1)_language)
+$(call gb_DotnetTest_add_items,$(1),<Compile Include="$(SRCDIR)/$(2).$(gb_DotnetTest_$(1)_language)"/>)
+
+endef
+
+# Add source files to the project file
+# This adds them to the project, and makes it them build dependency
+# so the test is rebuilt if the sources change
+# call gb_DotnetTest_add_sources,target,sources
+define gb_DotnetTest_add_sources
+$(foreach source,$(2),$(call gb_DotnetTest_add_source,$(1),$(source)))
+
+endef
+
+# Link to a DotnetLibrary target
+# call gb_DotnetTest_link_library,target,library
+define gb_DotnetTest_link_library
+$(gb_DotnetTest_$(1)_project) : $(call gb_DotnetLibrary_get_target,$(2))
+$(call gb_DotnetTest_add_items,$(1),<ProjectReference Include="$(gb_DotnetLibrary_$(2)_project)"/>)
+
+endef
+
+# vim: set noet sw=4 ts=4:
diff --git a/solenv/gbuild/TargetLocations.mk b/solenv/gbuild/TargetLocations.mk
index edfd2459cd62..9b950eb3f94e 100644
--- a/solenv/gbuild/TargetLocations.mk
+++ b/solenv/gbuild/TargetLocations.mk
@@ -65,6 +65,8 @@ gb_CxxObject_get_target = $(WORKDIR)/CxxObject/$(1).o
gb_CxxObject_get_dwo_target = $(WORKDIR)/CxxObject/$(1).dwo
gb_DotnetLibrary_get_target = $(WORKDIR)/DotnetLibrary/$(1)/$(1).dll
gb_DotnetLibrary_workdir = $(WORKDIR)/DotnetLibrary
+gb_DotnetTest_get_target = $(WORKDIR)/DotnetTest/$(1)/done
+gb_DotnetTest_workdir = $(WORKDIR)/DotnetTest
gb_GenCxxObject_get_target = $(WORKDIR)/GenCxxObject/$(1).o
gb_GenCxxObject_get_dwo_target = $(WORKDIR)/GenCxxObject/$(1).dwo
gb_GenAsmObject_get_target = $(WORKDIR)/GenAsmObject/$(1).o
@@ -276,6 +278,7 @@ $(eval $(call gb_Helper_make_clean_targets,\
DescriptionTranslateTarget \
Dictionary \
DotnetLibrary \
+ DotnetTest \
Executable \
ExternalPackage \
Extension \
diff --git a/solenv/gbuild/gbuild.help.txt b/solenv/gbuild/gbuild.help.txt
index 7b66d154b73a..640abe863fb3 100644
--- a/solenv/gbuild/gbuild.help.txt
+++ b/solenv/gbuild/gbuild.help.txt
@@ -83,6 +83,7 @@ AVAILABLE TARGETS
o CustomTarget
o Dictionary
o DotnetLibrary
+ o DotnetTest
o Executable
o Extension
o ExternalPackage
diff --git a/solenv/gbuild/gbuild.mk b/solenv/gbuild/gbuild.mk
index 2a2f89cf8f45..b3ae841c1c15 100644
--- a/solenv/gbuild/gbuild.mk
+++ b/solenv/gbuild/gbuild.mk
@@ -331,6 +331,7 @@ include $(foreach class, \
CliNativeLibrary \
CliUnoApi \
DotnetLibrary \
+ DotnetTest \
Zip \
AllLangPackage \
Configuration \