24 CPDF_TestLinkExtract extractor;
26 const wchar_t*
const kInvalidStrings[] = {
35 for (
const wchar_t* input : kInvalidStrings) {
43 const wchar_t* expected_output;
46 constexpr IOPair kValidStrings[] = {
47 {L"peter@abc.d", L"peter@abc.d"},
48 {L"red.teddy.b@abc.com", L"red.teddy.b@abc.com"},
49 {L"abc_@gmail.com", L"abc_@gmail.com"},
50 {L"dummy-hi@gmail.com",
51 L"dummy-hi@gmail.com"},
52 {L"a..df@gmail.com", L"df@gmail.com"},
53 {L".john@yahoo.com", L"john@yahoo.com"},
54 {L"abc@xyz.org?/", L"abc@xyz.org"},
55 {L"fan{abc@xyz.org", L"abc@xyz.org"},
56 {L"fan@g.com..", L"fan@g.com"},
57 {L"CAP.cap@Gmail.Com", L"CAP.cap@Gmail.Com"},
59 for (
const auto& it : kValidStrings) {
62 expected_str
+= it.expected_output;
64 EXPECT_EQ(expected_str.c_str(), text_str);
69 CPDF_TestLinkExtract extractor;
72 const wchar_t*
const kInvalidCases[] = {
81 L"http//[example.com",
82 L"http//[00:00:00:00:00:00",
86 for (
const wchar_t* input : kInvalidCases) {
88 EXPECT_FALSE(maybe_link.has_value()) << input;
94 const wchar_t*
const input_string;
95 const wchar_t*
const url_extracted;
96 const size_t start_offset;
99 const ValidCase kValidCases[] = {
100 {L"http://www.example.com", L"http://www.example.com", 0,
102 {L"http://www.example.com:88", L"http://www.example.com:88", 0,
104 {L"http://test@www.example.com", L"http://test@www.example.com", 0,
106 {L"http://test:test@example.com", L"http://test:test@example.com", 0,
108 {L"http://example", L"http://example", 0,
110 {L"http////www.server", L"http://www.server", 8,
112 {L"http:/www.abc.com", L"http://www.abc.com", 6,
114 {L"www.a.b.c", L"http://www.a.b.c", 0, 9},
115 {L"https://a.us", L"https://a.us", 0, 12},
116 {L"https://www.t.us", L"https://www.t.us", 0, 16},
117 {L"www.example-test.com", L"http://www.example-test.com", 0,
119 {L"www.example.com,", L"http://www.example.com", 0,
121 {L"www.example.com;(", L"http://www.example.com", 0,
123 {L"test:www.abc.com", L"http://www.abc.com", 5,
125 {L"(http://www.abc.com)", L"http://www.abc.com", 1,
127 {L"0(http://www.abc.com)0", L"http://www.abc.com", 2,
129 {L"0(www.abc.com)0", L"http://www.abc.com", 2,
131 {L"http://www.abc.com)0", L"http://www.abc.com)0", 0,
133 {L"{(<http://www.abc.com>)}", L"http://www.abc.com", 3,
135 {L"[http://www.abc.com/z(1)]", L"http://www.abc.com/z(1)", 1,
137 {L"(http://www.abc.com/z(1))", L"http://www.abc.com/z(1)", 1,
139 {L"\"http://www.abc.com\"", L"http://www.abc.com", 1,
141 {L"www.g.com..", L"http://www.g.com..", 0, 11},
144 {L"http://192.168.0.1", L"http://192.168.0.1", 0, 18},
145 {L"http://192.168.0.1:80", L"http://192.168.0.1:80", 0,
147 {L"http://[aa::00:bb::00:cc:00]", L"http://[aa::00:bb::00:cc:00]", 0,
149 {L"http://[aa::00:bb::00:cc:00]:12", L"http://[aa::00:bb::00:cc:00]:12",
151 {L"http://[aa]:12", L"http://[aa]:12", 0,
153 {L"http://[aa]:12abc", L"http://[aa]:12", 0,
155 {L"http://[aa]:", L"http://[aa]", 0, 11},
158 {L"www.abc.com/#%%^&&*(", L"http://www.abc.com/#%%^&&*(", 0, 20},
159 {L"www.a.com/#a=@?q=rr&r=y", L"http://www.a.com/#a=@?q=rr&r=y", 0, 23},
160 {L"http://a.com/1/2/3/4\5\6", L"http://a.com/1/2/3/4\5\6", 0, 22},
161 {L"http://www.example.com/foo;bar", L"http://www.example.com/foo;bar", 0,
165 {L"http://ex[am]ple", L"http://ex[am]ple", 0, 16},
166 {L"http://:example.com", L"http://:example.com", 0, 19},
167 {L"http://((())/path?", L"http://((())/path?", 0, 18},
168 {L"http:////abc.server", L"http:////abc.server", 0, 19},
171 {L"www.测试.net", L"http://www.测试.net", 0, 10},
172 {L"www.测试。net。", L"http://www.测试。net。", 0, 11},
173 {L"www.测试.net;", L"http://www.测试.net;", 0, 11},
175 for (
const auto& it : kValidCases) {
176 auto maybe_link = extractor.CheckWebLink(it.input_string);
177 ASSERT_TRUE(maybe_link.has_value()) << it.input_string;
178 EXPECT_EQ(it.url_extracted, maybe_link.value().m_strUrl);
179 EXPECT_EQ(it.start_offset, maybe_link.value().m_Start) << it.input_string;
180 EXPECT_EQ(it.count, maybe_link.value().m_Count) << it.input_string;