Skip to content
This repository was archived by the owner on Nov 28, 2023. It is now read-only.

Commit 35e6bb8

Browse files
committed
Increased serialize/deserialize performance ~30x by using static cache.
1 parent f066b27 commit 35e6bb8

File tree

9 files changed

+298
-66
lines changed

9 files changed

+298
-66
lines changed

src/ServiceStack.Text.EnumMemberSerializer.UnitTests/AssemblyExtenstionsTests.cs

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,13 @@ namespace ServiceStack.Text.EnumMemberSerializer.UnitTests
1010
public class AssemblyExtenstionsTests
1111
{
1212
[Fact]
13-
public void GetPublicEnums_UnitTestClassNoFilter_ReturnsBothEnums()
13+
public void GetPublicEnums_UnitTestClassNoFilter_ReturnsAllEnums()
1414
{
1515
var assemblies = new List<Assembly> {Assembly.GetExecutingAssembly()};
1616
var publicEnums = assemblies.GetPublicEnums(EnumSerializerConfigurator.AlwaysTrueFilter);
1717

18-
Assert.Equal(2, publicEnums.Count);
18+
Assert.Equal(3, publicEnums.Count);
19+
Assert.True(publicEnums.Contains(typeof (WhereTheEnumHasNoNamespace)));
1920
Assert.True(publicEnums.Contains(typeof (FakeTestingEnum)));
2021
Assert.True(publicEnums.Contains(typeof (DifferentNamespaceEnum)));
2122
}
@@ -31,14 +32,15 @@ public void GetPublicEnums_UnitTestClassWithFilter_ReturnsDifferentNamespaceEnum
3132
}
3233

3334
[Fact]
34-
public void GetPublicEnums_DuplicateAssemblyInList_ReturnsBothDistinctEnums()
35+
public void GetPublicEnums_DuplicateAssemblyInList_ReturnsAllDistinctEnums()
3536
{
3637
var assemblies = new List<Assembly> {Assembly.GetExecutingAssembly(), Assembly.GetExecutingAssembly()};
3738
var publicEnums = assemblies.GetPublicEnums(EnumSerializerConfigurator.AlwaysTrueFilter);
3839

39-
Assert.Equal(2, publicEnums.Count);
40-
Assert.True(publicEnums.Contains(typeof(FakeTestingEnum)));
41-
Assert.True(publicEnums.Contains(typeof(DifferentNamespaceEnum)));
40+
Assert.Equal(3, publicEnums.Count);
41+
Assert.True(publicEnums.Contains(typeof (WhereTheEnumHasNoNamespace)));
42+
Assert.True(publicEnums.Contains(typeof (FakeTestingEnum)));
43+
Assert.True(publicEnums.Contains(typeof (DifferentNamespaceEnum)));
4244
}
4345

4446
[Fact]
@@ -58,12 +60,13 @@ public void GetPublicEnums_NullAssemblyList_EmptyTypes()
5860
}
5961

6062
[Fact]
61-
public void GetPublicEnums_UnitTestClassNullFilter_ReturnsBothEnums()
63+
public void GetPublicEnums_UnitTestClassNullFilter_ReturnsAllEnums()
6264
{
6365
var assemblies = new List<Assembly> {Assembly.GetExecutingAssembly()};
6466
var publicEnums = assemblies.GetPublicEnums(null);
6567

66-
Assert.Equal(2, publicEnums.Count);
68+
Assert.Equal(3, publicEnums.Count);
69+
Assert.True(publicEnums.Contains(typeof (WhereTheEnumHasNoNamespace)));
6770
Assert.True(publicEnums.Contains(typeof (FakeTestingEnum)));
6871
Assert.True(publicEnums.Contains(typeof (DifferentNamespaceEnum)));
6972
}
@@ -96,5 +99,17 @@ public void GetPublicEnums_FilterThrowsException_ExceptionPassedUp()
9699
assemblies.GetPublicEnums(s => { throw new NotImplementedException(); });
97100
});
98101
}
102+
103+
[Fact]
104+
public void GetPublicEnums_CheckNoNullStrings_NullNamespaceEnumIsNotNullString()
105+
{
106+
var assemblies = new List<Assembly> { Assembly.GetExecutingAssembly() };
107+
assemblies.GetPublicEnums(
108+
s =>
109+
{
110+
Assert.NotNull(s);
111+
return true;
112+
});
113+
}
99114
}
100115
}

src/ServiceStack.Text.EnumMemberSerializer.UnitTests/EnumSerializerConfiguratorTests.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public class EnumSerializerConfiguratorTests
1111
public void Configure_TestAssembly_JsConfigFuncsSet()
1212
{
1313
//Inspecting static values, so locking in cases tests are multi threaded.
14-
lock (JsConfigLock.LockObject)
14+
lock (StaticTestingLocks.JsConfigLockObject)
1515
{
1616
JsConfig<FakeTestingEnum>.Reset();
1717

@@ -30,15 +30,16 @@ public void Configure_TestAssembly_JsConfigFuncsSet()
3030
}
3131

3232
[Fact]
33-
public void Configure_TestAssembly_BothEnumsConfigured()
33+
public void Configure_TestAssembly_AllEnumsConfigured()
3434
{
3535
var proxyFake = new EnumSerializerHelpersProxyFake();
3636

3737
new EnumSerializerConfigurator {JsConfigProxy = proxyFake}
3838
.WithAssemblies(new[] {Assembly.GetExecutingAssembly()})
3939
.Configure();
4040

41-
Assert.Equal(2, proxyFake.ConfigedTypes.Count);
41+
Assert.Equal(3, proxyFake.ConfigedTypes.Count);
42+
Assert.True(proxyFake.ConfigedTypes.Contains(typeof (WhereTheEnumHasNoNamespace)));
4243
Assert.True(proxyFake.ConfigedTypes.Contains(typeof (FakeTestingEnum)));
4344
Assert.True(proxyFake.ConfigedTypes.Contains(typeof (DifferentNamespaceEnum)));
4445
}

src/ServiceStack.Text.EnumMemberSerializer.UnitTests/EnumSerializerHelpersProxyTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ public class EnumSerializerHelpersProxyTests
99
public void ConfigEnumSerializers_EnumType_JsConfigFuncsSet()
1010
{
1111
//Inspecting static values, so locking in cases tests are multi threaded.
12-
lock (JsConfigLock.LockObject)
12+
lock (StaticTestingLocks.JsConfigLockObject)
1313
{
1414
JsConfig<FakeTestingEnum>.Reset();
1515

0 commit comments

Comments
 (0)