OSDN Git Service

TwitterApi.EscapeJsonStringメソッドをJsonUtilsクラスへ移動
authorKimura Youichi <kim.upsilon@bucyou.net>
Sat, 23 Mar 2019 09:31:07 +0000 (18:31 +0900)
committerKimura Youichi <kim.upsilon@bucyou.net>
Sat, 23 Mar 2019 09:35:47 +0000 (18:35 +0900)
OpenTween.Tests/Api/JsonUtilsTest.cs [new file with mode: 0644]
OpenTween.Tests/Api/TwitterApiTest.cs
OpenTween/Api/JsonUtils.cs [new file with mode: 0644]
OpenTween/Api/TwitterApi.cs
OpenTween/OpenTween.csproj

diff --git a/OpenTween.Tests/Api/JsonUtilsTest.cs b/OpenTween.Tests/Api/JsonUtilsTest.cs
new file mode 100644 (file)
index 0000000..17fbc9d
--- /dev/null
@@ -0,0 +1,38 @@
+// OpenTween - Client of Twitter
+// Copyright (c) 2019 kim_upsilon (@kim_upsilon) <https://upsilo.net/~upsilon/>
+// All rights reserved.
+//
+// This file is part of OpenTween.
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the terms of the GNU General Public License as published by the Free
+// Software Foundation; either version 3 of the License, or (at your option)
+// any later version.
+//
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+// for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this program. If not, see <http://www.gnu.org/licenses/>, or write to
+// the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+using Xunit;
+
+namespace OpenTween.Api
+{
+    public class JsonUtilsTest
+    {
+        [Theory]
+        [InlineData("", "")]
+        [InlineData("123ABCabc", "123ABCabc")]
+        [InlineData(@"\", @"\\")]
+        [InlineData("\"", "\\\"")]
+        [InlineData("\n", @"\u000A")]
+        [InlineData("\U0001D11E", @"\uD834\uDD1E")]
+        public void EscapeJsonString_Test(string targetText, string expectedText)
+            => Assert.Equal(expectedText, JsonUtils.EscapeJsonString(targetText));
+    }
+}
index f3bd107..65ca27c 100644 (file)
@@ -1422,17 +1422,5 @@ namespace OpenTween.Api
                 mock.VerifyAll();
             }
         }
-
-        [Theory]
-        [InlineData("", "")]
-        [InlineData("123ABCabc", "123ABCabc")]
-        [InlineData(@"\", @"\\")]
-        [InlineData("\"", "\\\"")]
-        [InlineData("\n", @"\u000A")]
-        [InlineData("\U0001D11E", @"\uD834\uDD1E")]
-        public void EscapeJsonString_Test(string targetText, string expectedText)
-        {
-            Assert.Equal(expectedText, TwitterApi.EscapeJsonString(targetText));
-        }
     }
 }
diff --git a/OpenTween/Api/JsonUtils.cs b/OpenTween/Api/JsonUtils.cs
new file mode 100644 (file)
index 0000000..ece4051
--- /dev/null
@@ -0,0 +1,46 @@
+// OpenTween - Client of Twitter
+// Copyright (c) 2019 kim_upsilon (@kim_upsilon) <https://upsilo.net/~upsilon/>
+// All rights reserved.
+//
+// This file is part of OpenTween.
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the terms of the GNU General Public License as published by the Free
+// Software Foundation; either version 3 of the License, or (at your option)
+// any later version.
+//
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+// for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this program. If not, see <http://www.gnu.org/licenses/>, or write to
+// the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+using System.Text;
+
+namespace OpenTween.Api
+{
+    internal static class JsonUtils
+    {
+        /// <summary>JSON に出力する文字列を ECMA-404 に従ってエスケープする</summary>
+        public static string EscapeJsonString(string rawText)
+        {
+            var builder = new StringBuilder(rawText.Length + 20);
+
+            foreach (var c in rawText)
+            {
+                if (c <= 0x1F || char.IsSurrogate(c))
+                    builder.AppendFormat(@"\u{0:X4}", (int)c);
+                else if (c == '\\' || c == '\"')
+                    builder.Append('\\').Append(c);
+                else
+                    builder.Append(c);
+            }
+
+            return builder.ToString();
+        }
+    }
+}
index 4aca03d..4166226 100644 (file)
@@ -405,7 +405,7 @@ namespace OpenTween.Api
         ""attachment"": {{
           ""type"": ""media"",
           ""media"": {{
-            ""id"": ""{EscapeJsonString(mediaId.ToString())}""
+            ""id"": ""{JsonUtils.EscapeJsonString(mediaId.ToString())}""
           }}
         }}";
             }
@@ -415,10 +415,10 @@ namespace OpenTween.Api
     ""type"": ""message_create"",
     ""message_create"": {{
       ""target"": {{
-        ""recipient_id"": ""{EscapeJsonString(recipientId.ToString())}""
+        ""recipient_id"": ""{JsonUtils.EscapeJsonString(recipientId.ToString())}""
       }},
       ""message_data"": {{
-        ""text"": ""{EscapeJsonString(text)}""{attachment}
+        ""text"": ""{JsonUtils.EscapeJsonString(text)}""{attachment}
       }}
     }}
   }}
@@ -762,7 +762,7 @@ namespace OpenTween.Api
         {
             var endpoint = new Uri("https://upload.twitter.com/1.1/media/metadata/create.json");
 
-            var escapedAltText = EscapeJsonString(altText);
+            var escapedAltText = JsonUtils.EscapeJsonString(altText);
             var json = $@"{{""media_id"": ""{mediaId}"", ""alt_text"": {{""text"": ""{escapedAltText}""}}}}";
 
             return this.apiConnection.PostJsonAsync(endpoint, json);
@@ -789,23 +789,5 @@ namespace OpenTween.Api
 
         public void Dispose()
             => this.apiConnection?.Dispose();
-
-        /// <summary>JSON に出力する文字列を ECMA-404 に従ってエスケープする</summary>
-        public static string EscapeJsonString(string rawText)
-        {
-            var builder = new StringBuilder(rawText.Length + 20);
-
-            foreach (var c in rawText)
-            {
-                if (c <= 0x1F || char.IsSurrogate(c))
-                    builder.AppendFormat(@"\u{0:X4}", (int)c);
-                else if (c == '\\' || c == '\"')
-                    builder.Append('\\').Append(c);
-                else
-                    builder.Append(c);
-            }
-
-            return builder.ToString();
-        }
     }
 }
index a02dc7e..fb5a8ea 100644 (file)
@@ -87,6 +87,7 @@
     <Compile Include="Api\DataModel\TwitterUploadMediaResult.cs" />
     <Compile Include="Api\DataModel\TwitterUser.cs" />
     <Compile Include="Api\DataModel\TwitterApiAccessLevel.cs" />
+    <Compile Include="Api\JsonUtils.cs" />
     <Compile Include="Api\MicrosoftTranslatorApi.cs" />
     <Compile Include="Api\TwitterApi.cs" />
     <Compile Include="Api\TwitterApiException.cs" />