OSDN Git Service

TweenMain.FormatStatusTextに対するテストコードを追加
authorKimura Youichi <kim.upsilon@bucyou.net>
Thu, 14 Dec 2023 15:39:18 +0000 (00:39 +0900)
committerKimura Youichi <kim.upsilon@bucyou.net>
Thu, 14 Dec 2023 19:02:35 +0000 (04:02 +0900)
OpenTween.Tests/TweenMainTest.cs
OpenTween/Tween.cs

index ea14617..8127d10 100644 (file)
@@ -24,6 +24,7 @@ using System.Collections.Generic;
 using System.IO;
 using System.Linq;
 using System.Text;
+using System.Text.RegularExpressions;
 using System.Windows.Forms;
 using OpenTween.Api;
 using OpenTween.Api.DataModel;
@@ -38,8 +39,11 @@ namespace OpenTween
 {
     public class TweenMainTest
     {
-        [WinFormsFact]
-        public void Initialize_Test()
+        private record TestContext(
+            SettingManager Settings
+        );
+
+        private void UsingTweenMain(Action<TweenMain, TestContext> func)
         {
             var settings = new SettingManager("");
             var tabinfo = new TabInformations();
@@ -50,6 +54,118 @@ namespace OpenTween
             var thumbnailGenerator = new ThumbnailGenerator(new(autoupdate: false));
 
             using var tweenMain = new TweenMain(settings, tabinfo, twitter, imageCache, iconAssets, thumbnailGenerator);
+            var context = new TestContext(settings);
+
+            func(tweenMain, context);
+        }
+
+        [WinFormsFact]
+        public void Initialize_Test()
+            => this.UsingTweenMain((_, _) => { });
+
+        [WinFormsFact]
+        public void FormatStatusText_NewLineTest()
+        {
+            this.UsingTweenMain((tweenMain, _) =>
+            {
+                Assert.Equal("aaa\nbbb", tweenMain.FormatStatusText("aaa\r\nbbb"));
+            });
+        }
+
+        [WinFormsFact]
+        public void FormatStatusText_NewLineInDMTest()
+        {
+            this.UsingTweenMain((tweenMain, _) =>
+            {
+                // DM にも適用する
+                Assert.Equal("D opentween aaa\nbbb", tweenMain.FormatStatusText("D opentween aaa\r\nbbb"));
+            });
+        }
+
+        [WinFormsFact]
+        public void FormatStatusText_ReplaceFullwidthSpace_EnabledTest()
+        {
+            this.UsingTweenMain((tweenMain, context) =>
+            {
+                context.Settings.Common.WideSpaceConvert = true;
+                Assert.Equal("aaa bbb", tweenMain.FormatStatusText("aaa bbb"));
+            });
+        }
+
+        [WinFormsFact]
+        public void FormatStatusText_ReplaceFullwidthSpaceInDM_EnabledTest()
+        {
+            this.UsingTweenMain((tweenMain, context) =>
+            {
+                context.Settings.Common.WideSpaceConvert = true;
+
+                // DM にも適用する
+                Assert.Equal("D opentween aaa bbb", tweenMain.FormatStatusText("D opentween aaa bbb"));
+            });
+        }
+
+        [WinFormsFact]
+        public void FormatStatusText_ReplaceFullwidthSpace_DisabledTest()
+        {
+            this.UsingTweenMain((tweenMain, context) =>
+            {
+                context.Settings.Common.WideSpaceConvert = false;
+                Assert.Equal("aaa bbb", tweenMain.FormatStatusText("aaa bbb"));
+            });
+        }
+
+        [WinFormsFact]
+        public void FormatStatusText_UseRecommendedFooter_Test()
+        {
+            this.UsingTweenMain((tweenMain, context) =>
+            {
+                context.Settings.Local.UseRecommendStatus = true;
+                Assert.Matches(new Regex(@"^aaa \[TWNv\d+\]$"), tweenMain.FormatStatusText("aaa"));
+            });
+        }
+
+        [WinFormsFact]
+        public void FormatStatusText_CustomFooterText_Test()
+        {
+            this.UsingTweenMain((tweenMain, context) =>
+            {
+                context.Settings.Local.StatusText = "foo";
+                Assert.Equal("aaa foo", tweenMain.FormatStatusText("aaa"));
+            });
+        }
+
+        [WinFormsFact]
+        public void FormatStatusText_DisableFooterIfSendingDM_Test()
+        {
+            this.UsingTweenMain((tweenMain, context) =>
+            {
+                context.Settings.Local.StatusText = "foo";
+
+                // DM の場合はフッターを無効化する
+                Assert.Equal("D opentween aaa", tweenMain.FormatStatusText("D opentween aaa"));
+            });
+        }
+
+        [WinFormsFact]
+        public void FormatStatusText_DisableFooterIfContainsUnofficialRT_Test()
+        {
+            this.UsingTweenMain((tweenMain, context) =>
+            {
+                context.Settings.Local.StatusText = "foo";
+
+                // 非公式 RT を含む場合はフッターを無効化する
+                Assert.Equal("aaa RT @foo: bbb", tweenMain.FormatStatusText("aaa RT @foo: bbb"));
+            });
+        }
+
+        [WinFormsFact]
+        public void FormatStatusText_PreventSmsCommand_Test()
+        {
+            this.UsingTweenMain((tweenMain, context) =>
+            {
+                // 「D+」などから始まる文字列をツイートしようとすると SMS コマンドと誤認されてエラーが返される問題の回避策
+                Assert.Equal("\u200bd+aaaa", tweenMain.FormatStatusText("d+aaaa"));
+            });
         }
 
         [Fact]
index 0d2de5d..879f13f 100644 (file)
@@ -3531,7 +3531,7 @@ namespace OpenTween
         /// <summary>
         /// ツイート投稿前のフッター付与などの前処理を行います
         /// </summary>
-        private string FormatStatusText(string statusText)
+        internal string FormatStatusText(string statusText)
         {
             statusText = statusText.Replace("\r\n", "\n");