a575963da9
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
484 lines
22 KiB
C#
484 lines
22 KiB
C#
// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
|
|
|
|
using System.Web;
|
|
using System.Web.Helpers;
|
|
using System.Web.Helpers.Test;
|
|
using System.Web.TestUtil;
|
|
using Xunit;
|
|
using Assert = Microsoft.TestCommon.AssertEx;
|
|
|
|
namespace Microsoft.Web.Helpers.Test
|
|
{
|
|
public class TwitterTest
|
|
{
|
|
/// <summary>
|
|
///A test for Profile
|
|
///</summary>
|
|
[Fact]
|
|
public void Profile_ReturnsValidData()
|
|
{
|
|
// Arrange
|
|
string twitterUserName = "my-userName";
|
|
int width = 100;
|
|
int height = 100;
|
|
string backgroundShellColor = "my-backgroundShellColor";
|
|
string shellColor = "my-shellColor";
|
|
string tweetsBackgroundColor = "tweetsBackgroundColor";
|
|
string tweetsColor = "tweets-color";
|
|
string tweetsLinksColor = "tweets Linkcolor";
|
|
bool scrollBar = false;
|
|
bool loop = false;
|
|
bool live = false;
|
|
bool hashTags = false;
|
|
bool timestamp = false;
|
|
bool avatars = false;
|
|
var behavior = "all";
|
|
int searchInterval = 10;
|
|
|
|
// Act
|
|
string actual = Twitter.Profile(twitterUserName, width, height, backgroundShellColor, shellColor, tweetsBackgroundColor, tweetsColor, tweetsLinksColor,
|
|
5, scrollBar, loop, live, hashTags, timestamp, avatars, behavior, searchInterval).ToString();
|
|
|
|
// Assert
|
|
var json = GetTwitterJSObject(actual);
|
|
Assert.Equal(json.type, "profile");
|
|
Assert.Equal(json.interval, 1000 * searchInterval);
|
|
Assert.Equal(json.width.ToString(), width.ToString());
|
|
Assert.Equal(json.height.ToString(), height.ToString());
|
|
Assert.Equal(json.theme.shell.background, backgroundShellColor);
|
|
Assert.Equal(json.theme.shell.color, shellColor);
|
|
Assert.Equal(json.theme.tweets.background, tweetsBackgroundColor);
|
|
Assert.Equal(json.theme.tweets.color, tweetsColor);
|
|
Assert.Equal(json.theme.tweets.links, tweetsLinksColor);
|
|
Assert.Equal(json.features.scrollbar, scrollBar);
|
|
Assert.Equal(json.features.loop, loop);
|
|
Assert.Equal(json.features.live, live);
|
|
Assert.Equal(json.features.hashtags, hashTags);
|
|
Assert.Equal(json.features.avatars, avatars);
|
|
Assert.Equal(json.features.behavior, behavior.ToLowerInvariant());
|
|
Assert.True(actual.Contains(".setUser('my-userName')"));
|
|
}
|
|
|
|
[Fact]
|
|
public void ProfileJSEncodesParameters()
|
|
{
|
|
// Arrange
|
|
string twitterUserName = "\"my-userName\'";
|
|
string backgroundShellColor = "\\foo";
|
|
string shellColor = "<shellColor>\\";
|
|
string tweetsBackgroundColor = "<tweetsBackgroundColor";
|
|
string tweetsColor = "<tweetsColor>";
|
|
string tweetsLinksColor = "<tweetsLinkColor>";
|
|
|
|
// Act
|
|
string actual = Twitter.Profile(twitterUserName, 100, 100, backgroundShellColor, shellColor, tweetsBackgroundColor, tweetsColor, tweetsLinksColor).ToString();
|
|
|
|
// Assert
|
|
Assert.True(actual.Contains("background: '\\\\foo"));
|
|
Assert.True(actual.Contains("color: '\\u003cshellColor\\u003e\\\\"));
|
|
Assert.True(actual.Contains("background: '\\u003ctweetsBackgroundColor"));
|
|
Assert.True(actual.Contains("color: '\\u003ctweetsColor\\u003e"));
|
|
Assert.True(actual.Contains("links: '\\u003ctweetsLinkColor\\u003e"));
|
|
Assert.True(actual.Contains(".setUser('\\\"my-userName\\u0027')"));
|
|
}
|
|
|
|
[Fact]
|
|
public void Search_ReturnsValidData()
|
|
{
|
|
// Arrange
|
|
string search = "awesome-search-term";
|
|
int width = 100;
|
|
int height = 100;
|
|
string title = "cust-title";
|
|
string caption = "some caption";
|
|
string backgroundShellColor = "background-shell-color";
|
|
string shellColor = "shellColorValue";
|
|
string tweetsBackgroundColor = "tweetsBackgroundColor";
|
|
string tweetsColor = "tweetsColorVal";
|
|
string tweetsLinksColor = "tweetsLinkColor";
|
|
bool scrollBar = false;
|
|
bool loop = false;
|
|
bool live = true;
|
|
bool hashTags = false;
|
|
bool timestamp = true;
|
|
bool avatars = true;
|
|
bool topTweets = true;
|
|
var behavior = "default";
|
|
int searchInterval = 10;
|
|
|
|
// Act
|
|
string actual = Twitter.Search(search, width, height, title, caption, backgroundShellColor, shellColor, tweetsBackgroundColor, tweetsColor, tweetsLinksColor, scrollBar,
|
|
loop, live, hashTags, timestamp, avatars, topTweets, behavior, searchInterval).ToString();
|
|
|
|
// Assert
|
|
var json = GetTwitterJSObject(actual);
|
|
Assert.Equal(json.type, "search");
|
|
Assert.Equal(json.search, search);
|
|
Assert.Equal(json.interval, 1000 * searchInterval);
|
|
Assert.Equal(json.title, title);
|
|
Assert.Equal(json.subject, caption);
|
|
Assert.Equal(json.width.ToString(), width.ToString());
|
|
Assert.Equal(json.height.ToString(), height.ToString());
|
|
Assert.Equal(json.theme.shell.background, backgroundShellColor);
|
|
Assert.Equal(json.theme.shell.color, shellColor);
|
|
Assert.Equal(json.theme.tweets.background, tweetsBackgroundColor);
|
|
Assert.Equal(json.theme.tweets.color, tweetsColor);
|
|
Assert.Equal(json.theme.tweets.links, tweetsLinksColor);
|
|
Assert.Equal(json.features.scrollbar, scrollBar);
|
|
Assert.Equal(json.features.loop, loop);
|
|
Assert.Equal(json.features.live, live);
|
|
Assert.Equal(json.features.hashtags, hashTags);
|
|
Assert.Equal(json.features.avatars, avatars);
|
|
Assert.Equal(json.features.toptweets, topTweets);
|
|
Assert.Equal(json.features.behavior, behavior.ToLowerInvariant());
|
|
}
|
|
|
|
[Fact]
|
|
public void SearchJavascriptEncodesParameters()
|
|
{
|
|
// Arrange
|
|
string search = "<script>";
|
|
int width = 100;
|
|
int height = 100;
|
|
string title = "'title'";
|
|
string caption = "<caption>";
|
|
string backgroundShellColor = "\\foo";
|
|
string shellColor = "<shellColor>\\";
|
|
string tweetsBackgroundColor = "<tweetsBackgroundColor";
|
|
string tweetsColor = "<tweetsColor>";
|
|
string tweetsLinksColor = "<tweetsLinkColor>";
|
|
|
|
// Act
|
|
string actual = Twitter.Search(search, width, height, title, caption, backgroundShellColor, shellColor, tweetsBackgroundColor, tweetsColor, tweetsLinksColor).ToString();
|
|
|
|
// Assert
|
|
Assert.True(actual.Contains("search: '\\u003cscript\\u003e'"));
|
|
Assert.True(actual.Contains("title: '\\u0027title\\u0027'"));
|
|
Assert.True(actual.Contains("subject: '\\u003ccaption\\u003e'"));
|
|
Assert.True(actual.Contains("background: '\\\\foo"));
|
|
Assert.True(actual.Contains("color: '\\u003cshellColor\\u003e\\\\"));
|
|
Assert.True(actual.Contains("background: '\\u003ctweetsBackgroundColor"));
|
|
Assert.True(actual.Contains("color: '\\u003ctweetsColor\\u003e"));
|
|
Assert.True(actual.Contains("links: '\\u003ctweetsLinkColor\\u003e"));
|
|
}
|
|
|
|
[Fact]
|
|
public void SearchWithInvalidArgs_ThrowsArgumentException()
|
|
{
|
|
Assert.ThrowsArgumentNullOrEmptyString(() => Twitter.Search(null).ToString(), "searchQuery");
|
|
}
|
|
|
|
[Fact]
|
|
public void ProfileWithInvalidArgs_ThrowsArgumentException()
|
|
{
|
|
Assert.ThrowsArgumentNullOrEmptyString(() => Twitter.Profile(null).ToString(), "userName");
|
|
}
|
|
|
|
[Fact]
|
|
public void SearchRendersRendersValidXhtml()
|
|
{
|
|
string result = "<html> <head> \n <title> </title> \n </head> \n <body> \n" +
|
|
Twitter.Search("any<>term") +
|
|
"\n </body> \n </html>";
|
|
HtmlString htmlResult = new HtmlString(result);
|
|
XhtmlAssert.Validate1_1(htmlResult);
|
|
}
|
|
|
|
[Fact]
|
|
public void SearchEncodesSearchTerms()
|
|
{
|
|
// Act
|
|
string result = Twitter.Search("'any term'", backgroundShellColor: "\"bad-color").ToString();
|
|
|
|
// Assert
|
|
Assert.True(result.Contains(@"background: '\""bad-color',"));
|
|
//Assert.True(result.Contains(@"search: @"'\u0027any term\u0027'","));
|
|
}
|
|
|
|
[Fact]
|
|
public void ProfileRendersRendersValidXhtml()
|
|
{
|
|
string result = "<html> <head> \n <title> </title> \n </head> \n <body> \n" +
|
|
Twitter.Profile("any<>Name") +
|
|
"\n </body> \n </html>";
|
|
HtmlString htmlResult = new HtmlString(result);
|
|
XhtmlAssert.Validate1_1(htmlResult);
|
|
}
|
|
|
|
[Fact]
|
|
public void ProfileEncodesSearchTerms()
|
|
{
|
|
// Act
|
|
string result = Twitter.Profile("'some user'", backgroundShellColor: "\"malformed-color").ToString();
|
|
|
|
// Assert
|
|
Assert.True(result.Contains(@"background: '\""malformed-color'"));
|
|
Assert.True(result.Contains("setUser('\\u0027some user\\u0027')"));
|
|
}
|
|
|
|
[Fact]
|
|
public void TweetButtonWithDefaultAttributes()
|
|
{
|
|
// Arrange
|
|
string expected = @"<a href=""http://twitter.com/share"" class=""twitter-share-button"" data-count=""vertical"">Tweet</a><script type=""text/javascript"" src=""http://platform.twitter.com/widgets.js""></script>";
|
|
|
|
// Act
|
|
string result = Twitter.TweetButton().ToString();
|
|
|
|
// Assert
|
|
UnitTestHelper.AssertEqualsIgnoreWhitespace(result, expected);
|
|
}
|
|
|
|
[Fact]
|
|
public void TweetButtonWithSpeicifedAttributes()
|
|
{
|
|
// Arrange
|
|
string expected = @"<a href=""http://twitter.com/share"" class=""twitter-share-button"" data-text=""tweet-text"" data-url=""http://www.microsoft.com"" data-via=""userName"" data-related=""related-userName:rel-desc"" data-count=""none"">my-share-text</a><script type=""text/javascript"" src=""http://platform.twitter.com/widgets.js""></script>";
|
|
|
|
// Act
|
|
string result = Twitter.TweetButton("none", shareText: "my-share-text", tweetText: "tweet-text", url: "http://www.microsoft.com", language: "en", userName: "userName", relatedUserName: "related-userName", relatedUserDescription: "rel-desc").ToString();
|
|
|
|
// Assert
|
|
UnitTestHelper.AssertEqualsIgnoreWhitespace(result, expected);
|
|
}
|
|
|
|
[Fact]
|
|
public void TweetButtonHtmlEncodesValues()
|
|
{
|
|
// Arrange
|
|
string expected = @"<a href=""http://twitter.com/share"" class=""twitter-share-button"" data-text=""<tweet-text>"" data-url=""<http://www.microsoft.com>"" data-via=""<userName>"" data-related=""<related-userName>:<rel-desc>"" data-count=""none""><Tweet</a><script type=""text/javascript"" src=""http://platform.twitter.com/widgets.js""></script>";
|
|
// Act
|
|
string result = Twitter.TweetButton("none", shareText: "<Tweet", tweetText: "<tweet-text>", url: "<http://www.microsoft.com>", language: "en", userName: "<userName>", relatedUserName: "<related-userName>", relatedUserDescription: "<rel-desc>").ToString();
|
|
|
|
// Assert
|
|
UnitTestHelper.AssertEqualsIgnoreWhitespace(result, expected);
|
|
}
|
|
|
|
[Fact]
|
|
public void FollowButtonWithDefaultParameters()
|
|
{
|
|
// Arrange
|
|
string expected = @"<a href=""http://www.twitter.com/my-twitter-userName""><img src=""http://twitter-badges.s3.amazonaws.com/follow_me-a.png"" alt=""Follow my-twitter-userName on Twitter""/></a>";
|
|
|
|
// Act
|
|
string result = Twitter.FollowButton("my-twitter-userName").ToString();
|
|
|
|
// Assert
|
|
UnitTestHelper.AssertEqualsIgnoreWhitespace(result, expected);
|
|
}
|
|
|
|
[Fact]
|
|
public void FollowButtonWithSpecifiedParmeters()
|
|
{
|
|
// Arrange
|
|
string expected = @"<a href=""http://www.twitter.com/my-twitter-userName""><img src=""http://twitter-badges.s3.amazonaws.com/t_logo-b.png"" alt=""Follow my-twitter-userName on Twitter""/></a>";
|
|
|
|
// Act
|
|
string result = Twitter.FollowButton("my-twitter-userName", "t_logo", "b").ToString();
|
|
|
|
// Assert
|
|
UnitTestHelper.AssertEqualsIgnoreWhitespace(result, expected);
|
|
}
|
|
|
|
[Fact]
|
|
public void FollowButtonEncodesParameters()
|
|
{
|
|
// Arrange
|
|
string expected = @"<a href=""http://www.twitter.com/http%3a%2f%2fmy-twitter-userName%3cscript""><img src=""http://twitter-badges.s3.amazonaws.com/t_logo-b.png"" alt=""Follow http://my-twitter-userName<script on Twitter""/></a>";
|
|
|
|
// Act
|
|
string result = Twitter.FollowButton("http://my-twitter-userName<script", "t_logo", "b").ToString();
|
|
|
|
// Assert
|
|
UnitTestHelper.AssertEqualsIgnoreWhitespace(result, expected);
|
|
}
|
|
|
|
[Fact]
|
|
public void FavesReturnsValidData()
|
|
{
|
|
// Arrange
|
|
string twitterUserName = "my-userName";
|
|
string title = "my-title";
|
|
string caption = "my-caption";
|
|
int width = 100;
|
|
int height = 100;
|
|
string backgroundShellColor = "my-backgroundShellColor";
|
|
string shellColor = "my-shellColor";
|
|
string tweetsBackgroundColor = "tweetsBackgroundColor";
|
|
string tweetsColor = "tweets-color";
|
|
string tweetsLinksColor = "tweets Linkcolor";
|
|
int numTweets = 4;
|
|
bool scrollBar = false;
|
|
bool loop = false;
|
|
bool live = false;
|
|
bool hashTags = false;
|
|
bool timestamp = false;
|
|
bool avatars = false;
|
|
var behavior = "all";
|
|
int searchInterval = 10;
|
|
|
|
// Act
|
|
string actual = Twitter.Faves(twitterUserName, width, height, title, caption, backgroundShellColor, shellColor, tweetsBackgroundColor, tweetsColor, tweetsLinksColor,
|
|
numTweets, scrollBar, loop, live, hashTags, timestamp, avatars, "all", searchInterval).ToString();
|
|
|
|
// Assert
|
|
var json = GetTwitterJSObject(actual);
|
|
Assert.Equal(json.type, "faves");
|
|
Assert.Equal(json.interval, 1000 * searchInterval);
|
|
Assert.Equal(json.width.ToString(), width.ToString());
|
|
Assert.Equal(json.height.ToString(), height.ToString());
|
|
Assert.Equal(json.title, title);
|
|
Assert.Equal(json.subject, caption);
|
|
Assert.Equal(json.theme.shell.background, backgroundShellColor);
|
|
Assert.Equal(json.theme.shell.color, shellColor);
|
|
Assert.Equal(json.theme.tweets.background, tweetsBackgroundColor);
|
|
Assert.Equal(json.theme.tweets.color, tweetsColor);
|
|
Assert.Equal(json.theme.tweets.links, tweetsLinksColor);
|
|
Assert.Equal(json.features.scrollbar, scrollBar);
|
|
Assert.Equal(json.features.loop, loop);
|
|
Assert.Equal(json.features.live, live);
|
|
Assert.Equal(json.features.hashtags, hashTags);
|
|
Assert.Equal(json.features.avatars, avatars);
|
|
Assert.Equal(json.features.behavior, behavior.ToLowerInvariant());
|
|
Assert.True(actual.Contains(".setUser('my-userName')"));
|
|
}
|
|
|
|
[Fact]
|
|
public void FavesJavascriptEncodesParameters()
|
|
{
|
|
// Arrange
|
|
string twitterUserName = "<my-userName>";
|
|
string title = "<my-title>";
|
|
string caption = "<my-caption>";
|
|
int width = 100;
|
|
int height = 100;
|
|
string backgroundShellColor = "<my-backgroundShellColor>";
|
|
string shellColor = "<my-shellColor>";
|
|
string tweetsBackgroundColor = "<tweetsBackgroundColor>";
|
|
string tweetsColor = "<tweets-color>";
|
|
string tweetsLinksColor = "<tweets Linkcolor>";
|
|
|
|
// Act
|
|
string actual = Twitter.Faves(twitterUserName, width, height, title, caption, backgroundShellColor, shellColor, tweetsBackgroundColor, tweetsColor, tweetsLinksColor).ToString();
|
|
|
|
// Assert
|
|
Assert.True(actual.Contains("title: '\\u003cmy-title\\u003e'"));
|
|
Assert.True(actual.Contains("subject: '\\u003cmy-caption\\u003e'"));
|
|
Assert.True(actual.Contains("background: '\\u003cmy-backgroundShellColor\\u003e'"));
|
|
Assert.True(actual.Contains("color: '\\u003cmy-shellColor\\u003e'"));
|
|
Assert.True(actual.Contains("background: '\\u003ctweetsBackgroundColor\\u003e'"));
|
|
Assert.True(actual.Contains("color: '\\u003ctweets-color\\u003e"));
|
|
Assert.True(actual.Contains("links: '\\u003ctweets Linkcolor\\u003e'"));
|
|
Assert.True(actual.Contains(".setUser('\\u003cmy-userName\\u003e')"));
|
|
}
|
|
|
|
[Fact]
|
|
public void FavesRendersRendersValidXhtml()
|
|
{
|
|
string result = "<html> <head> \n <title> </title> \n </head> \n <body> \n" +
|
|
Twitter.Faves("any<>Name") +
|
|
"\n </body> \n </html>";
|
|
HtmlString htmlResult = new HtmlString(result);
|
|
XhtmlAssert.Validate1_1(htmlResult);
|
|
}
|
|
|
|
[Fact]
|
|
public void ListReturnsValidData()
|
|
{
|
|
// Arrange
|
|
string twitterUserName = "my-userName";
|
|
string list = "my-list";
|
|
string title = "my-title";
|
|
string caption = "my-caption";
|
|
int width = 100;
|
|
int height = 100;
|
|
string backgroundShellColor = "my-backgroundShellColor";
|
|
string shellColor = "my-shellColor";
|
|
string tweetsBackgroundColor = "tweetsBackgroundColor";
|
|
string tweetsColor = "tweets-color";
|
|
string tweetsLinksColor = "tweets Linkcolor";
|
|
int numTweets = 4;
|
|
bool scrollBar = false;
|
|
bool loop = false;
|
|
bool live = false;
|
|
bool hashTags = false;
|
|
bool timestamp = false;
|
|
bool avatars = false;
|
|
var behavior = "all";
|
|
int searchInterval = 10;
|
|
|
|
// Act
|
|
string actual = Twitter.List(twitterUserName, list, width, height, title, caption, backgroundShellColor, shellColor, tweetsBackgroundColor, tweetsColor, tweetsLinksColor,
|
|
numTweets, scrollBar, loop, live, hashTags, timestamp, avatars, "all", searchInterval).ToString();
|
|
|
|
// Assert
|
|
var json = GetTwitterJSObject(actual);
|
|
Assert.Equal(json.type, "list");
|
|
Assert.Equal(json.interval, 1000 * searchInterval);
|
|
Assert.Equal(json.width.ToString(), width.ToString());
|
|
Assert.Equal(json.height.ToString(), height.ToString());
|
|
Assert.Equal(json.title, title);
|
|
Assert.Equal(json.subject, caption);
|
|
Assert.Equal(json.theme.shell.background, backgroundShellColor);
|
|
Assert.Equal(json.theme.shell.color, shellColor);
|
|
Assert.Equal(json.theme.tweets.background, tweetsBackgroundColor);
|
|
Assert.Equal(json.theme.tweets.color, tweetsColor);
|
|
Assert.Equal(json.theme.tweets.links, tweetsLinksColor);
|
|
Assert.Equal(json.features.scrollbar, scrollBar);
|
|
Assert.Equal(json.features.loop, loop);
|
|
Assert.Equal(json.features.live, live);
|
|
Assert.Equal(json.features.hashtags, hashTags);
|
|
Assert.Equal(json.features.avatars, avatars);
|
|
Assert.Equal(json.features.behavior, behavior.ToLowerInvariant());
|
|
Assert.True(actual.Contains(".setList('my-userName', 'my-list')"));
|
|
}
|
|
|
|
[Fact]
|
|
public void ListJavascriptEncodesParameters()
|
|
{
|
|
// Arrange
|
|
string twitterUserName = "<my-userName>";
|
|
string list = "<my-list>";
|
|
string title = "<my-title>";
|
|
string caption = "<my-caption>";
|
|
int width = 100;
|
|
int height = 100;
|
|
string backgroundShellColor = "<my-backgroundShellColor>";
|
|
string shellColor = "<my-shellColor>";
|
|
string tweetsBackgroundColor = "<tweetsBackgroundColor>";
|
|
string tweetsColor = "<tweets-color>";
|
|
string tweetsLinksColor = "<tweets Linkcolor>";
|
|
|
|
// Act
|
|
string actual = Twitter.List(twitterUserName, list, width, height, title, caption, backgroundShellColor, shellColor, tweetsBackgroundColor, tweetsColor, tweetsLinksColor).ToString();
|
|
|
|
// Assert
|
|
Assert.True(actual.Contains("title: '\\u003cmy-title\\u003e'"));
|
|
Assert.True(actual.Contains("subject: '\\u003cmy-caption\\u003e'"));
|
|
Assert.True(actual.Contains("background: '\\u003cmy-backgroundShellColor\\u003e'"));
|
|
Assert.True(actual.Contains("color: '\\u003cmy-shellColor\\u003e'"));
|
|
Assert.True(actual.Contains("background: '\\u003ctweetsBackgroundColor\\u003e'"));
|
|
Assert.True(actual.Contains("color: '\\u003ctweets-color\\u003e"));
|
|
Assert.True(actual.Contains("links: '\\u003ctweets Linkcolor\\u003e'"));
|
|
Assert.True(actual.Contains(".setList('\\u003cmy-userName\\u003e', '\\u003cmy-list\\u003e')"));
|
|
}
|
|
|
|
[Fact]
|
|
public void ListRendersRendersValidXhtml()
|
|
{
|
|
string result = "<html> <head> \n <title> </title> \n </head> \n <body> \n" +
|
|
Twitter.List("any<>Name", "my-list") +
|
|
"\n </body> \n </html>";
|
|
HtmlString htmlResult = new HtmlString(result);
|
|
XhtmlAssert.Validate1_1(htmlResult);
|
|
}
|
|
|
|
private static dynamic GetTwitterJSObject(string twitterOutput)
|
|
{
|
|
const string startString = "Widget(";
|
|
int start = twitterOutput.IndexOf(startString) + startString.Length, end = twitterOutput.IndexOf(')');
|
|
return Json.Decode(twitterOutput.Substring(start, end - start));
|
|
}
|
|
}
|
|
}
|