Home | History | Annotate | Download | only in fpdftext
      1 // Copyright 2015 PDFium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "testing/gtest/include/gtest/gtest.h"
      6 
      7 #include "core/src/fpdftext/text_int.h"
      8 
      9 // Class to help test functions in CPDF_LinkExtract class.
     10 class CPDF_TestLinkExtract : public CPDF_LinkExtract {
     11  private:
     12   // Add test cases as friends to access protected member functions.
     13   // Access CheckMailLink.
     14   FRIEND_TEST(fpdf_text_int, CheckMailLink);
     15 };
     16 
     17 TEST(fpdf_text_int, CheckMailLink) {
     18   CPDF_TestLinkExtract extractor;
     19   // Check cases that fail to extract valid mail link.
     20   const wchar_t* invalid_strs[] = {
     21       L"",
     22       L"peter.pan"        // '@' is required.
     23       L"abc@server",      // Domain name needs at least one '.'.
     24       L"abc. (at) gmail.com",  // '.' can not immediately precede '@'.
     25       L"abc@xyz&q.org",   // Domain name should not contain '&'.
     26       L"abc (at) .xyz.org",    // Domain name should not start with '.'.
     27       L"fan (at) g..com"       // Domain name should not have consecutive '.'
     28   };
     29   for (int i = 0; i < FX_ArraySize(invalid_strs); ++i) {
     30     CFX_WideString text_str(invalid_strs[i]);
     31     EXPECT_FALSE(extractor.CheckMailLink(text_str));
     32   }
     33 
     34   // Check cases that can extract valid mail link.
     35   // An array of {input_string, expected_extracted_email_address}.
     36   const wchar_t* valid_strs[][2] = {
     37       {L"peter (at) abc.d", L"peter (at) abc.d"},
     38       {L"red.teddy.b (at) abc.com", L"red.teddy.b (at) abc.com"},
     39       {L"abc_ (at) gmail.com", L"abc_ (at) gmail.com"},  // '_' is ok before '@'.
     40       {L"dummy-hi (at) gmail.com",
     41        L"dummy-hi (at) gmail.com"},                  // '-' is ok in user name.
     42       {L"a..df (at) gmail.com", L"df (at) gmail.com"},    // Stop at consecutive '.'.
     43       {L".john (at) yahoo.com", L"john (at) yahoo.com"},  // Remove heading '.'.
     44       {L"abc (at) xyz.org?/", L"abc (at) xyz.org"},       // Trim ending invalid chars.
     45       {L"fan{abc (at) xyz.org", L"abc (at) xyz.org"},     // Trim beginning invalid chars.
     46       {L"fan (at) g.com..", L"fan (at) g.com"},           // Trim the ending periods.
     47       {L"CAP.cap (at) Gmail.Com", L"CAP.cap (at) Gmail.Com"},  // Keep the original case.
     48   };
     49   for (int i = 0; i < FX_ArraySize(valid_strs); ++i) {
     50     CFX_WideString text_str(valid_strs[i][0]);
     51     CFX_WideString expected_str(L"mailto:");
     52     expected_str += valid_strs[i][1];
     53     EXPECT_TRUE(extractor.CheckMailLink(text_str));
     54     EXPECT_STREQ(text_str.c_str(), expected_str.c_str());
     55   }
     56 }
     57