1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 package org.slf4j.migrator.helper;
26
27 import static org.junit.Assert.assertEquals;
28 import static org.junit.Assert.assertTrue;
29
30 import org.junit.Test;
31
32 public class AbbreviatorTest {
33
34 static final char FS = '/';
35 static final String INPUT_0 = "/abc/123456/ABC";
36 static final String INPUT_1 = "/abc/123456/xxxxx/ABC";
37
38 RandomHelper rh = new RandomHelper(FS);
39
40 @Test
41 public void testSmoke() {
42 {
43 Abbreviator abb = new Abbreviator(2, 100, FS);
44 String r = abb.abbreviate(INPUT_0);
45 assertEquals(INPUT_0, r);
46 }
47
48 {
49 Abbreviator abb = new Abbreviator(3, 8, FS);
50 String r = abb.abbreviate(INPUT_0);
51 assertEquals("/abc/.../ABC", r);
52 }
53 {
54 Abbreviator abb = new Abbreviator(3, 8, FS);
55 String r = abb.abbreviate(INPUT_0);
56 assertEquals("/abc/.../ABC", r);
57 }
58 }
59
60 @Test
61 public void testImpossibleToAbbreviate() {
62 Abbreviator abb = new Abbreviator(2, 20, FS);
63 String in = "iczldqwivpgm/mgrmvbjdxrwmqgprdjusth";
64 String r = abb.abbreviate(in);
65 assertEquals(in, r);
66 }
67
68 @Test
69 public void testNoFS() {
70 Abbreviator abb = new Abbreviator(2, 100, FS);
71 String r = abb.abbreviate("hello");
72 assertEquals("hello", r);
73
74 }
75
76 @Test
77 public void testZeroPrefix() {
78 {
79 Abbreviator abb = new Abbreviator(0, 100, FS);
80 String r = abb.abbreviate(INPUT_0);
81 assertEquals(INPUT_0, r);
82 }
83 }
84
85 @Test
86 public void testTheories() {
87 int MAX_RANDOM_FIXED_LEN = 20;
88 int MAX_RANDOM_AVG_LEN = 20;
89 int MAX_RANDOM_MAX_LEN = 100;
90 for (int i = 0; i < 10000; i++) {
91
92
93
94
95 int fixedLen = rh.nextInt(MAX_RANDOM_FIXED_LEN);
96
97 int averageLen = rh.nextInt(MAX_RANDOM_AVG_LEN) + 3;
98
99
100 int maxLen = rh.nextInt(MAX_RANDOM_MAX_LEN) + fixedLen;
101 if (maxLen <= 1) {
102 continue;
103 }
104
105 int targetLen = (maxLen / 2) + rh.nextInt(maxLen / 2) + 1;
106
107 if (targetLen > maxLen) {
108 targetLen = maxLen;
109 }
110 String filename = rh.buildRandomFileName(averageLen, maxLen);
111
112 Abbreviator abb = new Abbreviator(fixedLen, targetLen, FS);
113 String result = abb.abbreviate(filename);
114 assertTheory0(averageLen, filename, result, fixedLen, targetLen);
115 assertUsefulness(averageLen, filename, result, fixedLen, targetLen);
116 assertTheory1(filename, result, fixedLen, targetLen);
117 assertTheory2(filename, result, fixedLen, targetLen);
118 }
119 }
120
121
122 void assertTheory0(int averageLen, String filename, String result, int fixedLen, int targetLength) {
123 assertTrue("filename=[" + filename + "] result=[" + result + "]", result.length() <= filename.length());
124 }
125
126
127 void assertUsefulness(int averageLen, String filename, String result, int fixedLen, int targetLength) {
128 int resLen = result.length();
129
130 int margin = averageLen * 4;
131 if (targetLength > fixedLen + margin) {
132 assertTrue("filename=[" + filename + "], result=[" + result + "] resultLength=" + resLen + " fixedLength=" + fixedLen + ", targetLength="
133 + targetLength + ", avgLen=" + averageLen, result.length() <= targetLength + averageLen);
134 }
135 }
136
137
138 void assertTheory1(String filename, String result, int fixedLen, int targetLength) {
139 String prefix = filename.substring(0, fixedLen);
140 assertTrue(result.startsWith(prefix));
141 }
142
143
144
145 void assertTheory2(String filename, String result, int fixedLen, int targetLength) {
146 if (filename == result) {
147 return;
148 }
149 int fillerIndex = result.indexOf(Abbreviator.FILLER);
150 assertTrue(fillerIndex >= fixedLen);
151 }
152 }