|
31 | 31 | import org.junit.jupiter.api.extension.ParameterResolver; |
32 | 32 | import org.junit.jupiter.api.extension.TestTemplateInvocationContextProvider; |
33 | 33 | import org.junit.jupiter.engine.config.JupiterConfiguration; |
| 34 | +import org.junit.platform.commons.util.ClassNamePatternFilterUtils; |
34 | 35 |
|
35 | 36 | /** |
36 | 37 | * Tests for the {@link MutableExtensionRegistry}. |
@@ -65,13 +66,87 @@ void newRegistryWithoutParentHasDefaultExtensionsPlusAutodetectedExtensionsLoade |
65 | 66 |
|
66 | 67 | List<Extension> extensions = registry.getExtensions(Extension.class); |
67 | 68 |
|
68 | | - assertEquals(NUM_DEFAULT_EXTENSIONS + 1, extensions.size()); |
| 69 | + assertEquals(NUM_DEFAULT_EXTENSIONS + 2, extensions.size()); |
| 70 | + assertDefaultGlobalExtensionsAreRegistered(4); |
| 71 | + |
| 72 | + assertExtensionRegistered(registry, ServiceLoaderExtension.class); |
| 73 | + assertEquals(4, countExtensions(registry, BeforeAllCallback.class)); |
| 74 | + } |
| 75 | + |
| 76 | + @Test |
| 77 | + void registryIncludesAndExcludesSpecificAutoDetectedExtensions() { |
| 78 | + when(configuration.isExtensionAutoDetectionEnabled()).thenReturn(true); |
| 79 | + when(configuration.getFilterForAutoDetectedExtensions()).thenReturn( |
| 80 | + clazz -> ClassNamePatternFilterUtils.includeMatchingClassNames( |
| 81 | + "org.junit.jupiter.engine.extension.ServiceLoaderExtension").and( |
| 82 | + ClassNamePatternFilterUtils.excludeMatchingClassNames( |
| 83 | + "org.junit.jupiter.engine.extension.ConfigLoaderExtension")).test(clazz.getName())); |
| 84 | + registry = createRegistryWithDefaultExtensions(configuration); |
| 85 | + |
| 86 | + List<Extension> extensions = registry.getExtensions(Extension.class); |
| 87 | + |
| 88 | + assertEquals(NUM_DEFAULT_EXTENSIONS, extensions.size()); |
69 | 89 | assertDefaultGlobalExtensionsAreRegistered(3); |
70 | 90 |
|
71 | 91 | assertExtensionRegistered(registry, ServiceLoaderExtension.class); |
72 | 92 | assertEquals(3, countExtensions(registry, BeforeAllCallback.class)); |
73 | 93 | } |
74 | 94 |
|
| 95 | + @Test |
| 96 | + void registryIncludesAllAutoDetectedExtensionsAndExcludesNone() { |
| 97 | + when(configuration.isExtensionAutoDetectionEnabled()).thenReturn(true); |
| 98 | + when(configuration.getFilterForAutoDetectedExtensions()).thenReturn( |
| 99 | + clazz -> ClassNamePatternFilterUtils.includeMatchingClassNames("*").and( |
| 100 | + ClassNamePatternFilterUtils.excludeMatchingClassNames("")).test(clazz.getName())); |
| 101 | + registry = createRegistryWithDefaultExtensions(configuration); |
| 102 | + |
| 103 | + List<Extension> extensions = registry.getExtensions(Extension.class); |
| 104 | + |
| 105 | + assertEquals(NUM_DEFAULT_EXTENSIONS + 2, extensions.size()); |
| 106 | + assertDefaultGlobalExtensionsAreRegistered(4); |
| 107 | + |
| 108 | + assertExtensionRegistered(registry, ServiceLoaderExtension.class); |
| 109 | + assertExtensionRegistered(registry, ConfigLoaderExtension.class); |
| 110 | + assertEquals(4, countExtensions(registry, BeforeAllCallback.class)); |
| 111 | + } |
| 112 | + |
| 113 | + @Test |
| 114 | + void registryIncludesSpecificAutoDetectedExtensionsAndExcludesAll() { |
| 115 | + when(configuration.isExtensionAutoDetectionEnabled()).thenReturn(true); |
| 116 | + when(configuration.getFilterForAutoDetectedExtensions()).thenReturn( |
| 117 | + clazz -> ClassNamePatternFilterUtils.includeMatchingClassNames( |
| 118 | + "org.junit.jupiter.engine.extension.ServiceLoaderExtension").and( |
| 119 | + ClassNamePatternFilterUtils.excludeMatchingClassNames("*")).test(clazz.getName())); |
| 120 | + registry = createRegistryWithDefaultExtensions(configuration); |
| 121 | + |
| 122 | + List<Extension> extensions = registry.getExtensions(Extension.class); |
| 123 | + |
| 124 | + assertEquals(NUM_CORE_EXTENSIONS, extensions.size()); |
| 125 | + assertDefaultGlobalExtensionsAreRegistered(2); |
| 126 | + |
| 127 | + assertExtensionNotRegistered(registry, ServiceLoaderExtension.class); |
| 128 | + assertEquals(2, countExtensions(registry, BeforeAllCallback.class)); |
| 129 | + } |
| 130 | + |
| 131 | + @Test |
| 132 | + void registryIncludesAndExcludesSameAutoDetectedExtension() { |
| 133 | + when(configuration.isExtensionAutoDetectionEnabled()).thenReturn(true); |
| 134 | + when(configuration.getFilterForAutoDetectedExtensions()).thenReturn( |
| 135 | + clazz -> ClassNamePatternFilterUtils.includeMatchingClassNames( |
| 136 | + "org.junit.jupiter.engine.extension.ServiceLoaderExtension").and( |
| 137 | + ClassNamePatternFilterUtils.excludeMatchingClassNames( |
| 138 | + "org.junit.jupiter.engine.extension.ServiceLoaderExtension")).test(clazz.getName())); |
| 139 | + registry = createRegistryWithDefaultExtensions(configuration); |
| 140 | + |
| 141 | + List<Extension> extensions = registry.getExtensions(Extension.class); |
| 142 | + |
| 143 | + assertEquals(NUM_CORE_EXTENSIONS, extensions.size()); |
| 144 | + assertDefaultGlobalExtensionsAreRegistered(2); |
| 145 | + |
| 146 | + assertExtensionNotRegistered(registry, ServiceLoaderExtension.class); |
| 147 | + assertEquals(2, countExtensions(registry, BeforeAllCallback.class)); |
| 148 | + } |
| 149 | + |
75 | 150 | @Test |
76 | 151 | void registerExtensionByImplementingClass() { |
77 | 152 | registry.registerExtension(MyExtension.class); |
@@ -157,6 +232,11 @@ private void assertExtensionRegistered(ExtensionRegistry registry, Class<? exten |
157 | 232 | () -> extensionType.getSimpleName() + " should be present"); |
158 | 233 | } |
159 | 234 |
|
| 235 | + private void assertExtensionNotRegistered(ExtensionRegistry registry, Class<? extends Extension> extensionType) { |
| 236 | + assertTrue(registry.getExtensions(extensionType).isEmpty(), |
| 237 | + () -> extensionType.getSimpleName() + " should not be present"); |
| 238 | + } |
| 239 | + |
160 | 240 | private void assertDefaultGlobalExtensionsAreRegistered() { |
161 | 241 | assertDefaultGlobalExtensionsAreRegistered(2); |
162 | 242 | } |
|
0 commit comments