From e8a8d32fb3cc8b1f8fc17788ab00dffff1f4a950 Mon Sep 17 00:00:00 2001 From: RMZeroFour Date: Sat, 27 Jul 2024 20:06:56 +0530 Subject: .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 --- solenv/gbuild/DotnetTest.mk | 146 +++++++++++++++++++++++++++++++++++++++ solenv/gbuild/TargetLocations.mk | 3 + solenv/gbuild/gbuild.help.txt | 1 + solenv/gbuild/gbuild.mk | 1 + 4 files changed, 151 insertions(+) create mode 100644 solenv/gbuild/DotnetTest.mk (limited to 'solenv/gbuild') 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 + \ + \ + \ + +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 >$$@,) + $$(file >>$$@,) + $$(file >>$$@,$$(DOTNET_PROPERTY_ELEMENTS)) + $$(file >>$$@,) + $$(file >>$$@,) + $$(file >>$$@,$$(DOTNET_ITEM_ELEMENTS)) + $$(file >>$$@,) + $$(file >>$$@,) + +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 := net8.0 +$$(gb_DotnetTest_$(1)_project) : DOTNET_PROPERTY_ELEMENTS += false +$$(gb_DotnetTest_$(1)_project) : DOTNET_PROPERTY_ELEMENTS += true +$$(gb_DotnetTest_$(1)_project) : DOTNET_PROPERTY_ELEMENTS += $(1) +$$(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 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 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),) + +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),) + +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 \ -- cgit