EncoderServiceCollectionExtensionsTests.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. // Copyright (c) .NET Foundation. All rights reserved.
  2. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
  3. using System.Text.Encodings.Web;
  4. using Microsoft.Extensions.DependencyInjection;
  5. using Microsoft.Extensions.WebEncoders.Testing;
  6. using Xunit;
  7. namespace Microsoft.Extensions.WebEncoders
  8. {
  9. public class EncoderServiceCollectionExtensionsTests
  10. {
  11. [Fact]
  12. public void AddWebEncoders_WithoutOptions_RegistersDefaultEncoders()
  13. {
  14. // Arrange
  15. var serviceCollection = new ServiceCollection();
  16. // Act
  17. serviceCollection.AddWebEncoders();
  18. // Assert
  19. var serviceProvider = serviceCollection.BuildServiceProvider();
  20. Assert.Same(HtmlEncoder.Default, serviceProvider.GetRequiredService<HtmlEncoder>()); // default encoder
  21. Assert.Same(HtmlEncoder.Default, serviceProvider.GetRequiredService<HtmlEncoder>()); // as singleton instance
  22. Assert.Same(JavaScriptEncoder.Default, serviceProvider.GetRequiredService<JavaScriptEncoder>()); // default encoder
  23. Assert.Same(JavaScriptEncoder.Default, serviceProvider.GetRequiredService<JavaScriptEncoder>()); // as singleton instance
  24. Assert.Same(UrlEncoder.Default, serviceProvider.GetRequiredService<UrlEncoder>()); // default encoder
  25. Assert.Same(UrlEncoder.Default, serviceProvider.GetRequiredService<UrlEncoder>()); // as singleton instance
  26. }
  27. [Fact]
  28. public void AddWebEncoders_WithOptions_RegistersEncodersWithCustomCodeFilter()
  29. {
  30. // Arrange
  31. var serviceCollection = new ServiceCollection();
  32. // Act
  33. serviceCollection.AddWebEncoders(options =>
  34. {
  35. options.TextEncoderSettings = new TextEncoderSettings();
  36. options.TextEncoderSettings.AllowCharacters("ace".ToCharArray()); // only these three chars are allowed
  37. });
  38. // Assert
  39. var serviceProvider = serviceCollection.BuildServiceProvider();
  40. var htmlEncoder = serviceProvider.GetRequiredService<HtmlEncoder>();
  41. Assert.Equal("a&#x62;c&#x64;e", htmlEncoder.Encode("abcde"));
  42. Assert.Same(htmlEncoder, serviceProvider.GetRequiredService<HtmlEncoder>()); // as singleton instance
  43. var javaScriptEncoder = serviceProvider.GetRequiredService<JavaScriptEncoder>();
  44. Assert.Equal(@"a\u0062c\u0064e", javaScriptEncoder.Encode("abcde"));
  45. Assert.Same(javaScriptEncoder, serviceProvider.GetRequiredService<JavaScriptEncoder>()); // as singleton instance
  46. var urlEncoder = serviceProvider.GetRequiredService<UrlEncoder>();
  47. Assert.Equal("a%62c%64e", urlEncoder.Encode("abcde"));
  48. Assert.Same(urlEncoder, serviceProvider.GetRequiredService<UrlEncoder>()); // as singleton instance
  49. }
  50. [Fact]
  51. public void AddWebEncoders_DoesNotOverrideExistingRegisteredEncoders()
  52. {
  53. // Arrange
  54. var serviceCollection = new ServiceCollection();
  55. // Act
  56. serviceCollection.AddSingleton<HtmlEncoder, HtmlTestEncoder>();
  57. serviceCollection.AddSingleton<JavaScriptEncoder, JavaScriptTestEncoder>();
  58. // we don't register an existing URL encoder
  59. serviceCollection.AddWebEncoders(options =>
  60. {
  61. options.TextEncoderSettings = new TextEncoderSettings();
  62. options.TextEncoderSettings.AllowCharacters("ace".ToCharArray()); // only these three chars are allowed
  63. });
  64. // Assert
  65. var serviceProvider = serviceCollection.BuildServiceProvider();
  66. var htmlEncoder = serviceProvider.GetRequiredService<HtmlEncoder>();
  67. Assert.Equal("HtmlEncode[[abcde]]", htmlEncoder.Encode("abcde"));
  68. var javaScriptEncoder = serviceProvider.GetRequiredService<JavaScriptEncoder>();
  69. Assert.Equal("JavaScriptEncode[[abcde]]", javaScriptEncoder.Encode("abcde"));
  70. var urlEncoder = serviceProvider.GetRequiredService<UrlEncoder>();
  71. Assert.Equal("a%62c%64e", urlEncoder.Encode("abcde"));
  72. }
  73. }
  74. }