Skip to content

Commit 02d543c

Browse files
committed
[Tests] Add localization-specific skip attributes and refactor localization test structure
1 parent 5dc2a47 commit 02d543c

5 files changed

Lines changed: 126 additions & 54 deletions

File tree

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using Autodesk.Revit.ApplicationServices;
2+
using Nice3point.Revit.Injector;
3+
4+
namespace Nice3point.TUnit.Revit.Tests.Attributes;
5+
6+
public sealed class ChineseLocalizationOnlyAttribute() : SkipAttribute("This test is only supported on Chinese localization")
7+
{
8+
public override Task<bool> ShouldSkip(TestRegisteredContext context)
9+
{
10+
return Task.FromResult(RevitEnvironment.Language != nameof(LanguageType.Chinese_Simplified));
11+
}
12+
}
Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
11
using Autodesk.Revit.ApplicationServices;
2+
using Nice3point.Revit.Injector;
23

34
namespace Nice3point.TUnit.Revit.Tests.Attributes;
45

5-
public sealed class EnglishLocalizationOnlyAttribute() : SkipAttribute("This test is only supported on English localisation")
6+
public sealed class EnglishLocalizationOnlyAttribute() : SkipAttribute("This test is only supported on English localization")
67
{
78
public override Task<bool> ShouldSkip(TestRegisteredContext context)
89
{
9-
return Task.FromResult(RevitApiContext.Application.Language != LanguageType.English_USA);
10+
if (string.IsNullOrEmpty(RevitEnvironment.Language))
11+
{
12+
// English localization is default
13+
return Task.FromResult(false);
14+
}
15+
16+
return Task.FromResult(RevitEnvironment.Language != nameof(LanguageType.English_USA));
1017
}
1118
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using Autodesk.Revit.ApplicationServices;
2+
using Nice3point.Revit.Injector;
3+
4+
namespace Nice3point.TUnit.Revit.Tests.Attributes;
5+
6+
public sealed class RussianLocalizationOnlyAttribute() : SkipAttribute("This test is only supported on Russian localization")
7+
{
8+
public override Task<bool> ShouldSkip(TestRegisteredContext context)
9+
{
10+
return Task.FromResult(RevitEnvironment.Language != nameof(LanguageType.Russian));
11+
}
12+
}

Nice3point.TUnit.Revit.Tests/LocalizationTests.cs

Lines changed: 92 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,74 @@
33

44
namespace Nice3point.TUnit.Revit.Tests;
55

6-
public sealed class LocalizationTests : RevitApiTest
6+
/// <summary>
7+
/// Skips all tests in the class that don't match the current Revit localization.
8+
/// </summary>
9+
public sealed class LocalizationHookTests : RevitApiTest
10+
{
11+
[Before(Test)]
12+
public void SkipUnmatchedLocalization()
13+
{
14+
if (Application.Language != LanguageType.English_USA)
15+
{
16+
Skip.Test("This test is only supported on English localization");
17+
}
18+
}
19+
20+
[Test]
21+
public async Task Cities_English_ValidName()
22+
{
23+
// Arrange & Act
24+
var city = Application.Cities.Cast<City>().OrderBy(city => city.Name).First();
25+
26+
// Assert
27+
await Assert.That(city.Name).IsEqualTo("Aberdeen, MD");
28+
}
29+
}
30+
31+
/// <summary>
32+
/// Skips tests that don't match the current Revit localization using attributes.
33+
/// </summary>
34+
public sealed class LocalizationAttributeTests : RevitApiTest
35+
{
36+
[Test]
37+
[EnglishLocalizationOnly]
38+
public async Task Cities_English_ValidName()
39+
{
40+
// Arrange & Act
41+
var city = Application.Cities.Cast<City>().OrderBy(city => city.Name).First();
42+
43+
// Assert
44+
await Assert.That(city.Name).IsEqualTo("Aberdeen, MD");
45+
}
46+
47+
[Test]
48+
[RussianLocalizationOnly]
49+
public async Task Cities_Russian_ValidName()
50+
{
51+
// Arrange & Act
52+
var city = Application.Cities.Cast<City>().OrderBy(city => city.Name).First();
53+
54+
// Assert
55+
await Assert.That(city.Name).IsEqualTo("Абердин, MD");
56+
}
57+
58+
[Test]
59+
[ChineseLocalizationOnly]
60+
public async Task Cities_Chinese_ValidName()
61+
{
62+
// Arrange & Act
63+
var city = Application.Cities.Cast<City>().OrderBy(city => city.Name).First();
64+
65+
// Assert
66+
await Assert.That(city.Name).IsEqualTo("K.I.索耶空军基地,密歇根");
67+
}
68+
}
69+
70+
/// <summary>
71+
/// Skips tests dynamically based on the current Revit localization.
72+
/// </summary>
73+
public sealed class LocalizationDynamicSkipTests : RevitApiTest
774
{
875
[Test]
976
public async Task Cities_RandomCity_ValidLocalizedName()
@@ -25,7 +92,13 @@ public async Task Cities_RandomCity_ValidLocalizedName()
2592
break;
2693
}
2794
}
95+
}
2896

97+
/// <summary>
98+
/// Skips tests whose method name contains a language identifier that doesn't match the current Revit localization.
99+
/// </summary>
100+
public sealed class LocalizationNameFilterTests : RevitApiTest
101+
{
29102
[Test]
30103
public async Task Cities_English_USA_ValidName()
31104
{
@@ -55,37 +128,30 @@ public async Task Cities_Chinese_Simplified_ValidName()
55128
// Assert
56129
await Assert.That(city.Name).IsEqualTo("K.I.索耶空军基地,密歇根");
57130
}
58-
59-
[Test]
60-
[EnglishLocalizationOnly]
61-
public async Task Cities_EnglishAttribute_ValidName()
62-
{
63-
// Arrange & Act
64-
var city = Application.Cities.Cast<City>().OrderBy(city => city.Name).First();
65-
66-
// Assert
67-
await Assert.That(city.Name).IsEqualTo("Aberdeen, MD");
68-
}
69131
}
70132

71-
public sealed class LocalizationEnglishTests : RevitApiTest
133+
/// <summary>
134+
/// Globally skips tests whose method name contains a language identifier that doesn't match the current Revit localization.
135+
/// </summary>
136+
/// <remarks>Applies to all tests in the project.</remarks>
137+
public static class GlobalLocalizationSkipConfiguration
72138
{
73-
[Before(Test)]
74-
public void SkipUnmatchedLocalization()
139+
private static readonly string[] Languages = Enum.GetNames<LanguageType>();
140+
141+
[BeforeEvery(Test)]
142+
public static void SkipUnmatchedLocalization(TestContext context)
75143
{
76-
if (Application.Language != LanguageType.English_USA)
144+
var currentLanguage = RevitApiContext.Application.Language.ToString();
145+
foreach (var language in Languages)
77146
{
78-
Skip.Test("This test is only supported on English localisation");
79-
}
80-
}
147+
if (!context.Metadata.TestName.Contains(language, StringComparison.OrdinalIgnoreCase)) continue;
81148

82-
[Test]
83-
public async Task Cities_EnglishAttribute_ValidName()
84-
{
85-
// Arrange & Act
86-
var city = Application.Cities.Cast<City>().OrderBy(city => city.Name).First();
149+
if (!currentLanguage.Equals(language, StringComparison.OrdinalIgnoreCase))
150+
{
151+
Skip.Test($"Test targets {language}");
152+
}
87153

88-
// Assert
89-
await Assert.That(city.Name).IsEqualTo("Aberdeen, MD");
154+
return;
155+
}
90156
}
91157
}
Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,4 @@
1-
using Autodesk.Revit.ApplicationServices;
21
using Nice3point.TUnit.Revit.Executors;
32
using TUnit.Core.Executors;
43

5-
[assembly: TestExecutor<RevitThreadExecutor>]
6-
7-
namespace Nice3point.TUnit.Revit.Tests;
8-
9-
public static class TestsConfiguration
10-
{
11-
private static readonly string[] Languages = Enum.GetNames<LanguageType>();
12-
private static readonly string CurrentLanguage = RevitApiContext.Application.Language.ToString();
13-
14-
[BeforeEvery(Test)]
15-
public static void SkipUnmatchedLocalization(TestContext context)
16-
{
17-
foreach (var language in Languages)
18-
{
19-
if (!context.Metadata.TestName.Contains(language, StringComparison.OrdinalIgnoreCase)) continue;
20-
21-
if (!CurrentLanguage.Equals(language, StringComparison.OrdinalIgnoreCase))
22-
{
23-
Skip.Test($"Test targets {language}");
24-
}
25-
26-
return;
27-
}
28-
}
29-
}
4+
[assembly: TestExecutor<RevitThreadExecutor>]

0 commit comments

Comments
 (0)