OSDN Git Service

Twitter.CreateAccessibleTextに対するテストを追加
authorKimura Youichi <kim.upsilon@bucyou.net>
Sat, 12 May 2018 17:01:36 +0000 (02:01 +0900)
committerKimura Youichi <kim.upsilon@bucyou.net>
Sat, 12 May 2018 18:39:27 +0000 (03:39 +0900)
OpenTween.Tests/TwitterTest.cs
OpenTween/Twitter.cs

index 5080b09..fc633b4 100644 (file)
@@ -110,6 +110,113 @@ namespace OpenTween
         }
 
         [Fact]
+        public void CreateAccessibleText_MediaAltTest()
+        {
+            var text = "https://t.co/hoge";
+            var entities = new TwitterEntities
+            {
+                Media = new[]
+                {
+                    new TwitterEntityMedia
+                    {
+                        Indices = new[] { 0, 17 },
+                        Url = "https://t.co/hoge",
+                        DisplayUrl = "pic.twitter.com/hoge",
+                        ExpandedUrl = "https://twitter.com/hoge/status/1234567890/photo/1",
+                        AltText = "代替テキスト",
+                    },
+                },
+            };
+
+            var expectedText = string.Format(Properties.Resources.ImageAltText, "代替テキスト");
+
+            Assert.Equal(expectedText, Twitter.CreateAccessibleText(text, entities, quoteStatus: null));
+        }
+
+        [Fact]
+        public void CreateAccessibleText_MediaNoAltTest()
+        {
+            var text = "https://t.co/hoge";
+            var entities = new TwitterEntities
+            {
+                Media = new[]
+                {
+                    new TwitterEntityMedia
+                    {
+                        Indices = new[] { 0, 17 },
+                        Url = "https://t.co/hoge",
+                        DisplayUrl = "pic.twitter.com/hoge",
+                        ExpandedUrl = "https://twitter.com/hoge/status/1234567890/photo/1",
+                        AltText = null,
+                    },
+                },
+            };
+
+            var expectedText = "pic.twitter.com/hoge";
+
+            Assert.Equal(expectedText, Twitter.CreateAccessibleText(text, entities, quoteStatus: null));
+        }
+
+        [Fact]
+        public void CreateAccessibleText_QuotedUrlTest()
+        {
+            var text = "https://t.co/hoge";
+            var entities = new TwitterEntities
+            {
+                Urls = new[]
+                {
+                    new TwitterEntityUrl
+                    {
+                        Indices = new[] { 0, 17 },
+                        Url = "https://t.co/hoge",
+                        DisplayUrl = "twitter.com/hoge/status/1…",
+                        ExpandedUrl = "https://twitter.com/hoge/status/1234567890",
+                    },
+                },
+            };
+            var quotedStatus = new TwitterStatus
+            {
+                Id = 1234567890L,
+                IdStr = "1234567890",
+                User = new TwitterUser
+                {
+                    Id = 1111,
+                    IdStr = "1111",
+                    ScreenName = "foo",
+                },
+                FullText = "test",
+            };
+
+            var expectedText = string.Format(Properties.Resources.QuoteStatus_AccessibleText, "foo", "test");
+
+            Assert.Equal(expectedText, Twitter.CreateAccessibleText(text, entities, quotedStatus));
+        }
+
+        [Fact]
+        public void CreateAccessibleText_QuotedUrlNoReferenceTest()
+        {
+            var text = "https://t.co/hoge";
+            var entities = new TwitterEntities
+            {
+                Urls = new[]
+                {
+                    new TwitterEntityUrl
+                    {
+                        Indices = new[] { 0, 17 },
+                        Url = "https://t.co/hoge",
+                        DisplayUrl = "twitter.com/hoge/status/1…",
+                        ExpandedUrl = "https://twitter.com/hoge/status/1234567890",
+                    },
+                },
+            };
+            var quotedStatus = (TwitterStatus)null;
+
+            var expectedText = "twitter.com/hoge/status/1…";
+
+            Assert.Equal(expectedText, Twitter.CreateAccessibleText(text, entities, quotedStatus));
+        }
+
+        [Fact]
         public void CreateHtmlAnchor_Test()
         {
             var text = "@twitterapi #BreakingMyTwitter https://t.co/mIJcSoVSK3";
index 5398fcd..11498f9 100644 (file)
@@ -825,7 +825,7 @@ namespace OpenTween
             post.TextFromApi = this.ReplaceTextFromApi(post.TextFromApi, entities);
             post.TextFromApi = WebUtility.HtmlDecode(post.TextFromApi);
             post.TextFromApi = post.TextFromApi.Replace("<3", "\u2661");
-            post.AccessibleText = this.CreateAccessibleText(textFromApi, entities, (status.RetweetedStatus ?? status).QuotedStatus);
+            post.AccessibleText = CreateAccessibleText(textFromApi, entities, (status.RetweetedStatus ?? status).QuotedStatus);
             post.AccessibleText = WebUtility.HtmlDecode(post.AccessibleText);
             post.AccessibleText = post.AccessibleText.Replace("<3", "\u2661");
 
@@ -1187,7 +1187,7 @@ namespace OpenTween
                     post.TextFromApi = this.ReplaceTextFromApi(textFromApi, message.Entities);
                     post.TextFromApi = WebUtility.HtmlDecode(post.TextFromApi);
                     post.TextFromApi = post.TextFromApi.Replace("<3", "\u2661");
-                    post.AccessibleText = this.CreateAccessibleText(textFromApi, message.Entities, quoteStatus: null);
+                    post.AccessibleText = CreateAccessibleText(textFromApi, message.Entities, quoteStatus: null);
                     post.AccessibleText = WebUtility.HtmlDecode(post.AccessibleText);
                     post.AccessibleText = post.AccessibleText.Replace("<3", "\u2661");
                     post.IsFav = false;
@@ -1352,7 +1352,7 @@ namespace OpenTween
             return text;
         }
 
-        private string CreateAccessibleText(string text, TwitterEntities entities, TwitterStatus quoteStatus)
+        internal static string CreateAccessibleText(string text, TwitterEntities entities, TwitterStatus quoteStatus)
         {
             if (entities == null)
                 return text;
@@ -1366,14 +1366,14 @@ namespace OpenTween
                         var matchStatusUrl = Twitter.StatusUrlRegex.Match(entity.ExpandedUrl);
                         if (matchStatusUrl.Success && matchStatusUrl.Groups["StatusId"].Value == quoteStatus.IdStr)
                         {
-                            var quoteText = this.CreateAccessibleText(quoteStatus.FullText, quoteStatus.MergedEntities, quoteStatus: null);
+                            var quoteText = CreateAccessibleText(quoteStatus.FullText, quoteStatus.MergedEntities, quoteStatus: null);
                             text = text.Replace(entity.Url, string.Format(Properties.Resources.QuoteStatus_AccessibleText, quoteStatus.User.ScreenName, quoteText));
+                            continue;
                         }
                     }
-                    else if (!string.IsNullOrEmpty(entity.DisplayUrl))
-                    {
+
+                    if (!string.IsNullOrEmpty(entity.DisplayUrl))
                         text = text.Replace(entity.Url, entity.DisplayUrl);
-                    }
                 }
             }