1 package com.atlassian.plugin.util;
2
3 import org.junit.Test;
4 import org.junit.runner.RunWith;
5 import org.mockito.Mock;
6 import org.mockito.junit.MockitoJUnitRunner;
7
8 import static org.junit.Assert.assertEquals;
9 import static org.mockito.Mockito.mock;
10 import static org.mockito.Mockito.verify;
11
12 @RunWith(MockitoJUnitRunner.class)
13 public class TestContextClassLoaderSwitchingUtil {
14 @Mock
15 private ClassLoader newLoader;
16
17 @Test
18 public void testSwitchClassLoader() {
19 ClassLoader currentLoader = Thread.currentThread().getContextClassLoader();
20 ContextClassLoaderSwitchingUtil.runInContext(newLoader, () -> {
21 assertEquals(newLoader, Thread.currentThread().getContextClassLoader());
22 newLoader.getResource("test");
23 });
24
25
26 assertEquals(currentLoader, Thread.currentThread().getContextClassLoader());
27
28
29 verify(newLoader).getResource("test");
30 }
31
32 @Test
33 public void testSwitchClassLoaderMultiple() {
34 ClassLoader currentLoader = Thread.currentThread().getContextClassLoader();
35 ContextClassLoaderSwitchingUtil.runInContext(newLoader, () -> {
36 assertEquals(newLoader, Thread.currentThread().getContextClassLoader());
37 newLoader.getResource("test");
38 final ClassLoader innerLoader = mock(ClassLoader.class);
39 ClassLoader currentLoader1 = Thread.currentThread().getContextClassLoader();
40 ContextClassLoaderSwitchingUtil.runInContext(innerLoader, () -> {
41 assertEquals(innerLoader, Thread.currentThread().getContextClassLoader());
42 innerLoader.getResource("test");
43 });
44
45
46 assertEquals(currentLoader1, Thread.currentThread().getContextClassLoader());
47
48
49 verify(newLoader).getResource("test");
50 });
51
52
53 assertEquals(currentLoader, Thread.currentThread().getContextClassLoader());
54
55
56 verify(newLoader).getResource("test");
57 }
58 }