// Copyright 2008 The Closure Library Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS-IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
goog.provide('goog.string.linkifyTest');
goog.setTestOnly('goog.string.linkifyTest');
goog.require('goog.dom');
goog.require('goog.dom.TagName');
goog.require('goog.dom.safe');
goog.require('goog.html.SafeHtml');
goog.require('goog.string');
goog.require('goog.string.linkify');
goog.require('goog.testing.dom');
goog.require('goog.testing.jsunit');
var div = goog.dom.createElement(goog.dom.TagName.DIV);
function assertLinkify(comment, input, expected, opt_preserveNewlines) {
assertEquals(
comment, expected,
goog.html.SafeHtml.unwrap(
goog.string.linkify.linkifyPlainTextAsHtml(
input, {rel: '', target: ''}, opt_preserveNewlines)));
}
function testContainsNoLink() {
assertLinkify(
'Text does not contain any links', 'Text with no links in it.',
'Text with no links in it.');
}
function testContainsALink() {
assertLinkify(
'Text only contains a link', 'http://www.google.com/',
'http://www.google.com/<\/a>');
}
function testStartsWithALink() {
assertLinkify(
'Text starts with a link',
'http://www.google.com/ is a well known search engine',
'http://www.google.com/<\/a>' +
' is a well known search engine');
}
function testEndsWithALink() {
assertLinkify(
'Text ends with a link',
'Look at this search engine: http://www.google.com/',
'Look at this search engine: ' +
'http://www.google.com/<\/a>');
}
function testContainsOnlyEmail() {
assertLinkify(
'Text only contains an email address', 'bolinfest@google.com',
'bolinfest@google.com<\/a>');
}
function testStartsWithAnEmail() {
assertLinkify(
'Text starts with an email address',
'bolinfest@google.com wrote this test.',
'bolinfest@google.com<\/a>' +
' wrote this test.');
}
function testEndsWithAnEmail() {
assertLinkify(
'Text ends with an email address',
'This test was written by bolinfest@google.com.',
'This test was written by ' +
'bolinfest@google.com<\/a>.');
}
function testUrlWithPortNumber() {
assertLinkify(
'URL with a port number', 'http://www.google.com:80/',
'http://www.google.com:80/<\/a>');
}
function testUrlWithUserPasswordAndPortNumber() {
assertLinkify(
'URL with a user, a password and a port number',
'http://lascap:p4ssw0rd@google.com:80/s?q=a&hl=en',
'' +
'http://lascap:p4ssw0rd@google.com:80/s?q=a&hl=en<\/a>');
}
function testUrlWithUnderscore() {
assertLinkify(
'URL with an underscore', 'http://www_foo.google.com/',
'http://www_foo.google.com/<\/a>');
}
function testInternalUrlWithoutDomain() {
assertLinkify(
'Internal URL without a proper domain', 'http://tracker/1068594',
'http://tracker/1068594<\/a>');
}
function testInternalUrlOneChar() {
assertLinkify(
'Internal URL with a one char domain', 'http://b',
'http://b<\/a>');
}
function testSecureInternalUrlWithoutDomain() {
assertLinkify(
'Secure Internal URL without a proper domain', 'https://review/6594805',
'https://review/6594805<\/a>');
}
function testTwoUrls() {
assertLinkify(
'Text with two URLs in it',
'I use both http://www.google.com and http://yahoo.com, don\'t you?',
'I use both http://www.google.com<\/a> ' +
'and http://yahoo.com<\/a>, ' +
goog.string.htmlEscape('don\'t you?'));
}
function testGetParams() {
assertLinkify(
'URL with GET params', 'http://google.com/?a=b&c=d&e=f',
'' +
'http://google.com/?a=b&c=d&e=f<\/a>');
}
function testGoogleCache() {
assertLinkify(
'Google search result from cache',
'http://66.102.7.104/search?q=cache:I4LoMT6euUUJ:' +
'www.google.com/intl/en/help/features.html+google+cache&hl=en',
'' +
'http://66.102.7.104/search?q=cache:I4LoMT6euUUJ:' +
'www.google.com/intl/en/help/features.html+google+cache&hl=en' +
'<\/a>');
}
function testUrlWithoutHttp() {
assertLinkify(
'URL without http protocol',
'It\'s faster to type www.google.com without the http:// in front.',
goog.string.htmlEscape('It\'s faster to type ') +
'www.google.com' +
'<\/a> without the http:// in front.');
}
function testUrlWithCapitalsWithoutHttp() {
assertLinkify(
'URL with capital letters without http protocol',
'It\'s faster to type Www.google.com without the http:// in front.',
goog.string.htmlEscape('It\'s faster to type ') +
'Www.google.com' +
'<\/a> without the http:// in front.');
}
function testUrlHashBang() {
assertLinkify(
'URL with #!', 'Another test URL: ' +
'https://www.google.com/testurls/#!/page',
'Another test URL: ' +
'' +
'https://www.google.com/testurls/#!/page<\/a>');
}
function testTextLooksLikeUrlWithoutHttp() {
assertLinkify(
'Text looks like an url but is not', 'This showww.is just great: www.is',
'This showww.is just great: www.is<\/a>');
}
function testEmailWithSubdomain() {
assertLinkify(
'Email with a subdomain', 'Send mail to bolinfest@groups.google.com.',
'Send mail to ' +
'bolinfest@groups.google.com<\/a>.');
}
function testEmailWithHyphen() {
assertLinkify(
'Email with a hyphen in the domain name',
'Send mail to bolinfest@google-groups.com.',
'Send mail to ' +
'bolinfest@google-groups.com<\/a>.');
}
function testEmailUsernameWithSpecialChars() {
assertLinkify(
'Email with a hyphen, period, and + in the user name',
'Send mail to bolin-fest+for.um@google.com',
'Send mail to ' +
'bolin-fest+for.um@google.com<\/a>');
assertLinkify(
'Email with all special characters in the user name',
'Send mail to muad\'dib!#$%&\*/=?^_`{|}~@google.com', 'Send mail to ' +
'' +
'muad'dib!#$%&\*/=?^_`{|}~@google.com<\/a>');
}
function testEmailWithUnderscoreInvalid() {
assertLinkify(
'Email with an underscore in the domain name, which is invalid',
'Do not email bolinfest@google_groups.com.',
'Do not email bolinfest@google_groups.com.');
}
function testUrlNotHttp() {
assertLinkify(
'Url using unusual scheme',
'Looking for some goodies: ftp://ftp.google.com/goodstuff/',
'Looking for some goodies: ' +
'' +
'ftp://ftp.google.com/goodstuff/<\/a>');
}
function testJsInjection() {
assertLinkify(
'Text includes some javascript',
'Welcome in hell