vcl/qa/cppunit/physicalfontcollection.cxx |  433 +++++++++++++++++++++++++++++-
 1 file changed, 426 insertions(+), 7 deletions(-)

New commits:
commit 97ef7881cec4f7baa1ef8e7b6b84b6848f8c5f4a
Author:     Chris Sherlock <chris.sherloc...@gmail.com>
AuthorDate: Sat Oct 9 19:46:13 2021 +1100
Commit:     Hossein <hoss...@libreoffice.org>
CommitDate: Sat Nov 13 17:59:37 2021 +0100

    tdf#144961 vcl: test PhysicalFontCollection::FindFontFamilyByAttributes()
    
    Note there are missing tests that I will add in the next patch
    
    Change-Id: I98bfb27c424c615f240c687cb5251fe958b4a032
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/123308
    Tested-by: Jenkins
    Reviewed-by: Hossein <hoss...@libreoffice.org>

diff --git a/vcl/qa/cppunit/physicalfontcollection.cxx 
b/vcl/qa/cppunit/physicalfontcollection.cxx
index 7a261268119a..98ac902032ff 100644
--- a/vcl/qa/cppunit/physicalfontcollection.cxx
+++ b/vcl/qa/cppunit/physicalfontcollection.cxx
@@ -19,6 +19,8 @@
 
 #include <memory>
 
+constexpr int FONTID = 1;
+
 class VclPhysicalFontCollectionTest : public test::BootstrapFixture
 {
 public:
@@ -32,6 +34,29 @@ public:
     void testShouldNotFindFontFamily();
     void testShouldFindFontFamilyByTokenNames();
     void testShouldFindNoFamilyWithWorthlessAttributes();
+    void testShouldFindCJKFamily();
+    void testShouldFindStarsymbolFamily();
+    void testShouldFindOpensymbolFamilyWithMultipleSymbolFamilies();
+    void testShouldFindSymboltypeFamily();
+    void testShouldFindSymbolFamilyByMatchType();
+    void testImpossibleSymbolFamily();
+    void testShouldNotFindSymbolFamily();
+    void testShouldMatchFamilyName();
+    void testShouldMatchBrushScriptFamily();
+    void testShouldNotMatchBrushScriptFamily();
+    void testShouldMatchFixedFamily();
+    void testShouldNotMatchFixedFamily();
+    void testShouldMatchSerifFamily();
+    void testShouldNotMatchSerifFamily();
+    void testShouldMatchSansSerifFamily();
+    void testShouldNotMatchSansSerifFamily();
+    void testShouldMatchDecorativeFamily();
+    void testShouldFindTitlingFamily();
+    void testShouldFindCapitalsFamily();
+    void testShouldFindFamilyName();
+    void testShouldFindOtherStyleFamily();
+    void testShouldNotFindOtherStyleFamily();
+    void testShouldFindSchoolbookFamily();
 
     CPPUNIT_TEST_SUITE(VclPhysicalFontCollectionTest);
     CPPUNIT_TEST(testShouldCreateAndAddFontFamilyToCollection);
@@ -39,6 +64,29 @@ public:
     CPPUNIT_TEST(testShouldNotFindFontFamily);
     CPPUNIT_TEST(testShouldFindFontFamilyByTokenNames);
     CPPUNIT_TEST(testShouldFindNoFamilyWithWorthlessAttributes);
+    CPPUNIT_TEST(testShouldFindCJKFamily);
+    CPPUNIT_TEST(testShouldFindStarsymbolFamily);
+    CPPUNIT_TEST(testShouldFindOpensymbolFamilyWithMultipleSymbolFamilies);
+    CPPUNIT_TEST(testShouldFindSymboltypeFamily);
+    CPPUNIT_TEST(testShouldFindSymbolFamilyByMatchType);
+    CPPUNIT_TEST(testImpossibleSymbolFamily);
+    CPPUNIT_TEST(testShouldNotFindSymbolFamily);
+    CPPUNIT_TEST(testShouldMatchFamilyName);
+    CPPUNIT_TEST(testShouldMatchBrushScriptFamily);
+    CPPUNIT_TEST(testShouldNotMatchBrushScriptFamily);
+    CPPUNIT_TEST(testShouldMatchFixedFamily);
+    CPPUNIT_TEST(testShouldNotMatchFixedFamily);
+    CPPUNIT_TEST(testShouldMatchSerifFamily);
+    CPPUNIT_TEST(testShouldNotMatchSerifFamily);
+    CPPUNIT_TEST(testShouldMatchSansSerifFamily);
+    CPPUNIT_TEST(testShouldNotMatchSansSerifFamily);
+    CPPUNIT_TEST(testShouldMatchDecorativeFamily);
+    CPPUNIT_TEST(testShouldFindTitlingFamily);
+    CPPUNIT_TEST(testShouldFindCapitalsFamily);
+    CPPUNIT_TEST(testShouldFindFamilyName);
+    CPPUNIT_TEST(testShouldFindOtherStyleFamily);
+    CPPUNIT_TEST(testShouldNotFindOtherStyleFamily);
+    CPPUNIT_TEST(testShouldFindSchoolbookFamily);
     CPPUNIT_TEST_SUITE_END();
 };
 
@@ -51,16 +99,16 @@ void 
VclPhysicalFontCollectionTest::testShouldCreateAndAddFontFamilyToCollection
     // please note that fonts created this way are NOT normalized and will not 
be found if you search for them in the collection
     vcl::font::PhysicalFontFamily* pFontFamily
         = aFontCollection.FindOrCreateFontFamily("Test Font Family Name");
-    CPPUNIT_ASSERT_EQUAL_MESSAGE("One font family in collection", 
static_cast<int>(1),
-                                 aFontCollection.Count());
-    CPPUNIT_ASSERT_EQUAL_MESSAGE("Font family name correct", OUString("Test 
Font Family Name"),
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Does not have only one font family in 
collection",
+                                 static_cast<int>(1), aFontCollection.Count());
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Font family name not correct", 
OUString("Test Font Family Name"),
                                  pFontFamily->GetSearchName());
 
     vcl::font::PhysicalFontFamily* pFontFamily2
         = aFontCollection.FindOrCreateFontFamily("Test Font Family Name");
     CPPUNIT_ASSERT_EQUAL_MESSAGE("Still only one font family in collection", 
static_cast<int>(1),
                                  aFontCollection.Count());
-    CPPUNIT_ASSERT_EQUAL_MESSAGE("Font family name correct", OUString("Test 
Font Family Name"),
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Font family name not correct", 
OUString("Test Font Family Name"),
                                  pFontFamily2->GetSearchName());
 }
 
@@ -72,7 +120,7 @@ void 
VclPhysicalFontCollectionTest::testShouldFindFontFamily()
 
     vcl::font::PhysicalFontFamily* pFontFamily
         = aFontCollection.FindFontFamily(u"Test Font Family Name");
-    CPPUNIT_ASSERT_EQUAL_MESSAGE("Font family name correct",
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Font family name not correct",
                                  GetEnglishSearchFontName(u"Test Font Family 
Name"),
                                  pFontFamily->GetSearchName());
 }
@@ -97,12 +145,21 @@ void 
VclPhysicalFontCollectionTest::testShouldFindFontFamilyByTokenNames()
 
     vcl::font::PhysicalFontFamily* pFontFamily
         = aFontCollection.FindFontFamilyByTokenNames("Test Font Family Name");
-    CPPUNIT_ASSERT_MESSAGE("Found the font family", pFontFamily);
-    CPPUNIT_ASSERT_EQUAL_MESSAGE("Font family name correct",
+    CPPUNIT_ASSERT_MESSAGE("Did not find the font family", pFontFamily);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Font family name incorrect",
                                  GetEnglishSearchFontName(u"Test Font Family 
Name"),
                                  pFontFamily->GetSearchName());
 }
 
+static void AddNormalFontFace(vcl::font::PhysicalFontFamily* const pFontFamily,
+                              OUString const& rFamilyName)
+{
+    FontAttributes aFontAttr;
+    aFontAttr.SetFamilyName(rFamilyName);
+    aFontAttr.SetWeight(WEIGHT_NORMAL);
+    pFontFamily->AddFontFace(new TestFontFace(aFontAttr, FONTID));
+}
+
 void 
VclPhysicalFontCollectionTest::testShouldFindNoFamilyWithWorthlessAttributes()
 {
     // note: you must normalize the search family name (first parameter of 
PhysicalFontFamily constructor)
@@ -113,6 +170,368 @@ void 
VclPhysicalFontCollectionTest::testShouldFindNoFamilyWithWorthlessAttribute
                                                                WIDTH_NORMAL, 
ITALIC_NONE, ""));
 }
 
+void VclPhysicalFontCollectionTest::testShouldFindCJKFamily()
+{
+    vcl::font::PhysicalFontCollection aFontCollection;
+
+    // interestingly, you need to normalize the name still
+    vcl::font::PhysicalFontFamily* pFontFamily = 
aFontCollection.FindOrCreateFontFamily(
+        GetEnglishSearchFontName(u"시험")); // Korean for "test"
+    AddNormalFontFace(pFontFamily, u"시험");
+
+    vcl::font::PhysicalFontFamily* pCJKFamily = 
aFontCollection.FindFontFamilyByAttributes(
+        ImplFontAttrs::CJK, WEIGHT_NORMAL, WIDTH_NORMAL, ITALIC_NORMAL, "");
+    CPPUNIT_ASSERT_MESSAGE("family not found", pCJKFamily);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("cjk family not found", 
GetEnglishSearchFontName(u"시험"),
+                                 pCJKFamily->GetSearchName());
+}
+
+void VclPhysicalFontCollectionTest::testShouldFindStarsymbolFamily()
+{
+    vcl::font::PhysicalFontCollection aFontCollection;
+    vcl::font::PhysicalFontFamily* pFontFamily
+        = aFontCollection.FindOrCreateFontFamily("starsymbol");
+    AddNormalFontFace(pFontFamily, "starsymbol");
+
+    CPPUNIT_ASSERT_MESSAGE("starsymbol created", pFontFamily);
+
+    vcl::font::PhysicalFontFamily* pStarsymbolFamily = 
aFontCollection.FindFontFamilyByAttributes(
+        ImplFontAttrs::Symbol, WEIGHT_NORMAL, WIDTH_NORMAL, ITALIC_NORMAL, "");
+    CPPUNIT_ASSERT_MESSAGE("family not found", pStarsymbolFamily);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("starsymbol family not found", 
OUString("starsymbol"),
+                                 pStarsymbolFamily->GetSearchName());
+}
+
+void 
VclPhysicalFontCollectionTest::testShouldFindOpensymbolFamilyWithMultipleSymbolFamilies()
+{
+    vcl::font::PhysicalFontCollection aFontCollection;
+
+    vcl::font::PhysicalFontFamily* pOpenSymbolFamily
+        = aFontCollection.FindOrCreateFontFamily("opensymbol");
+    AddNormalFontFace(pOpenSymbolFamily, "opensymbol");
+
+    vcl::font::PhysicalFontFamily* pWingDingsFontFamily
+        = aFontCollection.FindOrCreateFontFamily("wingdings");
+    AddNormalFontFace(pWingDingsFontFamily, "wingdings");
+
+    vcl::font::PhysicalFontFamily* pStarsymbolFamily = 
aFontCollection.FindFontFamilyByAttributes(
+        ImplFontAttrs::Symbol, WEIGHT_NORMAL, WIDTH_NORMAL, ITALIC_NORMAL, "");
+    CPPUNIT_ASSERT_MESSAGE("family not found", pStarsymbolFamily);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("opensymbol family not found", 
OUString("opensymbol"),
+                                 pStarsymbolFamily->GetSearchName());
+}
+
+void VclPhysicalFontCollectionTest::testShouldFindSymboltypeFamily()
+{
+    vcl::font::PhysicalFontCollection aFontCollection;
+    vcl::font::PhysicalFontFamily* pFontFamily
+        = aFontCollection.FindOrCreateFontFamily("testsymbol");
+
+    AddNormalFontFace(pFontFamily, "testsymbol");
+
+    vcl::font::PhysicalFontFamily* pSymbolFamily = 
aFontCollection.FindFontFamilyByAttributes(
+        ImplFontAttrs::Symbol, WEIGHT_NORMAL, WIDTH_NORMAL, ITALIC_NORMAL, "");
+    CPPUNIT_ASSERT_MESSAGE("family not found", pSymbolFamily);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("test symbol family not found", 
OUString("testsymbol"),
+                                 pSymbolFamily->GetSearchName());
+}
+
+void VclPhysicalFontCollectionTest::testShouldFindSymbolFamilyByMatchType()
+{
+    // TODO: figure out how to test matchtype with ImplFontAttrs::Full
+
+    vcl::font::PhysicalFontCollection aFontCollection;
+    vcl::font::PhysicalFontFamily* pFontFamily = 
aFontCollection.FindOrCreateFontFamily("symbols");
+
+    FontAttributes aFontAttr;
+    aFontAttr.SetFamilyName("symbols");
+    aFontAttr.SetSymbolFlag(true);
+    aFontAttr.SetWeight(WEIGHT_NORMAL);
+    pFontFamily->AddFontFace(new TestFontFace(aFontAttr, FONTID));
+
+    vcl::font::PhysicalFontFamily* pSymbolFamily = 
aFontCollection.FindFontFamilyByAttributes(
+        ImplFontAttrs::Symbol, WEIGHT_NORMAL, WIDTH_NORMAL, ITALIC_NORMAL, "");
+    CPPUNIT_ASSERT_MESSAGE("family not found", pSymbolFamily);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("test symbol family not found", 
OUString("symbols"),
+                                 pSymbolFamily->GetSearchName());
+}
+
+void VclPhysicalFontCollectionTest::testImpossibleSymbolFamily()
+{
+    vcl::font::PhysicalFontCollection aFontCollection;
+    vcl::font::PhysicalFontFamily* pFontFamily
+        = aFontCollection.FindOrCreateFontFamily("testsymbolfamily");
+
+    FontAttributes aFontAttr;
+    aFontAttr.SetFamilyName("testsymbolfamily");
+    aFontAttr.SetSymbolFlag(true);
+    aFontAttr.SetWeight(WEIGHT_NORMAL);
+    TestFontFace* pFontFace = new TestFontFace(aFontAttr, FONTID);
+    pFontFamily->AddFontFace(pFontFace);
+
+    CPPUNIT_ASSERT_MESSAGE("match for family not possible, but was found 
anyway",
+                           
!aFontCollection.FindFontFamilyByAttributes(ImplFontAttrs::Normal,
+                                                                       
WEIGHT_NORMAL, WIDTH_NORMAL,
+                                                                       
ITALIC_NORMAL, ""));
+}
+
+void VclPhysicalFontCollectionTest::testShouldNotFindSymbolFamily()
+{
+    vcl::font::PhysicalFontCollection aFontCollection;
+    vcl::font::PhysicalFontFamily* pFontFamily = 
aFontCollection.FindOrCreateFontFamily("symbol");
+    AddNormalFontFace(pFontFamily, "symbol");
+
+    CPPUNIT_ASSERT_MESSAGE(
+        "Family found", !aFontCollection.FindFontFamilyByAttributes(
+                            ImplFontAttrs::Normal, WEIGHT_NORMAL, 
WIDTH_NORMAL, ITALIC_NONE, ""));
+}
+
+void VclPhysicalFontCollectionTest::testShouldMatchFamilyName()
+{
+    vcl::font::PhysicalFontCollection aFontCollection;
+
+    // note that for this test, it is irrelevant what the search name is for 
PhysicalFontFamily,
+    // the font searches the family name and uses the search parameter of 
FindFontFamilyByAttributes()
+    vcl::font::PhysicalFontFamily* pFontFamily
+        = aFontCollection.FindOrCreateFontFamily(u"Matching family name");
+    AddNormalFontFace(pFontFamily, GetEnglishSearchFontName(u"Matching family 
name"));
+
+    CPPUNIT_ASSERT_MESSAGE("No family found",
+                           aFontCollection.FindFontFamilyByAttributes(
+                               ImplFontAttrs::Normal, WEIGHT_NORMAL, 
WIDTH_NORMAL, ITALIC_NONE,
+                               "Matching family name"));
+}
+
+void VclPhysicalFontCollectionTest::testShouldMatchBrushScriptFamily()
+{
+    vcl::font::PhysicalFontCollection aFontCollection;
+    vcl::font::PhysicalFontFamily* pFontFamily = 
aFontCollection.FindOrCreateFontFamily("script");
+    AddNormalFontFace(pFontFamily, "script");
+
+    CPPUNIT_ASSERT_MESSAGE("Brush script family not found",
+                           
aFontCollection.FindFontFamilyByAttributes(ImplFontAttrs::BrushScript,
+                                                                      
WEIGHT_NORMAL, WIDTH_NORMAL,
+                                                                      
ITALIC_NONE, ""));
+}
+
+void VclPhysicalFontCollectionTest::testShouldNotMatchBrushScriptFamily()
+{
+    vcl::font::PhysicalFontCollection aFontCollection;
+    vcl::font::PhysicalFontFamily* pFontFamily
+        = aFontCollection.FindOrCreateFontFamily("testfamily");
+    AddNormalFontFace(pFontFamily, "testfamily");
+
+    CPPUNIT_ASSERT_MESSAGE("Brush script family found",
+                           
!aFontCollection.FindFontFamilyByAttributes(ImplFontAttrs::BrushScript,
+                                                                       
WEIGHT_NORMAL, WIDTH_NORMAL,
+                                                                       
ITALIC_NONE, ""));
+}
+
+void VclPhysicalFontCollectionTest::testShouldMatchFixedFamily()
+{
+    vcl::font::PhysicalFontCollection aFontCollection;
+
+    // note that for this test, it is irrelevant what the search name is for 
PhysicalFontFamily,
+    // the font searches the family name and uses the search parameter of 
FindFontFamilyByAttributes()
+    vcl::font::PhysicalFontFamily* pFontFamily
+        = 
aFontCollection.FindOrCreateFontFamily(GetEnglishSearchFontName(u"Matching 
family name"));
+
+    FontAttributes aFontAttr;
+    aFontAttr.SetFamilyName(GetEnglishSearchFontName(u"Matching family name"));
+    aFontAttr.SetFamilyType(FAMILY_MODERN);
+    aFontAttr.SetWeight(WEIGHT_NORMAL);
+    TestFontFace* pFontFace = new TestFontFace(aFontAttr, FONTID);
+    pFontFamily->AddFontFace(pFontFace);
+
+    CPPUNIT_ASSERT_MESSAGE("No fixed family found",
+                           aFontCollection.FindFontFamilyByAttributes(
+                               ImplFontAttrs::Fixed, WEIGHT_NORMAL, 
WIDTH_NORMAL, ITALIC_NONE,
+                               GetEnglishSearchFontName(u"Matching family 
name")));
+}
+
+void VclPhysicalFontCollectionTest::testShouldNotMatchFixedFamily()
+{
+    vcl::font::PhysicalFontCollection aFontCollection;
+
+    // note that for this test, it is irrelevant what the search name is for 
PhysicalFontFamily,
+    // the font searches the family name and uses the search parameter of 
FindFontFamilyByAttributes()
+    vcl::font::PhysicalFontFamily* pFontFamily
+        = 
aFontCollection.FindOrCreateFontFamily(GetEnglishSearchFontName(u"Matching 
family name"));
+
+    FontAttributes aFontAttr;
+    aFontAttr.SetFamilyName(GetEnglishSearchFontName(u"Matching family name"));
+    aFontAttr.SetFamilyType(FAMILY_SWISS);
+    aFontAttr.SetWeight(WEIGHT_NORMAL);
+    TestFontFace* pFontFace = new TestFontFace(aFontAttr, FONTID);
+    pFontFamily->AddFontFace(pFontFace);
+
+    CPPUNIT_ASSERT_MESSAGE("Fixed family found",
+                           aFontCollection.FindFontFamilyByAttributes(
+                               ImplFontAttrs::Fixed, WEIGHT_NORMAL, 
WIDTH_NORMAL, ITALIC_NONE,
+                               GetEnglishSearchFontName(u"Matching family 
name")));
+}
+
+void VclPhysicalFontCollectionTest::testShouldMatchSerifFamily()
+{
+    vcl::font::PhysicalFontCollection aFontCollection;
+    vcl::font::PhysicalFontFamily* pFontFamily = 
aFontCollection.FindOrCreateFontFamily("serif");
+
+    FontAttributes aFontAttr;
+    aFontAttr.SetFamilyName("serif");
+    aFontAttr.SetFamilyType(FAMILY_ROMAN);
+    aFontAttr.SetWeight(WEIGHT_NORMAL);
+    TestFontFace* pFontFace = new TestFontFace(aFontAttr, FONTID);
+    pFontFamily->AddFontFace(pFontFace);
+
+    CPPUNIT_ASSERT_MESSAGE("Serif family not found",
+                           aFontCollection.FindFontFamilyByAttributes(
+                               ImplFontAttrs::Serif, WEIGHT_NORMAL, 
WIDTH_NORMAL, ITALIC_NONE, ""));
+}
+
+void VclPhysicalFontCollectionTest::testShouldNotMatchSerifFamily()
+{
+    vcl::font::PhysicalFontCollection aFontCollection;
+    vcl::font::PhysicalFontFamily* pFontFamily
+        = aFontCollection.FindOrCreateFontFamily("sansseriftest");
+
+    FontAttributes aFontAttr;
+    aFontAttr.SetFamilyName("sansseriftest");
+    aFontAttr.SetFamilyType(FAMILY_SWISS);
+    aFontAttr.SetWeight(WEIGHT_NORMAL);
+    TestFontFace* pFontFace = new TestFontFace(aFontAttr, FONTID);
+    pFontFamily->AddFontFace(pFontFace);
+
+    CPPUNIT_ASSERT_MESSAGE("Serif family found",
+                           !aFontCollection.FindFontFamilyByAttributes(
+                               ImplFontAttrs::Serif, WEIGHT_NORMAL, 
WIDTH_NORMAL, ITALIC_NONE, ""));
+}
+
+void VclPhysicalFontCollectionTest::testShouldMatchSansSerifFamily()
+{
+    vcl::font::PhysicalFontCollection aFontCollection;
+    vcl::font::PhysicalFontFamily* pFontFamily
+        = aFontCollection.FindOrCreateFontFamily("sansserif");
+
+    FontAttributes aFontAttr;
+    aFontAttr.SetFamilyName("sansserif");
+    aFontAttr.SetFamilyType(FAMILY_SWISS);
+    aFontAttr.SetWeight(WEIGHT_NORMAL);
+    TestFontFace* pFontFace = new TestFontFace(aFontAttr, FONTID);
+    pFontFamily->AddFontFace(pFontFace);
+
+    CPPUNIT_ASSERT_MESSAGE("SansSerif family not found",
+                           
aFontCollection.FindFontFamilyByAttributes(ImplFontAttrs::SansSerif,
+                                                                      
WEIGHT_NORMAL, WIDTH_NORMAL,
+                                                                      
ITALIC_NONE, ""));
+}
+
+void VclPhysicalFontCollectionTest::testShouldNotMatchSansSerifFamily()
+{
+    vcl::font::PhysicalFontCollection aFontCollection;
+    vcl::font::PhysicalFontFamily* pFontFamily = 
aFontCollection.FindOrCreateFontFamily("serif");
+
+    FontAttributes aFontAttr;
+    aFontAttr.SetFamilyName("serif");
+    aFontAttr.SetFamilyType(FAMILY_ROMAN);
+    aFontAttr.SetWeight(WEIGHT_NORMAL);
+    TestFontFace* pFontFace = new TestFontFace(aFontAttr, FONTID);
+    pFontFamily->AddFontFace(pFontFace);
+
+    CPPUNIT_ASSERT_MESSAGE("SansSerif family found", 
!aFontCollection.FindFontFamilyByAttributes(
+                                                         
ImplFontAttrs::SansSerif, WEIGHT_NORMAL,
+                                                         WIDTH_NORMAL, 
ITALIC_NONE, ""));
+}
+
+void VclPhysicalFontCollectionTest::testShouldMatchDecorativeFamily()
+{
+    vcl::font::PhysicalFontCollection aFontCollection;
+    vcl::font::PhysicalFontFamily* pFontFamily
+        = aFontCollection.FindOrCreateFontFamily("decorative");
+
+    FontAttributes aFontAttr;
+    aFontAttr.SetFamilyName("decoractive");
+    aFontAttr.SetFamilyType(FAMILY_DECORATIVE);
+    aFontAttr.SetWeight(WEIGHT_MEDIUM);
+    TestFontFace* pFontFace = new TestFontFace(aFontAttr, FONTID);
+    pFontFamily->AddFontFace(pFontFace);
+
+    CPPUNIT_ASSERT_MESSAGE("Decorative family not found",
+                           
aFontCollection.FindFontFamilyByAttributes(ImplFontAttrs::Decorative,
+                                                                      
WEIGHT_NORMAL, WIDTH_NORMAL,
+                                                                      
ITALIC_NORMAL, ""));
+}
+
+void VclPhysicalFontCollectionTest::testShouldFindTitlingFamily()
+{
+    vcl::font::PhysicalFontCollection aFontCollection;
+    vcl::font::PhysicalFontFamily* pFontFamily
+        = aFontCollection.FindOrCreateFontFamily("testtitling");
+    AddNormalFontFace(pFontFamily, "testtitling");
+
+    CPPUNIT_ASSERT_MESSAGE("Titling family not found", 
aFontCollection.FindFontFamilyByAttributes(
+                                                           
ImplFontAttrs::Titling, WEIGHT_NORMAL,
+                                                           WIDTH_NORMAL, 
ITALIC_NORMAL, ""));
+}
+
+void VclPhysicalFontCollectionTest::testShouldFindCapitalsFamily()
+{
+    vcl::font::PhysicalFontCollection aFontCollection;
+    vcl::font::PhysicalFontFamily* pFontFamily = 
aFontCollection.FindOrCreateFontFamily("testcaps");
+    AddNormalFontFace(pFontFamily, "testcaps");
+
+    CPPUNIT_ASSERT_MESSAGE("All-caps family not found", 
aFontCollection.FindFontFamilyByAttributes(
+                                                            
ImplFontAttrs::Capitals, WEIGHT_NORMAL,
+                                                            WIDTH_NORMAL, 
ITALIC_NORMAL, ""));
+}
+
+void VclPhysicalFontCollectionTest::testShouldFindFamilyName()
+{
+    vcl::font::PhysicalFontCollection aFontCollection;
+    vcl::font::PhysicalFontFamily* pFontFamily
+        = 
aFontCollection.FindOrCreateFontFamily(GetEnglishSearchFontName(u"Test font 
name"));
+    AddNormalFontFace(pFontFamily, GetEnglishSearchFontName(u"Test font 
name"));
+
+    CPPUNIT_ASSERT_MESSAGE("Cannot find font name",
+                           aFontCollection.FindFontFamilyByAttributes(
+                               ImplFontAttrs::Capitals, WEIGHT_NORMAL, 
WIDTH_NORMAL, ITALIC_NORMAL,
+                               GetEnglishSearchFontName(u"Test font name")));
+}
+
+void VclPhysicalFontCollectionTest::testShouldFindOtherStyleFamily()
+{
+    vcl::font::PhysicalFontCollection aFontCollection;
+    vcl::font::PhysicalFontFamily* pFontFamily
+        = aFontCollection.FindOrCreateFontFamily("testoldstyle");
+    AddNormalFontFace(pFontFamily, "testoldstyle");
+
+    CPPUNIT_ASSERT_MESSAGE("Did not find font name", 
aFontCollection.FindFontFamilyByAttributes(
+                                                         
ImplFontAttrs::OtherStyle, WEIGHT_NORMAL,
+                                                         WIDTH_NORMAL, 
ITALIC_NORMAL, ""));
+}
+
+void VclPhysicalFontCollectionTest::testShouldNotFindOtherStyleFamily()
+{
+    vcl::font::PhysicalFontCollection aFontCollection;
+    vcl::font::PhysicalFontFamily* pFontFamily = 
aFontCollection.FindOrCreateFontFamily("monotype");
+    AddNormalFontFace(pFontFamily, "monotype");
+
+    CPPUNIT_ASSERT_MESSAGE("Found font name", 
!aFontCollection.FindFontFamilyByAttributes(
+                                                  ImplFontAttrs::OtherStyle, 
WEIGHT_NORMAL,
+                                                  WIDTH_NORMAL, ITALIC_NORMAL, 
""));
+}
+
+void VclPhysicalFontCollectionTest::testShouldFindSchoolbookFamily()
+{
+    vcl::font::PhysicalFontCollection aFontCollection;
+    vcl::font::PhysicalFontFamily* pFontFamily
+        = aFontCollection.FindOrCreateFontFamily("testschoolbook");
+    AddNormalFontFace(pFontFamily, "testschoolbook");
+
+    CPPUNIT_ASSERT_MESSAGE("Did not find font name", 
aFontCollection.FindFontFamilyByAttributes(
+                                                         
ImplFontAttrs::Schoolbook, WEIGHT_NORMAL,
+                                                         WIDTH_NORMAL, 
ITALIC_NORMAL, ""));
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(VclPhysicalFontCollectionTest);
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Reply via email to