Skip to content

Commit 63d47f8

Browse files
committed
Added support for Shift-JIS strings.
1 parent f1487bb commit 63d47f8

4 files changed

Lines changed: 68 additions & 1 deletion

File tree

Schema Tests/Schema Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0-preview-20211130-02" />
2323
<PackageReference Include="NUnit" Version="3.13.2" />
2424
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0" />
25+
<PackageReference Include="System.Text.Encoding.CodePages" Version="10.0.2" />
2526
<PackageReference Include="coverlet.collector" Version="6.0.2">
2627
<PrivateAssets>all</PrivateAssets>
2728
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
using System.IO;
2+
using System.Text;
3+
4+
using NUnit.Framework;
5+
6+
using schema.binary.attributes;
7+
8+
9+
namespace schema.binary;
10+
11+
public class StringShiftJisTests {
12+
private Encoding shiftJis_;
13+
14+
[OneTimeSetUp]
15+
public void SetUp() {
16+
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
17+
this.shiftJis_ = Encoding.GetEncoding(932);
18+
}
19+
20+
[Test]
21+
[TestCase("foobar")]
22+
[TestCase("フーバー")]
23+
public void TestReadChars(string str) {
24+
using var ms = new MemoryStream();
25+
using var sw = new StreamWriter(ms, this.shiftJis_);
26+
sw.Write(str);
27+
sw.Flush();
28+
ms.Position = 0;
29+
30+
using var br = new SchemaBinaryReader(ms);
31+
CollectionAssert.AreEqual(str, br.ReadChars(StringEncodingType.SHIFT_JIS, str.Length));
32+
}
33+
34+
[Test]
35+
[TestCase("foobar")]
36+
[TestCase("フーバー")]
37+
public void TestString(string str) {
38+
using var ms = new MemoryStream();
39+
using var sw = new StreamWriter(ms, this.shiftJis_);
40+
sw.Write(str);
41+
sw.Flush();
42+
ms.Position = 0;
43+
44+
using var br = new SchemaBinaryReader(ms);
45+
Assert.AreEqual(str, br.ReadString(StringEncodingType.SHIFT_JIS, str.Length));
46+
}
47+
48+
[Test]
49+
public void TestReadNT() {
50+
var str = "string 1\0string 2\0string 3";
51+
52+
using var ms = new MemoryStream();
53+
using var sw = new StreamWriter(ms, this.shiftJis_);
54+
sw.Write(str);
55+
sw.Flush();
56+
ms.Position = 0;
57+
58+
using var br = new SchemaBinaryReader(ms);
59+
Assert.AreEqual("string 1", br.ReadStringNT(StringEncodingType.SHIFT_JIS));
60+
Assert.AreEqual("string 2", br.ReadStringNT(StringEncodingType.SHIFT_JIS));
61+
Assert.AreEqual("string 3", br.ReadStringNT(StringEncodingType.SHIFT_JIS));
62+
Assert.AreEqual(str.Length, ms.Position);
63+
}
64+
}

Schema/Schema.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<Description>Library for converting classes to and from binary. Provides a C# Roslyn generator that automatically implements conversion logic for simple classes.</Description>
1515
<PackageId>schema</PackageId>
1616
<Title>schema</Title>
17-
<Version>0.6.14</Version>
17+
<Version>0.6.15</Version>
1818
<Authors>MeltyPlayer</Authors>
1919
</PropertyGroup>
2020

Schema/src/binary/attributes/string/StringEncodingType.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ public enum StringEncodingType {
88
UTF8,
99
UTF16,
1010
UTF32,
11+
SHIFT_JIS,
1112
}
1213

1314
public static class StringEncodingTypeExtensions {
@@ -22,5 +23,6 @@ public static Encoding GetEncoding(
2223
Endianness.LittleEndian => Encoding.Unicode,
2324
},
2425
StringEncodingType.UTF32 => Encoding.UTF32,
26+
StringEncodingType.SHIFT_JIS => Encoding.GetEncoding(932),
2527
};
2628
}

0 commit comments

Comments
 (0)