Skip to content

Commit

Permalink
implement ruby and romaji tags convertor.
Browse files Browse the repository at this point in the history
  • Loading branch information
andy840119 committed Feb 21, 2022
1 parent 2318d0b commit 7125502
Show file tree
Hide file tree
Showing 4 changed files with 166 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
// Copyright (c) andy840119 <[email protected]>. Licensed under the GPL Licence.
// See the LICENCE file in the repository root for full licence text.

using Newtonsoft.Json;
using NUnit.Framework;
using osu.Game.Rulesets.Karaoke.IO.Serialization.Converters;
using osu.Game.Rulesets.Karaoke.Objects;
using osu.Game.Rulesets.Karaoke.Tests.Asserts;

namespace osu.Game.Rulesets.Karaoke.Tests.IO.Serialization.Converters
{
public class RomajiTagsConverterTest : BaseSingleConverterTest<RomajiTagsConverter>
{
protected override JsonConverter[] CreateExtraConverts()
=> new JsonConverter[]
{
new RomajiTagConverter(),
};

[Test]
public void TestSerialize()
{
var timeTags = new[]
{
new RomajiTag
{
StartIndex = 2,
EndIndex = 3,
Text = "ji"
},
new RomajiTag
{
StartIndex = 1,
EndIndex = 2,
Text = "roma"
},
};

const string expected = "[\"[1,2]:roma\",\"[2,3]:ji\"]";
string actual = JsonConvert.SerializeObject(timeTags, CreateSettings());
Assert.AreEqual(expected, actual);
}

[Test]
public void TestDeserialize()
{
const string json = "[\"[2,3]:ji\",\"[1,2]:roma\"]";

var expected = new[]
{
new RomajiTag
{
StartIndex = 1,
EndIndex = 2,
Text = "roma"
},
new RomajiTag
{
StartIndex = 2,
EndIndex = 3,
Text = "ji"
},
};
var actual = JsonConvert.DeserializeObject<RomajiTag[]>(json, CreateSettings());
TextTagAssert.ArePropertyEqual(expected, actual);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
// Copyright (c) andy840119 <[email protected]>. Licensed under the GPL Licence.
// See the LICENCE file in the repository root for full licence text.

using Newtonsoft.Json;
using NUnit.Framework;
using osu.Game.Rulesets.Karaoke.IO.Serialization.Converters;
using osu.Game.Rulesets.Karaoke.Objects;
using osu.Game.Rulesets.Karaoke.Tests.Asserts;

namespace osu.Game.Rulesets.Karaoke.Tests.IO.Serialization.Converters
{
public class RubyTagsConverterTest : BaseSingleConverterTest<RubyTagsConverter>
{
protected override JsonConverter[] CreateExtraConverts()
=> new JsonConverter[]
{
new RubyTagConverter(),
};

[Test]
public void TestSerialize()
{
var timeTags = new[]
{
new RubyTag
{
StartIndex = 2,
EndIndex = 3,
Text = "ビ"
},
new RubyTag
{
StartIndex = 1,
EndIndex = 2,
Text = "ル"
},
};

const string expected = "[\"[1,2]:ル\",\"[2,3]:ビ\"]";
string actual = JsonConvert.SerializeObject(timeTags, CreateSettings());
Assert.AreEqual(expected, actual);
}

[Test]
public void TestDeserialize()
{
const string json = "[\"[2,3]:ビ\",\"[1,2]:ル\"]";

var expected = new[]
{
new RubyTag
{
StartIndex = 1,
EndIndex = 2,
Text = "ル"
},
new RubyTag
{
StartIndex = 2,
EndIndex = 3,
Text = "ビ"
},
};
var actual = JsonConvert.DeserializeObject<RubyTag[]>(json, CreateSettings());
TextTagAssert.ArePropertyEqual(expected, actual);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// Copyright (c) andy840119 <[email protected]>. Licensed under the GPL Licence.
// See the LICENCE file in the repository root for full licence text.

using System.Collections.Generic;
using osu.Game.Rulesets.Karaoke.Objects;
using osu.Game.Rulesets.Karaoke.Utils;

namespace osu.Game.Rulesets.Karaoke.IO.Serialization.Converters
{
public class RomajiTagsConverter : SortableJsonConvertor<RomajiTag>
{
protected override IEnumerable<RomajiTag> GetSortedValue(IEnumerable<RomajiTag> objects)
=> TextTagsUtils.Sort(objects);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// Copyright (c) andy840119 <[email protected]>. Licensed under the GPL Licence.
// See the LICENCE file in the repository root for full licence text.

using System.Collections.Generic;
using osu.Game.Rulesets.Karaoke.Objects;
using osu.Game.Rulesets.Karaoke.Utils;

namespace osu.Game.Rulesets.Karaoke.IO.Serialization.Converters
{
public class RubyTagsConverter : SortableJsonConvertor<RubyTag>
{
protected override IEnumerable<RubyTag> GetSortedValue(IEnumerable<RubyTag> objects)
=> TextTagsUtils.Sort(objects);
}
}

0 comments on commit 7125502

Please sign in to comment.