public async Task ExpandedUrls_BasicScenario() { var post = new PostClass { Text = "<a href=\"http://t.co/aaaaaaa\" title=\"http://t.co/aaaaaaa\">bit.ly/abcde</a>", ExpandedUrls = new[] { new FakeExpandedUrlInfo( // 展開前の t.co ドメインの URL url: "http://t.co/aaaaaaa", // Entity の expanded_url に含まれる URL expandedUrl: "http://bit.ly/abcde", // expandedUrl をさらに ShortUrl クラスで再帰的に展開する deepExpand: true ), }, }; var urlInfo = (FakeExpandedUrlInfo)post.ExpandedUrls.Single(); // ExpandedUrlInfo による展開が完了していない状態 // → この段階では Entity に含まれる expanded_url の URL が使用される Assert.False(urlInfo.ExpandedCompleted); Assert.Equal("http://bit.ly/abcde", urlInfo.ExpandedUrl); Assert.Equal("http://bit.ly/abcde", post.GetExpandedUrl("http://t.co/aaaaaaa")); Assert.Equal(new[] { "http://bit.ly/abcde" }, post.GetExpandedUrls()); Assert.Equal("<a href=\"http://t.co/aaaaaaa\" title=\"http://bit.ly/abcde\">bit.ly/abcde</a>", post.Text); // bit.ly 展開後の URL は「http://example.com/abcde」 urlInfo.fakeResult.SetResult("http://example.com/abcde"); await urlInfo.ExpandTask; // ExpandedUrlInfo による展開が完了した後の状態 // → 再帰的な展開後の URL が使用される Assert.True(urlInfo.ExpandedCompleted); Assert.Equal("http://example.com/abcde", urlInfo.ExpandedUrl); Assert.Equal("http://example.com/abcde", post.GetExpandedUrl("http://t.co/aaaaaaa")); Assert.Equal(new[] { "http://example.com/abcde" }, post.GetExpandedUrls()); Assert.Equal("<a href=\"http://t.co/aaaaaaa\" title=\"http://example.com/abcde\">bit.ly/abcde</a>", post.Text); }