summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sd/CppunitTest_sd_font_embedding_tests.mk75
-rw-r--r--sd/Module_sd.mk1
-rw-r--r--sd/qa/unit/FontEmbeddingTest.cxx150
-rw-r--r--sd/qa/unit/data/BoldonseFontEmbedded.pptxbin0 -> 67477 bytes
4 files changed, 226 insertions, 0 deletions
diff --git a/sd/CppunitTest_sd_font_embedding_tests.mk b/sd/CppunitTest_sd_font_embedding_tests.mk
new file mode 100644
index 000000000000..16a637ecae0c
--- /dev/null
+++ b/sd/CppunitTest_sd_font_embedding_tests.mk
@@ -0,0 +1,75 @@
+# -*- 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,sd_font_embedding_tests))
+
+$(eval $(call gb_CppunitTest_use_externals,sd_font_embedding_tests,\
+ boost_headers \
+ libxml2 \
+))
+
+$(eval $(call gb_CppunitTest_use_common_precompiled_header,sd_font_embedding_tests))
+
+$(eval $(call gb_CppunitTest_add_exception_objects,sd_font_embedding_tests, \
+ sd/qa/unit/FontEmbeddingTest \
+))
+
+$(eval $(call gb_CppunitTest_use_libraries,sd_font_embedding_tests, \
+ basegfx \
+ comphelper \
+ cppu \
+ cppuhelper \
+ drawinglayer \
+ docmodel \
+ editeng \
+ for \
+ forui \
+ i18nlangtag \
+ sal \
+ salhelper \
+ sax \
+ sd \
+ sfx \
+ sot \
+ subsequenttest \
+ svl \
+ svt \
+ svx \
+ svxcore \
+ test \
+ tl \
+ tk \
+ ucbhelper \
+ unotest \
+ utl \
+ vcl \
+ xo \
+))
+
+$(eval $(call gb_CppunitTest_set_include,sd_font_embedding_tests,\
+ -I$(SRCDIR)/sd/source/ui/inc \
+ -I$(SRCDIR)/sd/inc \
+ $$(INCLUDE) \
+))
+
+$(eval $(call gb_CppunitTest_use_custom_headers,sd_font_embedding_tests,\
+ officecfg/registry \
+))
+
+$(eval $(call gb_CppunitTest_use_sdk_api,sd_font_embedding_tests))
+$(eval $(call gb_CppunitTest_use_ure,sd_font_embedding_tests))
+$(eval $(call gb_CppunitTest_use_vcl,sd_font_embedding_tests))
+$(eval $(call gb_CppunitTest_use_rdb,sd_font_embedding_tests,services))
+$(eval $(call gb_CppunitTest_use_configuration,sd_font_embedding_tests))
+
+
+
+# vim: set noet sw=4 ts=4:
diff --git a/sd/Module_sd.mk b/sd/Module_sd.mk
index 827e5f51ea92..aefdbb587dd4 100644
--- a/sd/Module_sd.mk
+++ b/sd/Module_sd.mk
@@ -41,6 +41,7 @@ $(eval $(call gb_Module_add_slowcheck_targets,sd,\
CppunitTest_sd_export_tests-ooxml4 \
CppunitTest_sd_export_tests \
CppunitTest_sd_filters_test \
+ CppunitTest_sd_font_embedding_tests \
CppunitTest_sd_layout_tests \
CppunitTest_sd_misc_tests \
CppunitTest_sd_uiimpress \
diff --git a/sd/qa/unit/FontEmbeddingTest.cxx b/sd/qa/unit/FontEmbeddingTest.cxx
new file mode 100644
index 000000000000..9c1b2571376c
--- /dev/null
+++ b/sd/qa/unit/FontEmbeddingTest.cxx
@@ -0,0 +1,150 @@
+/* -*- 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 "sdmodeltestbase.hxx"
+#include <test/unoapi_test.hxx>
+#include <config_eot.h>
+#include <config_fonts.h>
+#include <vcl/embeddedfontshelper.hxx>
+
+using namespace css;
+
+class FontEmbeddingTest : public SdModelTestBase
+{
+public:
+ FontEmbeddingTest()
+ : SdModelTestBase(u"/sd/qa/unit/data/"_ustr)
+ {
+ }
+};
+
+namespace
+{
+constexpr OString xPath_Presentation = "/p:presentation"_ostr;
+constexpr OString xPath_EmbeddedFont
+ = "/p:presentation/p:embeddedFontLst/p:embeddedFont/p:font"_ostr;
+constexpr OString xPath_Relationship = "/rels:Relationships/rels:Relationship"_ostr;
+}
+
+CPPUNIT_TEST_FIXTURE(FontEmbeddingTest, testRoundtripEmbeddedFontsPPTX)
+{
+#if ENABLE_EOT
+ // Test Import first
+
+ // Expect the font to not be available
+ {
+ OUString aUrl = EmbeddedFontsHelper::fontFileUrl(
+ u"Boldonse", FAMILY_ROMAN, ITALIC_NONE, WEIGHT_NORMAL, PITCH_VARIABLE,
+ EmbeddedFontsHelper::FontRights::ViewingAllowed);
+ CPPUNIT_ASSERT(aUrl.isEmpty());
+ }
+
+ // Load the document
+ createSdImpressDoc("BoldonseFontEmbedded.pptx");
+
+// FIXME: for some reason it doesn't work in macOS (see testSubsettedFullEmbeddedFont for asimilar case)
+#if !defined(MACOSX)
+ // Expect the font to be available now, if we imported the embedded fonts correctly
+ {
+ OUString aUrl = EmbeddedFontsHelper::fontFileUrl(
+ u"Boldonse", FAMILY_ROMAN, ITALIC_NONE, WEIGHT_NORMAL, PITCH_VARIABLE,
+ EmbeddedFontsHelper::FontRights::ViewingAllowed);
+
+ CPPUNIT_ASSERT(!aUrl.isEmpty());
+ }
+#endif
+
+ // Check the document settings for embedded fonts are as expected
+ {
+ uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+ CPPUNIT_ASSERT(xFactory.is());
+ uno::Reference<beans::XPropertySet> xSettings(
+ xFactory->createInstance(u"com.sun.star.document.Settings"_ustr), uno::UNO_QUERY);
+ CPPUNIT_ASSERT(xSettings.is());
+
+ bool bEmbedFonts = false;
+ bool bEmbedUsedOnly = false;
+ bool bEmbedLatinScript = false;
+ bool bEmbedAsianScript = false;
+ bool bEmbedComplexScript = false;
+
+ xSettings->getPropertyValue(u"EmbedFonts"_ustr) >>= bEmbedFonts;
+ xSettings->getPropertyValue(u"EmbedOnlyUsedFonts"_ustr) >>= bEmbedUsedOnly;
+ xSettings->getPropertyValue(u"EmbedLatinScriptFonts"_ustr) >>= bEmbedLatinScript;
+ xSettings->getPropertyValue(u"EmbedAsianScriptFonts"_ustr) >>= bEmbedAsianScript;
+ xSettings->getPropertyValue(u"EmbedComplexScriptFonts"_ustr) >>= bEmbedComplexScript;
+
+ CPPUNIT_ASSERT_EQUAL(true, bEmbedFonts);
+ CPPUNIT_ASSERT_EQUAL(false, bEmbedUsedOnly);
+ CPPUNIT_ASSERT_EQUAL(true, bEmbedLatinScript);
+ CPPUNIT_ASSERT_EQUAL(true, bEmbedAsianScript);
+ CPPUNIT_ASSERT_EQUAL(true, bEmbedComplexScript);
+ }
+
+ // Test Export
+ save(u"Impress Office Open XML"_ustr);
+
+ // Check the exported document has the font
+ {
+ xmlDocUniquePtr pXmlDoc = parseExport(u"ppt/presentation.xml"_ustr);
+ assertXPath(pXmlDoc, xPath_Presentation, "embedTrueTypeFonts", u"1");
+ assertXPath(pXmlDoc, xPath_EmbeddedFont + "[@typeface='Boldonse']");
+ }
+#endif
+}
+
+CPPUNIT_TEST_FIXTURE(FontEmbeddingTest, testExportEmbeddedFontsPPTX)
+{
+#if HAVE_MORE_FONTS
+
+ createSdImpressDoc();
+
+ uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY_THROW);
+ uno::Reference<beans::XPropertySet> xProps(
+ xFactory->createInstance(u"com.sun.star.document.Settings"_ustr), uno::UNO_QUERY_THROW);
+
+ // Check state of the font embedding settings
+ CPPUNIT_ASSERT_EQUAL(false, xProps->getPropertyValue(u"EmbedFonts"_ustr).get<bool>());
+ CPPUNIT_ASSERT_EQUAL(false, xProps->getPropertyValue(u"EmbedOnlyUsedFonts"_ustr).get<bool>());
+ CPPUNIT_ASSERT_EQUAL(true, xProps->getPropertyValue(u"EmbedLatinScriptFonts"_ustr).get<bool>());
+ CPPUNIT_ASSERT_EQUAL(true, xProps->getPropertyValue(u"EmbedAsianScriptFonts"_ustr).get<bool>());
+ CPPUNIT_ASSERT_EQUAL(true,
+ xProps->getPropertyValue(u"EmbedComplexScriptFonts"_ustr).get<bool>());
+
+ // Enable font embedding, only used and latin script fonts
+ xProps->setPropertyValue(u"EmbedFonts"_ustr, uno::Any(true));
+ xProps->setPropertyValue(u"EmbedOnlyUsedFonts"_ustr, uno::Any(true));
+ xProps->setPropertyValue(u"EmbedLatinScriptFonts"_ustr, uno::Any(true));
+ xProps->setPropertyValue(u"EmbedAsianScriptFonts"_ustr, uno::Any(false));
+ xProps->setPropertyValue(u"EmbedComplexScriptFonts"_ustr, uno::Any(false));
+
+ save(u"Impress Office Open XML"_ustr);
+
+ // Check the exported document has the embedded fonts enabled and has entries
+ {
+ xmlDocUniquePtr pXmlDoc = parseExport(u"ppt/presentation.xml"_ustr);
+ assertXPath(pXmlDoc, xPath_Presentation, "embedTrueTypeFonts", u"1");
+ assertXPath(pXmlDoc, xPath_EmbeddedFont + "[@typeface='Liberation Sans']");
+ }
+
+ // Check the relationships to the embedded fonts
+ {
+ xmlDocUniquePtr pXmlDoc = parseExport(u"ppt/_rels/presentation.xml.rels"_ustr);
+
+ static constexpr auto sFontType
+ = u"http://schemas.openxmlformats.org/officeDocument/2006/relationships/font";
+ assertXPath(pXmlDoc, xPath_Relationship + "[@Target='fonts/font1.fntdata']", "Type",
+ sFontType);
+ }
+#endif
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/qa/unit/data/BoldonseFontEmbedded.pptx b/sd/qa/unit/data/BoldonseFontEmbedded.pptx
new file mode 100644
index 000000000000..9e8ed3551226
--- /dev/null
+++ b/sd/qa/unit/data/BoldonseFontEmbedded.pptx
Binary files differ