A game framework written with osu! in mind.
at master 4.6 kB view raw
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}