Makefile.in                                                    |    8 -
 RepositoryModule_host.mk                                       |    2 
 solenv/gbuild/Module.mk                                        |   41 ++++++
 solenv/gbuild/Postprocess.mk                                   |    1 
 solenv/gbuild/TargetLocations.mk                               |    1 
 solenv/gbuild/extensions/post_SpeedUpTargets.mk                |   14 +-
 solenv/gbuild/gbuild.help.txt                                  |    1 
 sw/CppunitTest_sw_odffeatures.mk                               |   60 
++++++++++
 sw/Module_sw.mk                                                |    5 
 sw/qa/extras/odfimport/data/feature_image_jpg.odt              |binary
 sw/qa/extras/odfimport/data/feature_table.odt                  |binary
 sw/qa/extras/odfimport/data/feature_table_merged-cells.odt     |binary
 sw/qa/extras/odfimport/data/feature_table_merged-cells_all.odt |binary
 sw/qa/extras/odfimport/data/feature_table_text.odt             |binary
 sw/qa/extras/odfimport/data/feature_text.odt                   |binary
 sw/qa/extras/odfimport/data/feature_text_background-color.odt  |binary
 sw/qa/extras/odfimport/data/feature_text_bold.odt              |binary
 sw/qa/extras/odfimport/data/feature_text_italic.odt            |binary
 sw/qa/extras/odfimport/odffeatures.cxx                         |   38 ++++++
 19 files changed, 158 insertions(+), 13 deletions(-)

New commits:
commit 23118ce68a151232e542051d263d195b21d0d0e8
Author:     Thorsten Behrens <thorsten.behr...@allotropia.de>
AuthorDate: Sun Sep 11 12:21:22 2022 +0200
Commit:     Thorsten Behrens <thorsten.behr...@allotropia.de>
CommitDate: Sun Sep 11 21:32:07 2022 +0200

    [COVER] add first set of ODF feature test files
    
    For providing coverage data of features in the LibreOffice code base,
    here's a set of files with orthogonal, high-level ODF features like
    bold & italic text, an image, a table in several variants etc.
    
    Use `make coverage` or `make sw.coverage` to generate coverage data
    for the entire code base, or subsets thereof.
    
    Change-Id: If27f720e8728788c421e16a3abbc1cf39521a2fd
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139765
    Tested-by: Thorsten Behrens <thorsten.behr...@allotropia.de>
    Reviewed-by: Thorsten Behrens <thorsten.behr...@allotropia.de>

diff --git a/Makefile.in b/Makefile.in
index beae106e3ede..77df6b468c6d 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -9,7 +9,7 @@
 
 gb_Top_MODULE_CHECK_TARGETS := slowcheck unitcheck subsequentcheck perfcheck 
uicheck screenshot
 
-.PHONY : check-if-root bootstrap gbuild build build-non-l10n-only 
build-l10n-only check clean clean-build clean-host test-install distclean 
distro-pack-install docs download etags fetch get-submodules id install 
install-gdb-printers install-strip tags debugrun help showmodules translations 
packageinfo internal.clean $(gb_Top_MODULE_CHECK_TARGETS)
+.PHONY : check-if-root bootstrap gbuild build build-non-l10n-only 
build-l10n-only check clean clean-build clean-host test-install distclean 
distro-pack-install docs download etags fetch get-submodules id install 
install-gdb-printers install-strip tags debugrun help showmodules translations 
packageinfo coverage internal.clean $(gb_Top_MODULE_CHECK_TARGETS)
 
 MAKECMDGOALS?=build
 build_goal:=$(if $(filter build uicheck,$(MAKECMDGOALS)),build)\
@@ -83,13 +83,13 @@ PARALLELISM_OPTION := $(if $(filter-out 
0,$(PARALLELISM)),-j $(PARALLELISM),)
 # Partial Build
 #
 define gb_Top_GbuildModuleRules
-.PHONY: $(1) $(1).build $(1).all $(1).check $(1).clean $(1).showdeliverables 
$(foreach target,$(gb_Top_MODULE_CHECK_TARGETS),$(1).$(target))
+.PHONY: $(1) $(1).build $(1).all $(1).check $(1).clean $(1).showdeliverables 
$(1).coverage $(foreach target,$(gb_Top_MODULE_CHECK_TARGETS),$(1).$(target))
 .PHONY: $(1).allbuild $(1).buildall $(1).allcheck $(1).checkall
 
 $(1): bootstrap fetch
        cd $(SRCDIR)/$(2) && $$(MAKE) $(PARALLELISM_OPTION) $(GMAKE_OPTIONS)
 
-$(1).build $(1).check $(foreach 
target,$(gb_Top_MODULE_CHECK_TARGETS),$(1).$(target)): bootstrap fetch
+$(1).build $(1).check $(1).coverage $(foreach 
target,$(gb_Top_MODULE_CHECK_TARGETS),$(1).$(target)): bootstrap fetch
        cd $(SRCDIR)/$(2) && $$(MAKE) $(PARALLELISM_OPTION) $(GMAKE_OPTIONS) 
$$(patsubst $(1).%,%,$$@)
 
 $(1).clean $(1).showdeliverables:
@@ -291,7 +291,7 @@ ifeq ($(OS),iOS)
        $(MAKE) $(PARALLELISM_OPTION) $(GMAKE_OPTIONS) ios
 endif
 
-build-non-l10n-only build-l10n-only check debugrun translations packageinfo 
$(gb_Top_MODULE_CHECK_TARGETS): build
+build-non-l10n-only build-l10n-only check debugrun translations packageinfo 
coverage $(gb_Top_MODULE_CHECK_TARGETS): build
 
 help showmodules gbuildtojson:
        $(MAKE) $(PARALLELISM_OPTION) $(GMAKE_OPTIONS) -f 
$(SRCDIR)/Makefile.gbuild $@
diff --git a/RepositoryModule_host.mk b/RepositoryModule_host.mk
index 287bd12b8323..453416203bfb 100644
--- a/RepositoryModule_host.mk
+++ b/RepositoryModule_host.mk
@@ -221,7 +221,7 @@ endef
 # otherwise cyclic dependencies ruin everything.
 # do not serialize on a partial build as that may fail due to missing deps.
 # the default goal is build (see Module.mk)
-ifeq (,$(filter-out build check unitcheck slowcheck screenshot subsequentcheck 
uicheck,$(MAKECMDGOALS)))
+ifeq (,$(filter-out build check unitcheck slowcheck screenshot subsequentcheck 
uicheck coverage,$(MAKECMDGOALS)))
 $(eval $(call repositorymodule_serialize,\
        scfilt \
        $(call gb_Helper_optional,SCRIPTING,vbaobj) \
diff --git a/solenv/gbuild/Module.mk b/solenv/gbuild/Module.mk
index bb915f5034cb..347f1239e005 100644
--- a/solenv/gbuild/Module.mk
+++ b/solenv/gbuild/Module.mk
@@ -27,12 +27,14 @@
 #                                                          recursive 
Module/checks
 # Module/slowcheck            run all slow unit tests
 # Module/screenshot           create all screenshots
+# Module/coverage             run all feature coverage tests
 # Module/subsequentcheck      run system tests             all system tests
 # Module/uicheck             run uitests                  all uitests
 #                                                          recursive 
Module/subsequentchecks
 # build (global)              build the product            top-level Module
 # unitcheck (global)          run unit tests               top-level 
Module/unitcheck
 # slowcheck (global)          run slow unit tests          top-level 
Module/slowcheck
+# coverage (global)           run feature coverage tests   top-level 
Module/coverage
 # screenshot (global)         create all screenshots       top-level 
Module/screenshot
 # subsequentcheck (global)    run system tests             top-level 
Module/subsequentcheck
 # perfcheck (global)          run performance unit tests   top-level 
Module/perfcheck
@@ -48,6 +50,7 @@ gb_Module_L10NTARGETSTACK :=
 gb_Module_CHECKTARGETSTACK :=
 gb_Module_SLOWCHECKTARGETSTACK :=
 gb_Module_SCREENSHOTTARGETSTACK :=
+gb_Module_COVERAGETARGETSTACK :=
 gb_Module_SUBSEQUENTCHECKTARGETSTACK :=
 gb_Module_PERFCHECKTARGETSTACK :=
 gb_Module_UICHECKTARGETSTACK :=
@@ -73,7 +76,7 @@ $(call gb_Module_get_clean_target,%) :
        $(call gb_Output_announce,$*,$(false),MOD,5)
        $(call gb_Output_announce_title,module $* cleared.)
        -$(call gb_Helper_abbreviate_dirs,\
-               rm -f $(call gb_Module_get_target,$*) $(call 
gb_Module_get_nonl10n_target,$*) $(call gb_Module_get_l10n_target,$*) $(call 
gb_Module_get_check_target,$*) $(call gb_Module_get_slowcheck_target,$*) $(call 
gb_Module_get_screenshot_target,$*) $(call 
gb_Module_get_subsequentcheck_target,$*) $(call 
gb_Module_get_perfcheck_target,$*) $(call gb_Module_get_uicheck,$*))
+               rm -f $(call gb_Module_get_target,$*) $(call 
gb_Module_get_nonl10n_target,$*) $(call gb_Module_get_l10n_target,$*) $(call 
gb_Module_get_check_target,$*) $(call gb_Module_get_slowcheck_target,$*) $(call 
gb_Module_get_screenshot_target,$*) $(call gb_Module_get_coverage_target,$*) 
$(call gb_Module_get_subsequentcheck_target,$*) $(call 
gb_Module_get_perfcheck_target,$*) $(call gb_Module_get_uicheck,$*))
 
 $(call gb_Module_get_l10n_target,%) :
        $(call gb_Output_announce,$*,$(true),LOC,5)
@@ -107,6 +110,14 @@ $(call gb_Module_get_screenshot_target,%) :
                mkdir -p $(dir $@) && \
                touch $@)
 
+$(call gb_Module_get_coverage_target,%) :
+       $(call gb_Output_announce,$*,$(true),SCR,5)
+       $(call gb_Trace_MakeMark,$*,SCR)
+       $(call gb_Output_announce_title,module $* coverage done.)
+       -$(call gb_Helper_abbreviate_dirs,\
+               mkdir -p $(dir $@) && \
+               touch $@)
+
 $(call gb_Module_get_subsequentcheck_target,%) :
        $(call gb_Output_announce,$*,$(true),SCK,5)
        $(call gb_Trace_MakeMark,$*,SCK)
@@ -139,7 +150,7 @@ $(call gb_Module_get_target,%) :
                mkdir -p $(dir $@) && \
                touch $@)
 
-.PHONY : build build-l10n-only build-non-l10n-only unitcheck slowcheck 
screenshot subsequentcheck perfcheck uicheck clean check debugrun help 
showmodules translations
+.PHONY : build build-l10n-only build-non-l10n-only coverage unitcheck 
slowcheck screenshot subsequentcheck perfcheck uicheck clean check debugrun 
help showmodules translations
 .DEFAULT_GOAL := build
 
 ifeq ($(gb_Side),build)
@@ -186,6 +197,11 @@ screenshot :
        $(call gb_Output_announce_title,all screenshots checked.)
        $(call gb_Output_announce_bell)
 
+coverage :
+       $(if $(gb_VERBOSE),$(call gb_Output_announce,loaded modules: $(sort 
$(gb_Module_ALLMODULES)),$(true),COV,6))
+       $(call gb_Output_announce_title,all coverage checked.)
+       $(call gb_Output_announce_bell)
+
 # removing the dependency on build for now until we can make a full build with 
gbuild
 #subsequentcheck : build
 subsequentcheck :
@@ -255,6 +271,7 @@ gb_Module_L10NTARGETSTACK := $(call 
gb_Module_get_l10n_target,$(1)) $(gb_Module_
 gb_Module_CHECKTARGETSTACK := $(call gb_Module_get_check_target,$(1)) 
$(gb_Module_CHECKTARGETSTACK)
 gb_Module_SLOWCHECKTARGETSTACK := $(call gb_Module_get_slowcheck_target,$(1)) 
$(gb_Module_SLOWCHECKTARGETSTACK)
 gb_Module_SCREENSHOTTARGETSTACK := $(call 
gb_Module_get_screenshot_target,$(1)) $(gb_Module_SCREENSHOTTARGETSTACK)
+gb_Module_COVERAGETARGETSTACK := $(call gb_Module_get_coverage_target,$(1)) 
$(gb_Module_COVERAGETARGETSTACK)
 gb_Module_UICHECKTARGETSTACK := $(call gb_Module_get_uicheck_target,$(1)) 
$(gb_Module_UICHECKTARGETSTACK)
 gb_Module_SUBSEQUENTCHECKTARGETSTACK := $(call 
gb_Module_get_subsequentcheck_target,$(1)) 
$(gb_Module_SUBSEQUENTCHECKTARGETSTACK)
 gb_Module_PERFCHECKTARGETSTACK := $(call gb_Module_get_perfcheck_target,$(1)) 
$(gb_Module_PERFCHECKTARGETSTACK)
@@ -269,6 +286,7 @@ $(if $(filter-out libreoffice instsetoo_native android 
ios,$(1)),\
 $(call gb_Postprocess_get_target,AllModuleTests) : $(call 
gb_Module_get_check_target,$(1))
 $(call gb_Postprocess_get_target,AllModuleSlowtests) : $(call 
gb_Module_get_slowcheck_target,$(1))
 $(call gb_Postprocess_get_target,AllModuleScreenshots) : $(call 
gb_Module_get_screenshot_target,$(1))
+$(call gb_Postprocess_get_target,AllModuleCoverage) : $(call 
gb_Module_get_coverage_target,$(1))
 $(call gb_Postprocess_get_target,AllModuleUITest) : $(call 
gb_Module_get_uicheck_target,$(1))
 
 endef
@@ -338,6 +356,14 @@ $(call gb_Module_get_clean_target,$(1)) : 
$$(gb_Module_CURRENTCLEANTARGET)
 
 endef
 
+define gb_Module_add_coverage_target
+$(call gb_Module__read_targetfile,$(1),$(2),coverage target)
+
+$(call gb_Module_get_coverage_target,$(1)) : $$(gb_Module_CURRENTTARGET)
+$(call gb_Module_get_clean_target,$(1)) : $$(gb_Module_CURRENTCLEANTARGET)
+
+endef
+
 # has order dependency on AllModulesButInstsetNative to be able to run
 # subsequentcheck in the same make process on "make check"
 define gb_Module_add_subsequentcheck_target
@@ -385,6 +411,7 @@ $(call gb_Module_get_l10n_target,$(1)) : $$(firstword 
$$(gb_Module_L10NTARGETSTA
 $(call gb_Module_get_check_target,$(1)) : $$(firstword 
$$(gb_Module_CHECKTARGETSTACK))
 $(call gb_Module_get_slowcheck_target,$(1)) : $$(firstword 
$$(gb_Module_SLOWCHECKTARGETSTACK))
 $(call gb_Module_get_screenshot_target,$(1)) : $$(firstword 
$$(gb_Module_SCREENSHOTTARGETSTACK))
+$(call gb_Module_get_coverage_target,$(1)) : $$(firstword 
$$(gb_Module_COVERAGETARGETSTACK))
 $(call gb_Module_get_subsequentcheck_target,$(1)) : $$(firstword 
$$(gb_Module_SUBSEQUENTCHECKTARGETSTACK))
 $(call gb_Module_get_perfcheck_target,$(1)) : $$(firstword 
$$(gb_Module_PERFCHECKTARGETSTACK))
 $(call gb_Module_get_uicheck_target,$(1)) : $$(firstword 
$$(gb_Module_UICHECKTARGETSTACK))
@@ -394,6 +421,7 @@ gb_Module_L10NTARGETSTACK := $$(wordlist 2,$$(words 
$$(gb_Module_L10NTARGETSTACK
 gb_Module_CHECKTARGETSTACK := $$(wordlist 2,$$(words 
$$(gb_Module_CHECKTARGETSTACK)),$$(gb_Module_CHECKTARGETSTACK))
 gb_Module_SLOWCHECKTARGETSTACK := $$(wordlist 2,$$(words 
$$(gb_Module_SLOWCHECKTARGETSTACK)),$$(gb_Module_SLOWCHECKTARGETSTACK))
 gb_Module_SCREENSHOTTARGETSTACK := $$(wordlist 2,$$(words 
$$(gb_Module_SCREENSHOTTARGETSTACK)),$$(gb_Module_SCREENSHOTTARGETSTACK))
+gb_Module_COVERAGETARGETSTACK := $$(wordlist 2,$$(words 
$$(gb_Module_COVERAGETARGETSTACK)),$$(gb_Module_COVERAGETARGETSTACK))
 gb_Module_SUBSEQUENTCHECKTARGETSTACK := $$(wordlist 2,$$(words 
$$(gb_Module_SUBSEQUENTCHECKTARGETSTACK)),$$(gb_Module_SUBSEQUENTCHECKTARGETSTACK))
 gb_Module_PERFCHECKTARGETSTACK := $$(wordlist 2,$$(words 
$$(gb_Module_PERFCHECKTARGETSTACK)),$$(gb_Module_PERFCHECKTARGETSTACK))
 gb_Module_UICHECKTARGETSTACK := $$(wordlist 2,$$(words 
$$(gb_Module_UICHECKTARGETSTACK)),$$(gb_Module_UICHECKTARGETSTACK))
@@ -430,6 +458,11 @@ $(foreach target,$(2),$(call 
gb_Module_add_screenshot_target,$(1),$(target)))
 
 endef
 
+define gb_Module_add_coverage_targets
+$(foreach target,$(2),$(call gb_Module_add_coverage_target,$(1),$(target)))
+
+endef
+
 define gb_Module_add_subsequentcheck_targets
 $(foreach target,$(2),$(call 
gb_Module_add_subsequentcheck_target,$(1),$(target)))
 
@@ -460,6 +493,7 @@ include $(1)
 build : build-non-l10n-only build-l10n-only
 build-non-l10n-only : $$(firstword $$(gb_Module_TARGETSTACK))
 build-l10n-only : $$(firstword $$(gb_Module_L10NTARGETSTACK))
+coverage : $$(firstword $$(gb_Module_COVERAGETARGETSTACK))
 unitcheck : $$(firstword $$(gb_Module_CHECKTARGETSTACK))
 slowcheck : $$(firstword $$(gb_Module_SLOWCHECKTARGETSTACK))
 screenshot : $$(firstword $$(gb_Module_SCREENSHOTTARGETSTACK))
@@ -480,12 +514,13 @@ gb_Module_L10NTARGETSTACK := $$(wordlist 2,$$(words 
$$(gb_Module_L10NTARGETSTACK
 gb_Module_CHECKTARGETSTACK := $$(wordlist 2,$$(words 
$$(gb_Module_CHECKTARGETSTACK)),$$(gb_Module_CHECKTARGETSTACK))
 gb_Module_SLOWCHECKTARGETSTACK := $$(wordlist 2,$$(words 
$$(gb_Module_SLOWCHECKTARGETSTACK)),$$(gb_Module_SLOWCHECKTARGETSTACK))
 gb_Module_SCREENSHOTTARGETSTACK := $$(wordlist 2,$$(words 
$$(gb_Module_SCREENSHOTTARGETSTACK)),$$(gb_Module_SCREENSHOTTARGETSTACK))
+gb_Module_COVERAGETARGETSTACK := $$(wordlist 2,$$(words 
$$(gb_Module_COVERAGETARGETSTACK)),$$(gb_Module_COVERAGETARGETSTACK))
 gb_Module_SUBSEQUENTCHECKTARGETSTACK := $$(wordlist 2,$$(words 
$$(gb_Module_SUBSEQUENTCHECKTARGETSTACK)),$$(gb_Module_SUBSEQUENTCHECKTARGETSTACK))
 gb_Module_UICHECKTARGETSTACK := $$(wordlist 2,$$(words 
$$(gb_Module_UICHECKTARGETSTACK)),$$(gb_Module_UICHECKTARGETSTACK))
 gb_Module_PERFCHECKTARGETSTACK := $$(wordlist 2,$$(words 
$$(gb_Module_PERFCHECKTARGETSTACK)),$$(gb_Module_PERFCHECKTARGETSTACK))
 gb_Module_CLEANTARGETSTACK := $$(wordlist 2,$$(words 
$$(gb_Module_CLEANTARGETSTACK)),$$(gb_Module_CLEANTARGETSTACK))
 
-ifneq ($$(and 
$$(gb_Module_TARGETSTACK),$$(gb_Module_CHECKTARGETSTACK),$$(gb_Module_SLOWCHECKTARGETSTACK),$$(gb_Module_SCREENSHOTTARGETSTACK),$$(gb_Module_SUBSEQUENTCHECKTARGETSTACK),$$(gb_Module_UICHECKTARGETSTACK),$$(gb_Module_PERFCHECKTARGETSTACK),$$(gb_Module_L10NTARGETSTACK)),)
+ifneq ($$(and 
$$(gb_Module_TARGETSTACK),$$(gb_Module_CHECKTARGETSTACK),$$(gb_Module_SLOWCHECKTARGETSTACK),$$(gb_Module_COVERAGETARGETSTACK),$$(gb_Module_SCREENSHOTTARGETSTACK),$$(gb_Module_SUBSEQUENTCHECKTARGETSTACK),$$(gb_Module_UICHECKTARGETSTACK),$$(gb_Module_PERFCHECKTARGETSTACK),$$(gb_Module_L10NTARGETSTACK)),)
 $$(eval $$(call gb_Output_error,Corrupted module target stack!3))
 endif
 
diff --git a/solenv/gbuild/Postprocess.mk b/solenv/gbuild/Postprocess.mk
index 2c1dfd2f454b..b56679e3b083 100644
--- a/solenv/gbuild/Postprocess.mk
+++ b/solenv/gbuild/Postprocess.mk
@@ -49,6 +49,7 @@ $(call gb_Postprocess_Postprocess,AllUIConfigs,All UI 
configuration files,$(WORK
 $(call gb_Postprocess_Postprocess,AllModuleTests,All modules' 
tests,$(WORKDIR)/Module/check/)
 $(call gb_Postprocess_Postprocess,AllModuleSlowtests,All modules' 
slowtests,$(WORKDIR)/Module/slowcheck/)
 $(call gb_Postprocess_Postprocess,AllModuleScreenshots,All modules' 
screenshots,$(WORKDIR)/Module/screenshot/)
+$(call gb_Postprocess_Postprocess,AllModuleCoverage,All modules' 
coverage,$(WORKDIR)/Module/coverage/)
 $(call gb_Postprocess_Postprocess,AllModuleUITests,All modules' 
uitests,$(WORKDIR)/Module/uicheck/)
 
 endef
diff --git a/solenv/gbuild/TargetLocations.mk b/solenv/gbuild/TargetLocations.mk
index 32d7eed72ec0..4f3814f2a5d2 100644
--- a/solenv/gbuild/TargetLocations.mk
+++ b/solenv/gbuild/TargetLocations.mk
@@ -142,6 +142,7 @@ gb_Module_get_l10n_target = $(WORKDIR)/Module/l10n/$(1)
 gb_Module_get_check_target = $(WORKDIR)/Module/check/$(1)
 gb_Module_get_slowcheck_target = $(WORKDIR)/Module/slowcheck/$(1)
 gb_Module_get_screenshot_target = $(WORKDIR)/Module/screenshot/$(1)
+gb_Module_get_coverage_target = $(WORKDIR)/Module/coverage/$(1)
 gb_Module_get_subsequentcheck_target = $(WORKDIR)/Module/subsequentcheck/$(1)
 gb_Module_get_perfcheck_target = $(WORKDIR)/Module/perfcheck/$(1)
 gb_Module_get_uicheck_target = $(WORKDIR)/Module/uicheck/$(1)
diff --git a/solenv/gbuild/extensions/post_SpeedUpTargets.mk 
b/solenv/gbuild/extensions/post_SpeedUpTargets.mk
index 3db6355ab90d..44539cc5576d 100644
--- a/solenv/gbuild/extensions/post_SpeedUpTargets.mk
+++ b/solenv/gbuild/extensions/post_SpeedUpTargets.mk
@@ -9,21 +9,21 @@
 
 ifneq ($(CROSS_COMPILING),)
 gb_Module_add_targets_for_build :=
-gb_Module_SKIPTARGETS := check slowcheck screenshot subsequentcheck uicheck
+gb_Module_SKIPTARGETS := check coverage slowcheck screenshot subsequentcheck 
uicheck
 endif
 
 ifeq ($(gb_Side),build)
-gb_Module_SKIPTARGETS := check slowcheck screenshot subsequentcheck uicheck
+gb_Module_SKIPTARGETS := check coverage slowcheck screenshot subsequentcheck 
uicheck
 endif
 
 ifeq ($(MAKECMDGOALS),build)
-gb_Module_SKIPTARGETS := check slowcheck screenshot subsequentcheck uicheck
+gb_Module_SKIPTARGETS := check coverage slowcheck screenshot subsequentcheck 
uicheck
 endif
 
 ifeq (,$(filter perfcheck,$(MAKECMDGOALS)))
 gb_Module_SKIPTARGETS += perfcheck
 else
-gb_Module_SKIPTARGETS += check slowcheck screenshot subsequentcheck uicheck
+gb_Module_SKIPTARGETS += check coverage slowcheck screenshot subsequentcheck 
uicheck
 endif
 
 ifneq ($(strip $(MAKECMDGOALS)),)
@@ -37,7 +37,7 @@ ifeq (T,$(if $(filter-out 
$(gb_SpeedUpTargets_LEVEL_1),$(MAKECMDGOALS)),,T))
 gb_FULLDEPS :=
 
 ifeq (T,$(if $(filter-out $(gb_SpeedUpTargets_LEVEL_2),$(MAKECMDGOALS)),,T))
-gb_Module_SKIPTARGETS += check slowcheck screenshot subsequentcheck uicheck
+gb_Module_SKIPTARGETS += check coverage slowcheck screenshot subsequentcheck 
uicheck
 
 ifeq (T,$(if $(filter-out $(gb_SpeedUpTargets_LEVEL_3),$(MAKECMDGOALS)),,T))
 gb_Module_SKIPTARGETS += build
@@ -69,6 +69,10 @@ ifneq (,$(filter screenshot,$(gb_Module_SKIPTARGETS)))
 gb_Module_add_screenshot_target =
 endif
 
+ifneq (,$(filter coverage,$(gb_Module_SKIPTARGETS)))
+gb_Module_add_coverage_target =
+endif
+
 ifneq (,$(filter subsequentcheck,$(gb_Module_SKIPTARGETS)))
 gb_Module_add_subsequentcheck_target =
 endif
diff --git a/solenv/gbuild/gbuild.help.txt b/solenv/gbuild/gbuild.help.txt
index acd16ed2e74e..c677541309f5 100644
--- a/solenv/gbuild/gbuild.help.txt
+++ b/solenv/gbuild/gbuild.help.txt
@@ -38,6 +38,7 @@ AVAILABLE TARGETS
        unitcheck            run unit tests
        slowcheck            run slow unit tests
        screenshot           create all screenshots
+       coverage             run coverage tests
        subsequentcheck      run system tests (requires full installation)
        perfcheck            run performance/callgrind unit tests
        uicheck              run UI tests
diff --git a/sw/CppunitTest_sw_odffeatures.mk b/sw/CppunitTest_sw_odffeatures.mk
new file mode 100644
index 000000000000..f0f5cca0cbd1
--- /dev/null
+++ b/sw/CppunitTest_sw_odffeatures.mk
@@ -0,0 +1,60 @@
+# -*- 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/.
+#
+#*************************************************************************
+
+$(eval $(call gb_CppunitTest_CppunitTest,sw_odffeatures))
+
+$(eval $(call gb_CppunitTest_use_common_precompiled_header,sw_odffeatures))
+
+$(eval $(call gb_CppunitTest_add_exception_objects,sw_odffeatures, \
+    sw/qa/extras/odfimport/odffeatures \
+))
+
+$(eval $(call gb_CppunitTest_use_libraries,sw_odffeatures, \
+    comphelper \
+    cppu \
+    cppuhelper \
+    sal \
+    sw \
+    swqahelper \
+    test \
+    unotest \
+    vcl \
+    utl \
+))
+
+$(eval $(call gb_CppunitTest_use_externals,sw_odffeatures,\
+       boost_headers \
+    libxml2 \
+))
+
+$(eval $(call gb_CppunitTest_set_include,sw_odffeatures,\
+    -I$(SRCDIR)/sw/inc \
+       -I$(SRCDIR)/sw/qa/inc \
+    $$(INCLUDE) \
+))
+
+$(eval $(call gb_CppunitTest_use_api,sw_odffeatures,\
+       udkapi \
+       offapi \
+))
+
+$(eval $(call gb_CppunitTest_use_ure,sw_odffeatures))
+$(eval $(call gb_CppunitTest_use_vcl,sw_odffeatures))
+
+$(eval $(call gb_CppunitTest_use_rdb,sw_odffeatures,services))
+
+$(eval $(call gb_CppunitTest_use_configuration,sw_odffeatures))
+
+$(eval $(call gb_CppunitTest_add_arguments,sw_odffeatures, \
+    
-env:arg-env=$(gb_Helper_LIBRARY_PATH_VAR)"$$$${$(gb_Helper_LIBRARY_PATH_VAR)+=$$$$$(gb_Helper_LIBRARY_PATH_VAR)}"
 \
+))
+
+# vim: set noet sw=4 ts=4:
diff --git a/sw/Module_sw.mk b/sw/Module_sw.mk
index 1aacc6a274ff..8b5a42e0ff14 100644
--- a/sw/Module_sw.mk
+++ b/sw/Module_sw.mk
@@ -188,6 +188,11 @@ $(eval $(call gb_Module_add_screenshot_targets,sw,\
     CppunitTest_sw_dialogs_test_2 \
 ))
 
+# feature coverage
+$(eval $(call gb_Module_add_coverage_targets,sw,\
+    CppunitTest_sw_odffeatures \
+))
+
 $(eval $(call gb_Module_add_uicheck_targets,sw,\
        $(call gb_Helper_optional,LIBRELOGO,UITest_librelogo) \
        UITest_writer_tests \
diff --git a/sw/qa/extras/odfimport/data/feature_image_jpg.odt 
b/sw/qa/extras/odfimport/data/feature_image_jpg.odt
new file mode 100644
index 000000000000..79294a27a7a6
Binary files /dev/null and b/sw/qa/extras/odfimport/data/feature_image_jpg.odt 
differ
diff --git a/sw/qa/extras/odfimport/data/feature_table.odt 
b/sw/qa/extras/odfimport/data/feature_table.odt
new file mode 100644
index 000000000000..5c0bb843fe31
Binary files /dev/null and b/sw/qa/extras/odfimport/data/feature_table.odt 
differ
diff --git a/sw/qa/extras/odfimport/data/feature_table_merged-cells.odt 
b/sw/qa/extras/odfimport/data/feature_table_merged-cells.odt
new file mode 100644
index 000000000000..ef1c99b7db4a
Binary files /dev/null and 
b/sw/qa/extras/odfimport/data/feature_table_merged-cells.odt differ
diff --git a/sw/qa/extras/odfimport/data/feature_table_merged-cells_all.odt 
b/sw/qa/extras/odfimport/data/feature_table_merged-cells_all.odt
new file mode 100644
index 000000000000..4608c4db5679
Binary files /dev/null and 
b/sw/qa/extras/odfimport/data/feature_table_merged-cells_all.odt differ
diff --git a/sw/qa/extras/odfimport/data/feature_table_text.odt 
b/sw/qa/extras/odfimport/data/feature_table_text.odt
new file mode 100644
index 000000000000..ac7e4475fe0a
Binary files /dev/null and b/sw/qa/extras/odfimport/data/feature_table_text.odt 
differ
diff --git a/sw/qa/extras/odfimport/data/feature_text.odt 
b/sw/qa/extras/odfimport/data/feature_text.odt
new file mode 100644
index 000000000000..fa55c4c4522d
Binary files /dev/null and b/sw/qa/extras/odfimport/data/feature_text.odt differ
diff --git a/sw/qa/extras/odfimport/data/feature_text_background-color.odt 
b/sw/qa/extras/odfimport/data/feature_text_background-color.odt
new file mode 100644
index 000000000000..22dca8b136e4
Binary files /dev/null and 
b/sw/qa/extras/odfimport/data/feature_text_background-color.odt differ
diff --git a/sw/qa/extras/odfimport/data/feature_text_bold.odt 
b/sw/qa/extras/odfimport/data/feature_text_bold.odt
new file mode 100644
index 000000000000..d899017328b1
Binary files /dev/null and b/sw/qa/extras/odfimport/data/feature_text_bold.odt 
differ
diff --git a/sw/qa/extras/odfimport/data/feature_text_italic.odt 
b/sw/qa/extras/odfimport/data/feature_text_italic.odt
new file mode 100644
index 000000000000..560da0922fe4
Binary files /dev/null and 
b/sw/qa/extras/odfimport/data/feature_text_italic.odt differ
diff --git a/sw/qa/extras/odfimport/odffeatures.cxx 
b/sw/qa/extras/odfimport/odffeatures.cxx
new file mode 100644
index 000000000000..1116cfc5a60b
--- /dev/null
+++ b/sw/qa/extras/odfimport/odffeatures.cxx
@@ -0,0 +1,38 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * 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/.
+ */
+
+#include <swmodeltestbase.hxx>
+
+#include <config_features.h>
+
+constexpr OUStringLiteral DATA_DIRECTORY = u"/sw/qa/extras/odfimport/data/";
+
+class Test : public SwModelTestBase
+{
+public:
+    Test()
+        : SwModelTestBase(DATA_DIRECTORY, "writer8")
+    {
+    }
+};
+
+CPPUNIT_TEST_FIXTURE(Test, testFeatureText) { load(mpTestDocumentPath, 
"feature_text.odt"); }
+
+CPPUNIT_TEST_FIXTURE(Test, testFeatureTextBold)
+{
+    load(mpTestDocumentPath, "feature_text_bold.odt");
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testFeatureTextItalic)
+{
+    load(mpTestDocumentPath, "feature_text_italic.odt");
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Reply via email to