forked from emmauss/Ryujinx
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Prevent raw Unicode control codes from showing on software keyboard a…
…pplet. (#3845) * Revert "Add support for releasing a semaphore to DmaClass (#2926)" This reverts commit 521a07e. * Revert "Revert "Add support for releasing a semaphore to DmaClass (#2926)"" This reverts commit ec8a5fd. * Strip non-visible control codes from strings before they are sent to the software keyboard to prevent ugly unicode blocks from being shown on the UI. * remove debugging junk * Initialize stringbuilder capacity at the start to prevent resizing (a tiny tiny microoptimization) * Update remarks documentation. Remove unneeded imports. * Removing a test that's actually just redundant Co-authored-by: Logan Stromberg <[email protected]>
- Loading branch information
Showing
3 changed files
with
112 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
using System.Runtime.CompilerServices; | ||
|
||
[assembly: InternalsVisibleTo("Ryujinx.Tests")] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
using NUnit.Framework; | ||
using Ryujinx.HLE.HOS.Applets; | ||
using System.Text; | ||
|
||
namespace Ryujinx.Tests.HLE | ||
{ | ||
public class SoftwareKeyboardTests | ||
{ | ||
[Test] | ||
public void StripUnicodeControlCodes_NullInput() | ||
{ | ||
Assert.IsNull(SoftwareKeyboardApplet.StripUnicodeControlCodes(null)); | ||
} | ||
|
||
[Test] | ||
public void StripUnicodeControlCodes_EmptyInput() | ||
{ | ||
Assert.AreEqual(string.Empty, SoftwareKeyboardApplet.StripUnicodeControlCodes(string.Empty)); | ||
} | ||
|
||
[Test] | ||
public void StripUnicodeControlCodes_Passthrough() | ||
{ | ||
string[] prompts = new string[] | ||
{ | ||
"Please name him.", | ||
"Name her, too.", | ||
"Name your friend.", | ||
"Name another friend.", | ||
"Name your pet.", | ||
"Favorite homemade food?", | ||
"What’s your favorite thing?", | ||
"Are you sure?", | ||
}; | ||
|
||
foreach (string prompt in prompts) | ||
{ | ||
Assert.AreEqual(prompt, SoftwareKeyboardApplet.StripUnicodeControlCodes(prompt)); | ||
} | ||
} | ||
|
||
[Test] | ||
public void StripUnicodeControlCodes_StripsNewlines() | ||
{ | ||
Assert.AreEqual("I am very tall", SoftwareKeyboardApplet.StripUnicodeControlCodes("I \r\nam \r\nvery \r\ntall")); | ||
} | ||
|
||
[Test] | ||
public void StripUnicodeControlCodes_StripsDeviceControls() | ||
{ | ||
// 0x13 is control code DC3 used by some games | ||
string specialInput = Encoding.UTF8.GetString(new byte[] { 0x13, 0x53, 0x68, 0x69, 0x6E, 0x65, 0x13 }); | ||
Assert.AreEqual("Shine", SoftwareKeyboardApplet.StripUnicodeControlCodes(specialInput)); | ||
} | ||
|
||
[Test] | ||
public void StripUnicodeControlCodes_StripsToEmptyString() | ||
{ | ||
string specialInput = Encoding.UTF8.GetString(new byte[] { 17, 18, 19, 20 }); // DC1 - DC4 special codes | ||
Assert.AreEqual(string.Empty, SoftwareKeyboardApplet.StripUnicodeControlCodes(specialInput)); | ||
} | ||
|
||
[Test] | ||
public void StripUnicodeControlCodes_PreservesMultiCodePoints() | ||
{ | ||
// Turtles are a good example of multi-codepoint Unicode chars | ||
string specialInput = "♀ 🐢 🐢 ♂ "; | ||
Assert.AreEqual(specialInput, SoftwareKeyboardApplet.StripUnicodeControlCodes(specialInput)); | ||
} | ||
} | ||
} |