diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk> | 2020-05-02 14:35:23 +0200 |
---|---|---|
committer | Tomaž Vajngerl <quikee@gmail.com> | 2020-05-03 19:37:13 +0200 |
commit | bb459008de9d410e6e7ea982ce30aa22f70ae849 (patch) | |
tree | d6280d2fb247f81372f4a064aa0d1e31d20c252d /vcl/qa | |
parent | 76803b37038f47e7c74bbf3896c2a9b16a45909e (diff) |
vcl: add DetectorTools + tests, refactor array string matching
Add DetectorTools with byte array searching and matching to a
input string (or another byte array). This refactors the existing
function in GraphicFormatDetector. It needs to go into its own
header so that the function(s) can be tested easily. Replace
the previous searchEntry implementation with refactored one in
the source code.
Change-Id: I59d30b694e13f28d6366f1a99fe2ef2ea3c1a07d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93339
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Diffstat (limited to 'vcl/qa')
-rw-r--r-- | vcl/qa/cppunit/GraphicFormatDetectorTest.cxx | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/vcl/qa/cppunit/GraphicFormatDetectorTest.cxx b/vcl/qa/cppunit/GraphicFormatDetectorTest.cxx index 90183279dbc9..155ff089811b 100644 --- a/vcl/qa/cppunit/GraphicFormatDetectorTest.cxx +++ b/vcl/qa/cppunit/GraphicFormatDetectorTest.cxx @@ -12,6 +12,7 @@ #include <unotest/bootstrapfixturebase.hxx> #include <graphic/GraphicFormatDetector.hxx> +#include <graphic/DetectorTools.hxx> #include <tools/stream.hxx> @@ -41,6 +42,8 @@ class GraphicFormatDetectorTest : public test::BootstrapFixtureBase void testDetectSVG(); void testDetectSVGZ(); void testDetectPDF(); + void testMatchArray(); + void testCheckArrayForMatchingStrings(); CPPUNIT_TEST_SUITE(GraphicFormatDetectorTest); CPPUNIT_TEST(testDetectMET); @@ -58,6 +61,8 @@ class GraphicFormatDetectorTest : public test::BootstrapFixtureBase CPPUNIT_TEST(testDetectSVG); CPPUNIT_TEST(testDetectSVGZ); CPPUNIT_TEST(testDetectPDF); + CPPUNIT_TEST(testMatchArray); + CPPUNIT_TEST(testCheckArrayForMatchingStrings); CPPUNIT_TEST_SUITE_END(); }; @@ -286,6 +291,107 @@ void GraphicFormatDetectorTest::testDetectPDF() CPPUNIT_ASSERT_EQUAL(OUString("PDF"), rFormatExtension); } +void GraphicFormatDetectorTest::testMatchArray() +{ + std::string aString("<?xml version=\"1.0\" standalone=\"no\"?>\n" + "<svg width=\"5cm\" height=\"4cm\" version=\"1.1\"\n" + "xmlns=\"http://www.w3.org/2000/svg\">\n" + "</svg>"); + + const char* pCompleteStringPointer = aString.c_str(); + const char* pMatchPointer; + int nCheckSize = aString.size(); + + // Check beginning of the input string + pMatchPointer = vcl::matchArrayWithString(pCompleteStringPointer, nCheckSize, "<?xml"); + CPPUNIT_ASSERT(pMatchPointer != nullptr); + CPPUNIT_ASSERT_EQUAL(0, int(pMatchPointer - pCompleteStringPointer)); + CPPUNIT_ASSERT_EQUAL(true, OString(pMatchPointer).startsWith("<?xml")); + + // Check middle of the input string + pMatchPointer = vcl::matchArrayWithString(aString.c_str(), nCheckSize, "version"); + CPPUNIT_ASSERT(pMatchPointer != nullptr); + CPPUNIT_ASSERT_EQUAL(6, int(pMatchPointer - pCompleteStringPointer)); + CPPUNIT_ASSERT_EQUAL(true, OString(pMatchPointer).startsWith("version")); + + pMatchPointer = vcl::matchArrayWithString(aString.c_str(), nCheckSize, "<svg"); + CPPUNIT_ASSERT(pMatchPointer != nullptr); + CPPUNIT_ASSERT_EQUAL(38, int(pMatchPointer - pCompleteStringPointer)); + CPPUNIT_ASSERT_EQUAL(true, OString(pMatchPointer).startsWith("<svg")); + + // Check end of the input string + pMatchPointer = vcl::matchArrayWithString(aString.c_str(), nCheckSize, "/svg>"); + CPPUNIT_ASSERT(pMatchPointer != nullptr); + CPPUNIT_ASSERT_EQUAL(119, int(pMatchPointer - pCompleteStringPointer)); + CPPUNIT_ASSERT_EQUAL(true, OString(pMatchPointer).startsWith("/svg>")); + + // Check that non-existing search string + pMatchPointer = vcl::matchArrayWithString(aString.c_str(), nCheckSize, "none"); + CPPUNIT_ASSERT(pMatchPointer == nullptr); +} + +void GraphicFormatDetectorTest::testCheckArrayForMatchingStrings() +{ + std::string aString("<?xml version=\"1.0\" standalone=\"no\"?>\n" + "<svg width=\"5cm\" height=\"4cm\" version=\"1.1\"\n" + "xmlns=\"http://www.w3.org/2000/svg\">\n" + "</svg>"); + const char* pCompleteStringPointer = aString.c_str(); + int nCheckSize = aString.size(); + bool bResult; + + // check beginning string + bResult = vcl::checkArrayForMatchingStrings(pCompleteStringPointer, nCheckSize, { "<?xml" }); + CPPUNIT_ASSERT_EQUAL(true, bResult); + + // check ending string + bResult = vcl::checkArrayForMatchingStrings(pCompleteStringPointer, nCheckSize, { "/svg>" }); + CPPUNIT_ASSERT_EQUAL(true, bResult); + + // check middle string + bResult = vcl::checkArrayForMatchingStrings(pCompleteStringPointer, nCheckSize, { "version" }); + CPPUNIT_ASSERT_EQUAL(true, bResult); + + // check beginning and then ending string + bResult = vcl::checkArrayForMatchingStrings(pCompleteStringPointer, nCheckSize, + { "<?xml", "/svg>" }); + CPPUNIT_ASSERT_EQUAL(true, bResult); + + // check ending and then beginning string + bResult = vcl::checkArrayForMatchingStrings(pCompleteStringPointer, nCheckSize, + { "/svg>", "<?xml" }); + CPPUNIT_ASSERT_EQUAL(false, bResult); + + // check middle strings + bResult = vcl::checkArrayForMatchingStrings(pCompleteStringPointer, nCheckSize, + { "version", "<svg" }); + CPPUNIT_ASSERT_EQUAL(true, bResult); + + // check beginning, middle and ending strings + bResult = vcl::checkArrayForMatchingStrings(pCompleteStringPointer, nCheckSize, + { "<?xml", "version", "<svg", "/svg>" }); + CPPUNIT_ASSERT_EQUAL(true, bResult); + + // check non-existing + bResult = vcl::checkArrayForMatchingStrings(pCompleteStringPointer, nCheckSize, { "none" }); + CPPUNIT_ASSERT_EQUAL(false, bResult); + + // check non-existing on the beginning + bResult = vcl::checkArrayForMatchingStrings(pCompleteStringPointer, nCheckSize, + { "none", "version", "<svg", "/svg>" }); + CPPUNIT_ASSERT_EQUAL(false, bResult); + + // check non-existing on the end + bResult = vcl::checkArrayForMatchingStrings(pCompleteStringPointer, nCheckSize, + { "<?xml", "version", "<svg", "none" }); + CPPUNIT_ASSERT_EQUAL(false, bResult); + + // check non-existing after the end + bResult = vcl::checkArrayForMatchingStrings(pCompleteStringPointer, nCheckSize, + { "<?xml", "/svg>", "none" }); + CPPUNIT_ASSERT_EQUAL(false, bResult); +} + } // namespace CPPUNIT_TEST_SUITE_REGISTRATION(GraphicFormatDetectorTest); |