StringExtensionsTests.cs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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. public void RemoveDiacritics_ValidInput_Corrects(string input, string expectedResult)
  16. {
  17. string result = input.RemoveDiacritics();
  18. Assert.Equal(expectedResult, result);
  19. }
  20. [Theory]
  21. [InlineData("", false)] // Identity edge-case (no diactritics)
  22. [InlineData("Indiana Jones", false)] // Identity (no diactritics)
  23. [InlineData("a\ud800b", true)] // Invalid UTF-16 char stripping
  24. [InlineData("Jön", true)] // Issue #7484
  25. [InlineData("Jönssonligan", true)] // Issue #7484
  26. [InlineData("Kieślowski", true)] // Issue #7450
  27. [InlineData("Cidadão Kane", true)] // Issue #7560
  28. public void HasDiacritics_ValidInput_Corrects(string input, bool expectedResult)
  29. {
  30. bool result = input.HasDiacritics();
  31. Assert.Equal(expectedResult, result);
  32. }
  33. [Theory]
  34. [InlineData("", '_', 0)]
  35. [InlineData("___", '_', 3)]
  36. [InlineData("test\x00", '\x00', 1)]
  37. [InlineData("Imdb=tt0119567|Tmdb=330|TmdbCollection=328", '|', 2)]
  38. public void ReadOnlySpan_Count_Success(string str, char needle, int count)
  39. {
  40. Assert.Equal(count, str.AsSpan().Count(needle));
  41. }
  42. [Theory]
  43. [InlineData("", 'q', "")]
  44. [InlineData("Banana split", ' ', "Banana")]
  45. [InlineData("Banana split", 'q', "Banana split")]
  46. [InlineData("Banana split 2", ' ', "Banana")]
  47. public void LeftPart_ValidArgsCharNeedle_Correct(string str, char needle, string expectedResult)
  48. {
  49. var result = str.AsSpan().LeftPart(needle).ToString();
  50. Assert.Equal(expectedResult, result);
  51. }
  52. [Theory]
  53. [InlineData("", 'q', "")]
  54. [InlineData("Banana split", ' ', "split")]
  55. [InlineData("Banana split", 'q', "Banana split")]
  56. [InlineData("Banana split.", '.', "")]
  57. [InlineData("Banana split 2", ' ', "2")]
  58. public void RightPart_ValidArgsCharNeedle_Correct(string str, char needle, string expectedResult)
  59. {
  60. var result = str.AsSpan().RightPart(needle).ToString();
  61. Assert.Equal(expectedResult, result);
  62. }
  63. }
  64. }