A game framework written with osu! in mind.
1// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
2// See the LICENCE file in the repository root for full licence text.
3
4using System;
5using System.Collections.Generic;
6using NUnit.Framework;
7using osu.Framework.Localisation;
8
9namespace osu.Framework.Tests.Localisation
10{
11 [TestFixture]
12 public class LocalisableStringTest
13 {
14 private string makeStringA => makeString('a');
15 private string makeStringB => makeString('b');
16
17 private IFormattable makeFormattableA => new DateTime(1);
18 private IFormattable makeFormattableB => new DateTime(2);
19
20 [Test]
21 public void TestTranslatableStringEqualsTranslatableString()
22 {
23 var str1 = new TranslatableString(makeStringA, makeStringB, makeStringA, makeStringB);
24 var str2 = new TranslatableString(makeStringA, makeStringB);
25
26 testEquals(true, str1, str1);
27 testEquals(true, str1, new TranslatableString(makeStringA, makeStringB, makeStringA, makeStringB)); // Structural equality.
28 testEquals(false, str1, str2);
29 }
30
31 [Test]
32 public void TestRomanisableStringEqualsRomanisableString()
33 {
34 var str1 = new RomanisableString(makeStringA, makeStringB);
35 var str2 = new RomanisableString(makeStringB, makeStringA);
36
37 testEquals(true, str1, str1);
38 testEquals(true, str1, new RomanisableString(makeStringA, makeStringB)); // Structural equality.
39 testEquals(false, str1, str2);
40 }
41
42 [Test]
43 public void TestLocalisableFormattableEqualsLocalisableFormattable()
44 {
45 var str1 = new LocalisableFormattableString(makeFormattableA, makeStringB);
46 var str2 = new LocalisableFormattableString(makeFormattableB, makeStringA);
47
48 testEquals(true, str1, str1);
49 testEquals(true, str1, new LocalisableFormattableString(makeFormattableA, makeStringB));
50 testEquals(false, str1, str2);
51 }
52
53 [Test]
54 public void TestLocalisableStringEqualsString()
55 {
56 LocalisableString localisable = makeStringA;
57
58 testEquals(true, localisable, makeStringA);
59 testEquals(false, localisable, makeStringB);
60 }
61
62 [Test]
63 public void TestLocalisableStringEqualsTranslatableString()
64 {
65 LocalisableString localisable = new TranslatableString(makeStringA, makeStringB, makeStringA, makeStringB);
66
67 testEquals(true, localisable, new TranslatableString(makeStringA, makeStringB, makeStringA, makeStringB));
68 testEquals(false, localisable, new TranslatableString(makeStringB, makeStringA));
69 testEquals(false, localisable, makeStringA);
70 testEquals(false, localisable, new RomanisableString(makeStringA, makeStringB));
71 }
72
73 [Test]
74 public void TestLocalisableStringEqualsRomanisableString()
75 {
76 LocalisableString localisable = new RomanisableString(makeStringA, makeStringB);
77
78 testEquals(true, localisable, new RomanisableString(makeStringA, makeStringB));
79 testEquals(false, localisable, new RomanisableString(makeStringB, makeStringA));
80 testEquals(false, localisable, makeStringA);
81 testEquals(false, localisable, new TranslatableString(makeStringA, makeStringB));
82 }
83
84 [Test]
85 public void TestLocalisableStringEqualsLocalisableFormattable()
86 {
87 LocalisableString localisable = new LocalisableFormattableString(makeFormattableA, makeStringB);
88
89 testEquals(true, localisable, new LocalisableFormattableString(makeFormattableA, makeStringB));
90 testEquals(false, localisable, new LocalisableFormattableString(makeFormattableB, makeStringA));
91 }
92
93 [Test]
94 public void TestNullEqualsNull()
95 {
96 testEquals(true, new LocalisableString(), new LocalisableString());
97 }
98
99 [Test]
100 public void TestLocalisableStringDoesNotEqualNull()
101 {
102 testEquals(false, new LocalisableString(), new RomanisableString(makeStringA, makeStringB));
103 }
104
105 private static void testEquals<T>(bool expected, T a, T b)
106 {
107 var comparer = EqualityComparer<T>.Default;
108
109 Assert.That(comparer.Equals(a, b), Is.EqualTo(expected));
110 Assert.That(comparer.GetHashCode(a) == comparer.GetHashCode(b), Is.EqualTo(expected));
111 }
112
113 private static string makeString(params char[] chars) => new string(chars);
114 }
115}