StringExtensionsTests.cs 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. using System;
  2. using Xunit;
  3. namespace Jellyfin.Extensions.Tests
  4. {
  5. public class StringExtensionsTests
  6. {
  7. [Theory]
  8. [InlineData("", "")] // Identity edge-case (no diactritics)
  9. [InlineData("Indiana Jones", "Indiana Jones")] // Identity (no diactritics)
  10. [InlineData("a\ud800b", "ab")] // Invalid UTF-16 char stripping
  11. [InlineData("Jön", "Jon")] // Issue #7484
  12. [InlineData("Jönssonligan", "Jonssonligan")] // Issue #7484
  13. [InlineData("Kieślowski", "Kieslowski")] // Issue #7450
  14. [InlineData("Cidadão Kane", "Cidadao Kane")] // Issue #7560
  15. [InlineData("운명처럼 널 사랑해", "운명처럼 널 사랑해")] // Issue #6393 (Korean language support)
  16. [InlineData("애타는 로맨스", "애타는 로맨스")] // Issue #6393
  17. public void RemoveDiacritics_ValidInput_Corrects(string input, string expectedResult)
  18. {
  19. string result = input.RemoveDiacritics();
  20. Assert.Equal(expectedResult, result);
  21. }
  22. [Theory]
  23. [InlineData("", false)] // Identity edge-case (no diactritics)
  24. [InlineData("Indiana Jones", false)] // Identity (no diactritics)
  25. [InlineData("a\ud800b", true)] // Invalid UTF-16 char stripping
  26. [InlineData("Jön", true)] // Issue #7484
  27. [InlineData("Jönssonligan", true)] // Issue #7484
  28. [InlineData("Kieślowski", true)] // Issue #7450
  29. [InlineData("Cidadão Kane", true)] // Issue #7560
  30. [InlineData("운명처럼 널 사랑해", false)] // Issue #6393 (Korean language support)
  31. [InlineData("애타는 로맨스", false)] // Issue #6393
  32. public void HasDiacritics_ValidInput_Corrects(string input, bool expectedResult)
  33. {
  34. bool result = input.HasDiacritics();
  35. Assert.Equal(expectedResult, result);
  36. }
  37. [Theory]
  38. [InlineData("", '_', 0)]
  39. [InlineData("___", '_', 3)]
  40. [InlineData("test\x00", '\x00', 1)]
  41. [InlineData("Imdb=tt0119567|Tmdb=330|TmdbCollection=328", '|', 2)]
  42. public void ReadOnlySpan_Count_Success(string str, char needle, int count)
  43. {
  44. Assert.Equal(count, str.AsSpan().Count(needle));
  45. }
  46. [Theory]
  47. [InlineData("", 'q', "")]
  48. [InlineData("Banana split", ' ', "Banana")]
  49. [InlineData("Banana split", 'q', "Banana split")]
  50. [InlineData("Banana split 2", ' ', "Banana")]
  51. public void LeftPart_ValidArgsCharNeedle_Correct(string str, char needle, string expectedResult)
  52. {
  53. var result = str.AsSpan().LeftPart(needle).ToString();
  54. Assert.Equal(expectedResult, result);
  55. }
  56. [Theory]
  57. [InlineData("", 'q', "")]
  58. [InlineData("Banana split", ' ', "split")]
  59. [InlineData("Banana split", 'q', "Banana split")]
  60. [InlineData("Banana split.", '.', "")]
  61. [InlineData("Banana split 2", ' ', "2")]
  62. public void RightPart_ValidArgsCharNeedle_Correct(string str, char needle, string expectedResult)
  63. {
  64. var result = str.AsSpan().RightPart(needle).ToString();
  65. Assert.Equal(expectedResult, result);
  66. }
  67. }
  68. }