190 lines
7.9 KiB
C#
190 lines
7.9 KiB
C#
|
// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
|
|||
|
|
|||
|
using System;
|
|||
|
using System.Linq;
|
|||
|
using System.Web;
|
|||
|
using System.Web.Helpers.Test;
|
|||
|
using System.Web.TestUtil;
|
|||
|
using System.Web.WebPages.Scope;
|
|||
|
using Xunit;
|
|||
|
using Assert = Microsoft.TestCommon.AssertEx;
|
|||
|
|
|||
|
namespace Microsoft.Web.Helpers.Test
|
|||
|
{
|
|||
|
public class LinkShareTest
|
|||
|
{
|
|||
|
private static LinkShareSite[] _allLinkShareSites = new[]
|
|||
|
{
|
|||
|
LinkShareSite.Delicious, LinkShareSite.Digg, LinkShareSite.GoogleBuzz,
|
|||
|
LinkShareSite.Facebook, LinkShareSite.Reddit, LinkShareSite.StumbleUpon, LinkShareSite.Twitter
|
|||
|
};
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void RenderWithFacebookFirst_ReturnsHtmlWithFacebookAndThenOthersTest()
|
|||
|
{
|
|||
|
string pageTitle = "page1";
|
|||
|
string pageLinkBack = "page link back";
|
|||
|
string twitterUserName = String.Empty;
|
|||
|
string twitterTag = String.Empty;
|
|||
|
string actual;
|
|||
|
actual = LinkShare.GetHtml(pageTitle, pageLinkBack, twitterUserName, twitterTag, LinkShareSite.Facebook, LinkShareSite.All).ToString();
|
|||
|
Assert.True(actual.Contains("twitter.com"));
|
|||
|
int pos = actual.IndexOf("facebook.com");
|
|||
|
Assert.True(pos > 0);
|
|||
|
int pos2 = actual.IndexOf("reddit.com");
|
|||
|
Assert.True(pos2 > pos);
|
|||
|
pos2 = actual.IndexOf("digg.com");
|
|||
|
Assert.True(pos2 > pos);
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void BitlyApiKeyThrowsWhenSetToNull()
|
|||
|
{
|
|||
|
Assert.ThrowsArgumentNull(() => LinkShare.BitlyApiKey = null, "value");
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void BitlyApiKeyUsesScopeStorage()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
var value = "value";
|
|||
|
|
|||
|
// Act
|
|||
|
LinkShare.BitlyApiKey = value;
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(LinkShare.BitlyApiKey, value);
|
|||
|
Assert.Equal(ScopeStorage.CurrentScope[LinkShare._bitlyApiKey], value);
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void BitlyLoginThrowsWhenSetToNull()
|
|||
|
{
|
|||
|
Assert.ThrowsArgumentNull(() => LinkShare.BitlyLogin = null, "value");
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void BitlyLoginUsesScopeStorage()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
var value = "value";
|
|||
|
|
|||
|
// Act
|
|||
|
LinkShare.BitlyLogin = value;
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(LinkShare.BitlyLogin, value);
|
|||
|
Assert.Equal(ScopeStorage.CurrentScope[LinkShare._bitlyLogin], value);
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void RenderWithNullPageTitle_ThrowsException()
|
|||
|
{
|
|||
|
Assert.ThrowsArgumentNullOrEmptyString(
|
|||
|
() => LinkShare.GetHtml(null).ToString(),
|
|||
|
"pageTitle");
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void Render_WithFacebook_Works()
|
|||
|
{
|
|||
|
string actualHTML = LinkShare.GetHtml("page-title", "www.foo.com", linkSites: LinkShareSite.Facebook).ToString();
|
|||
|
string expectedHTML =
|
|||
|
"<a href=\"http://www.facebook.com/sharer.php?u=www.foo.com&t=page-title\" target=\"_blank\" title=\"Share on Facebook\"><img alt=\"Share on Facebook\" src=\"http://www.facebook.com/favicon.ico\" style=\"border:0; height:16px; width:16px; margin:0 1px;\" title=\"Share on Facebook\" /></a>";
|
|||
|
UnitTestHelper.AssertEqualsIgnoreWhitespace(actualHTML, expectedHTML);
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void Render_WithFacebookAndDigg_Works()
|
|||
|
{
|
|||
|
string actualHTML = LinkShare.GetHtml("page-title", "www.foo.com", linkSites: new[] { LinkShareSite.Facebook, LinkShareSite.Digg }).ToString();
|
|||
|
string expectedHTML =
|
|||
|
"<a href=\"http://www.facebook.com/sharer.php?u=www.foo.com&t=page-title\" target=\"_blank\" title=\"Share on Facebook\"><img alt=\"Share on Facebook\" src=\"http://www.facebook.com/favicon.ico\" style=\"border:0; height:16px; width:16px; margin:0 1px;\" title=\"Share on Facebook\" /></a><a href=\"http://digg.com/submit?url=www.foo.com&title=page-title\" target=\"_blank\" title=\"Digg!\"><img alt=\"Digg!\" src=\"http://digg.com/img/badges/16x16-digg-guy.gif\" style=\"border:0; height:16px; width:16px; margin:0 1px;\" title=\"Digg!\" /></a>";
|
|||
|
UnitTestHelper.AssertEqualsIgnoreWhitespace(actualHTML, expectedHTML);
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void Render_WithFacebook_RendersAnchorTitle()
|
|||
|
{
|
|||
|
string actualHTML = LinkShare.GetHtml("page-title", "www.foo.com", linkSites: LinkShareSite.Facebook).ToString();
|
|||
|
string expectedHtml = @"<a href=""http://www.facebook.com/sharer.php?u=www.foo.com&t=page-title"" target=""_blank"" title=""Share on Facebook"">
|
|||
|
<img alt=""Share on Facebook"" src=""http://www.facebook.com/favicon.ico"" style=""border:0; height:16px; width:16px; margin:0 1px;"" title=""Share on Facebook"" />
|
|||
|
</a>";
|
|||
|
|
|||
|
UnitTestHelper.AssertEqualsIgnoreWhitespace(expectedHtml, actualHTML);
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void LinkShare_GetSitesInOrderReturnsAllSitesWhenArgumentIsNull()
|
|||
|
{
|
|||
|
// Act and Assert
|
|||
|
var result = LinkShare.GetSitesInOrder(linkSites: null);
|
|||
|
|
|||
|
Assert.Equal(_allLinkShareSites, result.ToArray());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void LinkShare_GetSitesInOrderReturnsAllSitesWhenArgumentIEmpty()
|
|||
|
{
|
|||
|
// Act
|
|||
|
var result = LinkShare.GetSitesInOrder(linkSites: new LinkShareSite[] { });
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(_allLinkShareSites, result.ToArray());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void LinkShare_GetSitesInOrderReturnsAllSitesWhenAllIsFirstItem()
|
|||
|
{
|
|||
|
// Act
|
|||
|
var result = LinkShare.GetSitesInOrder(linkSites: new[] { LinkShareSite.All, LinkShareSite.Reddit });
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(_allLinkShareSites, result.ToArray());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void LinkShare_GetSitesInOrderReturnsSitesInOrderWhenAllIsNotFirstItem()
|
|||
|
{
|
|||
|
// Act
|
|||
|
var result = LinkShare.GetSitesInOrder(linkSites: new[] { LinkShareSite.Reddit, LinkShareSite.Facebook, LinkShareSite.All });
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(new[]
|
|||
|
{
|
|||
|
LinkShareSite.Reddit, LinkShareSite.Facebook, LinkShareSite.Delicious, LinkShareSite.Digg,
|
|||
|
LinkShareSite.GoogleBuzz, LinkShareSite.StumbleUpon, LinkShareSite.Twitter
|
|||
|
}, result.ToArray());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void LinkShare_EncodesParameters()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
var expectedHtml =
|
|||
|
@"<a href=""http://reddit.com/submit?url=www.foo.com&title=%26%26"" target=""_blank"" title=""Reddit!"">
|
|||
|
<img alt=""Reddit!"" src=""http://www.Reddit.com/favicon.ico"" style=""border:0; height:16px; width:16px; margin:0 1px;"" title=""Reddit!"" />
|
|||
|
</a>
|
|||
|
<a href=""http://twitter.com/home/?status=%26%26%3a+www.foo.com%2c+(via+%40%40%3cTweeter+Bot%3e)+I+%3c3+Tweets"" target=""_blank"" title=""Share on Twitter"">
|
|||
|
<img alt=""Share on Twitter"" src=""http://twitter.com/favicon.ico"" style=""border:0; height:16px; width:16px; margin:0 1px;"" title=""Share on Twitter"" />
|
|||
|
</a>";
|
|||
|
|
|||
|
// Act
|
|||
|
var actualHtml = LinkShare.GetHtml("&&", "www.foo.com", "<Tweeter Bot>", "I <3 Tweets", LinkShareSite.Reddit, LinkShareSite.Twitter).ToString();
|
|||
|
|
|||
|
// Assert
|
|||
|
UnitTestHelper.AssertEqualsIgnoreWhitespace(expectedHtml, actualHtml);
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void LinkshareRendersValidXhtml()
|
|||
|
{
|
|||
|
string result = "<html> <head> \n <title> </title> \n </head> \n <body> <div> \n" +
|
|||
|
LinkShare.GetHtml("any<>title", "my test page <>") +
|
|||
|
"\n </div> </body> \n </html>";
|
|||
|
HtmlString htmlResult = new HtmlString(result);
|
|||
|
XhtmlAssert.Validate1_0(htmlResult);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|