View Javadoc
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          // Verify the loader is set back.
26          assertEquals(currentLoader, Thread.currentThread().getContextClassLoader());
27  
28          // Verify the code was actually called
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              // Verify the loader is set back.
46              assertEquals(currentLoader1, Thread.currentThread().getContextClassLoader());
47  
48              // Verify the code was actually called
49              verify(newLoader).getResource("test");
50          });
51  
52          // Verify the loader is set back.
53          assertEquals(currentLoader, Thread.currentThread().getContextClassLoader());
54  
55          // Verify the code was actually called
56          verify(newLoader).getResource("test");
57      }
58  }