Skip to content

Commit 32cc54c

Browse files
committed
perf: 优化性能更新单元测试
1 parent d6d6be1 commit 32cc54c

File tree

2 files changed

+23
-73
lines changed

2 files changed

+23
-73
lines changed

src/BootstrapBlazor/Utils/CssBuilder.cs

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
// Maintainer: Argo Zhang([email protected]) Website: https://www.blazor.zone
55

66
using System.Globalization;
7+
using System.Text;
78

89
namespace BootstrapBlazor.Components;
910

@@ -12,7 +13,8 @@ namespace BootstrapBlazor.Components;
1213
/// </summary>
1314
public class CssBuilder
1415
{
15-
private readonly List<string> stringBuffer;
16+
private readonly StringBuilder _builder = new();
17+
private bool _hasConent;
1618

1719
/// <summary>
1820
/// Creates a CssBuilder used to define conditional CSS classes used in a component.
@@ -28,8 +30,11 @@ public class CssBuilder
2830
/// <param name="value"></param>
2931
protected CssBuilder(string? value)
3032
{
31-
stringBuffer = [];
32-
AddClass(value);
33+
if (!string.IsNullOrEmpty(value))
34+
{
35+
_builder.Append(value);
36+
_hasConent = true;
37+
}
3338
}
3439

3540
/// <summary>
@@ -39,7 +44,18 @@ protected CssBuilder(string? value)
3944
/// <returns>CssBuilder</returns>
4045
public CssBuilder AddClass(string? value)
4146
{
42-
if (!string.IsNullOrEmpty(value)) stringBuffer.Add(value);
47+
if (!string.IsNullOrEmpty(value))
48+
{
49+
if (_hasConent)
50+
{
51+
_builder.Append(' ');
52+
}
53+
else
54+
{
55+
_hasConent = true;
56+
}
57+
_builder.Append(value);
58+
}
4359
return this;
4460
}
4561

@@ -101,8 +117,8 @@ public CssBuilder AddClassFromAttributes(IDictionary<string, object>? additional
101117
{
102118
if (additionalAttributes != null && additionalAttributes.TryGetValue("class", out var c))
103119
{
104-
var classList = c?.ToString();
105-
AddClass(classList);
120+
var classString = Convert.ToString(c, CultureInfo.InvariantCulture);
121+
AddClass(classString);
106122
}
107123
return this;
108124
}
@@ -127,5 +143,5 @@ public CssBuilder AddStyleFromAttributes(IDictionary<string, object>? additional
127143
/// Finalize the completed CSS Classes as a string.
128144
/// </summary>
129145
/// <returns>string</returns>
130-
public string? Build() => stringBuffer.Count > 0 ? string.Join(" ", stringBuffer) : null;
146+
public string? Build() => _hasConent ? _builder.ToString() : null;
131147
}

test/UnitTest/Utils/CssBuilderTest.cs

Lines changed: 0 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -21,51 +21,6 @@ public void AddClass_When()
2121
Assert.Contains("cls_test", classString);
2222
}
2323

24-
[Fact]
25-
public void AddStyle_When()
26-
{
27-
var classString = CssBuilder.Default()
28-
.AddStyle("width", () => "cls_test", () => false)
29-
.Build();
30-
Assert.DoesNotContain("widht: cls_test;", classString);
31-
32-
classString = CssBuilder.Default()
33-
.AddStyle("width", () => "cls_test", false)
34-
.Build();
35-
Assert.DoesNotContain("widht: cls_test;", classString);
36-
37-
classString = CssBuilder.Default()
38-
.AddStyle("width", "cls_test", false)
39-
.Build();
40-
Assert.DoesNotContain("widht: cls_test;", classString);
41-
42-
classString = CssBuilder.Default()
43-
.AddStyle("width", () => "cls_test", () => true)
44-
.Build();
45-
Assert.Contains("width: cls_test;", classString);
46-
47-
classString = CssBuilder.Default()
48-
.AddStyle("width", () => "cls_test", true)
49-
.Build();
50-
Assert.Contains("width: cls_test;", classString);
51-
52-
classString = CssBuilder.Default()
53-
.AddStyle("width", "cls_test", true)
54-
.Build();
55-
Assert.Contains("width: cls_test;", classString);
56-
57-
classString = CssBuilder.Default()
58-
.AddStyle("width", "cls_test", () => true)
59-
.Build();
60-
Assert.Contains("width: cls_test;", classString);
61-
62-
classString = CssBuilder.Default()
63-
.AddStyle("width", "cls_test_width")
64-
.AddStyle("height", "cls_test_height")
65-
.Build();
66-
Assert.Equal("width: cls_test_width; height: cls_test_height;", classString);
67-
}
68-
6924
[Fact]
7025
public void AddClass_Builder()
7126
{
@@ -82,27 +37,6 @@ public void AddClass_Builder()
8237
Assert.Contains("cls_test", classString);
8338
}
8439

85-
[Fact]
86-
public void AddStyle_Builder()
87-
{
88-
var builder = CssBuilder.Default("width: cls_test_width;");
89-
90-
var classString = CssBuilder.Default()
91-
.AddStyle(builder, false)
92-
.Build();
93-
Assert.DoesNotContain("width: cls_test_width;", classString);
94-
95-
classString = CssBuilder.Default()
96-
.AddStyle(builder, () => true)
97-
.Build();
98-
Assert.Contains("width: cls_test_width;", classString);
99-
100-
classString = CssBuilder.Default()
101-
.AddStyle(builder, true)
102-
.Build();
103-
Assert.Contains("width: cls_test_width;", classString);
104-
}
105-
10640
[Fact]
10741
public void AddStyleFromAttributes_Ok()
10842
{

0 commit comments

Comments
 (0)