// Copyright 2015 PDFium Authors. All rights reserved.
|
// Use of this source code is governed by a BSD-style license that can be
|
// found in the LICENSE file.
|
|
#include "core/fpdftext/include/cpdf_linkextract.h"
|
|
#include "testing/gtest/include/gtest/gtest.h"
|
|
// Class to help test functions in CPDF_LinkExtract class.
|
class CPDF_TestLinkExtract : public CPDF_LinkExtract {
|
public:
|
CPDF_TestLinkExtract() : CPDF_LinkExtract(nullptr) {}
|
|
private:
|
// Add test cases as friends to access protected member functions.
|
// Access CheckMailLink.
|
FRIEND_TEST(fpdf_text_int, CheckMailLink);
|
};
|
|
TEST(fpdf_text_int, CheckMailLink) {
|
CPDF_TestLinkExtract extractor;
|
// Check cases that fail to extract valid mail link.
|
const wchar_t* invalid_strs[] = {
|
L"",
|
L"peter.pan", // '@' is required.
|
L"abc@server", // Domain name needs at least one '.'.
|
L"abc.@gmail.com", // '.' can not immediately precede '@'.
|
L"abc@xyz&q.org", // Domain name should not contain '&'.
|
L"abc@.xyz.org", // Domain name should not start with '.'.
|
L"fan@g..com" // Domain name should not have consecutive '.'
|
};
|
for (size_t i = 0; i < FX_ArraySize(invalid_strs); ++i) {
|
CFX_WideString text_str(invalid_strs[i]);
|
EXPECT_FALSE(extractor.CheckMailLink(text_str));
|
}
|
|
// Check cases that can extract valid mail link.
|
// An array of {input_string, expected_extracted_email_address}.
|
const wchar_t* valid_strs[][2] = {
|
{L"peter@abc.d", L"peter@abc.d"},
|
{L"red.teddy.b@abc.com", L"red.teddy.b@abc.com"},
|
{L"abc_@gmail.com", L"abc_@gmail.com"}, // '_' is ok before '@'.
|
{L"dummy-hi@gmail.com",
|
L"dummy-hi@gmail.com"}, // '-' is ok in user name.
|
{L"a..df@gmail.com", L"df@gmail.com"}, // Stop at consecutive '.'.
|
{L".john@yahoo.com", L"john@yahoo.com"}, // Remove heading '.'.
|
{L"abc@xyz.org?/", L"abc@xyz.org"}, // Trim ending invalid chars.
|
{L"fan{abc@xyz.org", L"abc@xyz.org"}, // Trim beginning invalid chars.
|
{L"fan@g.com..", L"fan@g.com"}, // Trim the ending periods.
|
{L"CAP.cap@Gmail.Com", L"CAP.cap@Gmail.Com"}, // Keep the original case.
|
};
|
for (size_t i = 0; i < FX_ArraySize(valid_strs); ++i) {
|
CFX_WideString text_str(valid_strs[i][0]);
|
CFX_WideString expected_str(L"mailto:");
|
expected_str += valid_strs[i][1];
|
EXPECT_TRUE(extractor.CheckMailLink(text_str));
|
EXPECT_STREQ(text_str.c_str(), expected_str.c_str());
|
}
|
}
|