Skip to content

Commit

Permalink
Merge pull request #422 from andy840119/refactor-test-case
Browse files Browse the repository at this point in the history
Refactor the TextIndexTest.cs
  • Loading branch information
andy840119 authored Dec 10, 2023
2 parents e06f33e + dd4619a commit 9c62b96
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 46 deletions.
84 changes: 38 additions & 46 deletions osu.Framework.Font.Tests/Graphics/TextIndexTest.cs
Original file line number Diff line number Diff line change
@@ -1,74 +1,66 @@
// Copyright (c) karaoke.dev <[email protected]>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.

using System;
using NUnit.Framework;
using osu.Framework.Graphics.Sprites;
using osu.Framework.Font.Tests.Helper;

namespace osu.Framework.Font.Tests.Graphics;

[TestFixture]
public class TextIndexTest
{
[TestCase(1, 1)]
[TestCase(1.5, 1.5)]
[TestCase(-1.5, -1.5)]
public void TestOperatorEqual(double tone1, double tone2)
[TestCase("1,start")]
[TestCase("1,end")]
[TestCase("-1,start")]
public void TestOperatorEqual(string textIndex1)
{
Assert.AreEqual(numberToTextIndex(tone1), numberToTextIndex(tone2));
Assert.AreEqual(TestCaseTextIndexHelper.ParseTextIndex(textIndex1), TestCaseTextIndexHelper.ParseTextIndex(textIndex1));
}

[TestCase(-1, 1)]
[TestCase(1, -1)]
[TestCase(1.5, -1.5)]
[TestCase(1.5, 1)]
[TestCase(-1.5, -1)]
[TestCase(-1.5, -2)]
public void TestOperatorNotEqual(double tone1, double tone2)
[TestCase("-1,start", "1,start")]
[TestCase("1,start", "-1,start")]
[TestCase("1,end", "-1,end")]
[TestCase("1,end", "1,start")]
[TestCase("-2,end", "-1,start")]
[TestCase("-2,end", "-2,start")]
public void TestOperatorNotEqual(string textIndex1, string textIndex2)
{
Assert.AreNotEqual(numberToTextIndex(tone1), numberToTextIndex(tone2));
Assert.AreNotEqual(TestCaseTextIndexHelper.ParseTextIndex(textIndex1), TestCaseTextIndexHelper.ParseTextIndex(textIndex2));
}

[TestCase(1, 0, true)]
[TestCase(1, 0.5, true)]
[TestCase(1, 1, false)]
[TestCase(1, 1.5, false)]
public void TestOperatorGreater(double tone1, double tone2, bool match)
[TestCase("1,start", "0,start", true)]
[TestCase("1,start", "0,end", true)]
[TestCase("1,start", "1,start", false)]
[TestCase("1,start", "1,end", false)]
public void TestOperatorGreater(string textIndex1, string textIndex2, bool match)
{
Assert.AreEqual(numberToTextIndex(tone1) > numberToTextIndex(tone2), match);
Assert.AreEqual(TestCaseTextIndexHelper.ParseTextIndex(textIndex1) > TestCaseTextIndexHelper.ParseTextIndex(textIndex2), match);
}

[TestCase(1, 0, true)]
[TestCase(1, 0.5, true)]
[TestCase(1, 1, true)]
[TestCase(1, 1.5, false)]
public void TestOperatorGreaterOrEqual(double tone1, double tone2, bool match)
[TestCase("1,start", "0,start", true)]
[TestCase("1,start", "0,end", true)]
[TestCase("1,start", "1,start", true)]
[TestCase("1,start", "1,end", false)]
public void TestOperatorGreaterOrEqual(string textIndex1, string textIndex2, bool match)
{
Assert.AreEqual(numberToTextIndex(tone1) >= numberToTextIndex(tone2), match);
Assert.AreEqual(TestCaseTextIndexHelper.ParseTextIndex(textIndex1) >= TestCaseTextIndexHelper.ParseTextIndex(textIndex2), match);
}

[TestCase(-1, 0, true)]
[TestCase(-1, -0.5, true)]
[TestCase(-1, -1, false)]
[TestCase(-1, -1.5, false)]
public void TestOperatorLess(double tone1, double tone2, bool match)
[TestCase("-1,start", "0,start", true)]
[TestCase("-1,start", "-1,end", true)]
[TestCase("-1,start", "-1,start", false)]
[TestCase("-1,start", "-2,end", false)]
public void TestOperatorLess(string textIndex1, string textIndex2, bool match)
{
Assert.AreEqual(numberToTextIndex(tone1) < numberToTextIndex(tone2), match);
Assert.AreEqual(TestCaseTextIndexHelper.ParseTextIndex(textIndex1) < TestCaseTextIndexHelper.ParseTextIndex(textIndex2), match);
}

[TestCase(-1, 0, true)]
[TestCase(-1, -0.5, true)]
[TestCase(-1, -1, true)]
[TestCase(-1, -1.5, false)]
public void TestOperatorLessOrEqual(double tone1, double tone2, bool match)
[TestCase("-1,start", "0,start", true)]
[TestCase("-1,start", "-1,end", true)]
[TestCase("-1,start", "-1,start", true)]
[TestCase("-1,start", "-2,end", false)]
public void TestOperatorLessOrEqual(string textIndex1, string textIndex2, bool match)
{
Assert.AreEqual(numberToTextIndex(tone1) <= numberToTextIndex(tone2), match);
}

private static TextIndex numberToTextIndex(double tone)
{
var half = Math.Abs(tone) % 1 == 0.5;
var scale = tone < 0 ? (int)tone - (half ? 1 : 0) : (int)tone;
return new TextIndex(scale, half ? TextIndex.IndexState.End : TextIndex.IndexState.Start);
Assert.AreEqual(TestCaseTextIndexHelper.ParseTextIndex(textIndex1) <= TestCaseTextIndexHelper.ParseTextIndex(textIndex2), match);
}
}
23 changes: 23 additions & 0 deletions osu.Framework.Font.Tests/Helper/TestCaseTextIndexHelper.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// Copyright (c) karaoke.dev <[email protected]>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.

using System.Text.RegularExpressions;
using osu.Framework.Graphics.Sprites;

namespace osu.Framework.Font.Tests.Helper;

public class TestCaseTextIndexHelper
{
public static TextIndex ParseTextIndex(string str)
{
var regex = new Regex("(?<index>[-0-9]+),(?<state>start|end)");
var result = regex.Match(str);
if (!result.Success)
throw new RegexMatchTimeoutException(nameof(str));

int index = int.Parse(result.Groups["index"].Value);
var state = result.Groups["state"].Value == "start" ? TextIndex.IndexState.Start : TextIndex.IndexState.End;

return new TextIndex(index, state);
}
}

0 comments on commit 9c62b96

Please sign in to comment.