1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.bcel.util;
18
19 import static org.junit.jupiter.api.Assertions.assertEquals;
20 import static org.junit.jupiter.api.Assertions.assertNotNull;
21 import static org.junit.jupiter.api.Assertions.assertNull;
22 import static org.junit.jupiter.api.Assertions.assertThrows;
23
24 import java.io.IOException;
25
26 import org.apache.bcel.classfile.JavaClass;
27 import org.junit.jupiter.api.Test;
28
29
30
31
32 public class LruCacheClassPathRepositoryTestCase {
33
34 @Test
35 public void testCacheEviction() throws ClassNotFoundException, IOException {
36 try (final ClassPath classPath = new ClassPath("")) {
37 final LruCacheClassPathRepository repository = new LruCacheClassPathRepository(classPath, 2);
38 final JavaClass class1 = repository.loadClass("java.lang.String");
39 assertNotNull(class1);
40 final JavaClass class2 = repository.loadClass("java.lang.Long");
41 assertNotNull(class2);
42 final JavaClass class3 = repository.loadClass("java.lang.Integer");
43 assertNotNull(class3);
44
45 assertNull(repository.findClass("java.lang.String"));
46 final JavaClass cachedClass2 = repository.findClass("java.lang.Long");
47 assertEquals(class2, cachedClass2);
48 }
49 }
50
51 @Test
52 public void testLeastRecentlyUsedEviction() throws ClassNotFoundException, IOException {
53 try (final ClassPath classPath = new ClassPath("")) {
54 final LruCacheClassPathRepository repository = new LruCacheClassPathRepository(classPath, 2);
55 final JavaClass class1 = repository.loadClass("java.lang.String");
56 assertNotNull(class1);
57 final JavaClass class2 = repository.loadClass("java.lang.Long");
58 assertNotNull(class2);
59 repository.findClass("java.lang.String");
60 final JavaClass class3 = repository.loadClass("java.lang.Integer");
61 assertNotNull(class3);
62
63 assertNull(repository.findClass("java.lang.Long"));
64 final JavaClass cachedClass1 = repository.findClass("java.lang.String");
65 assertEquals(class1, cachedClass1);
66 }
67 }
68
69 @Test
70 public void testZeroCacheSize() throws IOException {
71 try (final ClassPath classPath = new ClassPath("")) {
72 assertThrows(IllegalArgumentException.class, () -> new LruCacheClassPathRepository(classPath, 0));
73 }
74 }
75 }