summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.in8
-rw-r--r--RepositoryModule_host.mk2
-rw-r--r--solenv/gbuild/Module.mk41
-rw-r--r--solenv/gbuild/Postprocess.mk1
-rw-r--r--solenv/gbuild/TargetLocations.mk1
-rw-r--r--solenv/gbuild/extensions/post_SpeedUpTargets.mk14
-rw-r--r--solenv/gbuild/gbuild.help.txt1
-rw-r--r--sw/CppunitTest_sw_odffeatures.mk60
-rw-r--r--sw/Module_sw.mk5
-rw-r--r--sw/qa/extras/odfimport/data/feature_image_jpg.odtbin0 -> 63012 bytes
-rw-r--r--sw/qa/extras/odfimport/data/feature_table.odtbin0 -> 8251 bytes
-rw-r--r--sw/qa/extras/odfimport/data/feature_table_merged-cells.odtbin0 -> 8343 bytes
-rw-r--r--sw/qa/extras/odfimport/data/feature_table_merged-cells_all.odtbin0 -> 8299 bytes
-rw-r--r--sw/qa/extras/odfimport/data/feature_table_text.odtbin0 -> 8588 bytes
-rw-r--r--sw/qa/extras/odfimport/data/feature_text.odtbin0 -> 8269 bytes
-rw-r--r--sw/qa/extras/odfimport/data/feature_text_background-color.odtbin0 -> 8341 bytes
-rw-r--r--sw/qa/extras/odfimport/data/feature_text_bold.odtbin0 -> 8425 bytes
-rw-r--r--sw/qa/extras/odfimport/data/feature_text_italic.odtbin0 -> 8427 bytes
-rw-r--r--sw/qa/extras/odfimport/odffeatures.cxx38
19 files changed, 158 insertions, 13 deletions
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
--- /dev/null
+++ b/sw/qa/extras/odfimport/data/feature_image_jpg.odt
Binary files 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
--- /dev/null
+++ b/sw/qa/extras/odfimport/data/feature_table.odt
Binary files 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
--- /dev/null
+++ b/sw/qa/extras/odfimport/data/feature_table_merged-cells.odt
Binary files 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
--- /dev/null
+++ b/sw/qa/extras/odfimport/data/feature_table_merged-cells_all.odt
Binary files 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
--- /dev/null
+++ b/sw/qa/extras/odfimport/data/feature_table_text.odt
Binary files 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
--- /dev/null
+++ b/sw/qa/extras/odfimport/data/feature_text.odt
Binary files 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
--- /dev/null
+++ b/sw/qa/extras/odfimport/data/feature_text_background-color.odt
Binary files 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
--- /dev/null
+++ b/sw/qa/extras/odfimport/data/feature_text_bold.odt
Binary files 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
--- /dev/null
+++ b/sw/qa/extras/odfimport/data/feature_text_italic.odt
Binary files 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: */