1 package com.atlassian.plugin.webresource;
2
3 import static com.atlassian.plugin.servlet.AbstractFileServerServlet.PATH_SEPARATOR;
4 import static com.atlassian.plugin.webresource.SinglePluginResource.URL_PREFIX;
5 import static org.mockito.Mockito.when;
6
7 import com.atlassian.plugin.ModuleDescriptor;
8 import com.atlassian.plugin.Plugin;
9 import com.atlassian.plugin.servlet.DownloadableResource;
10
11 import org.mockito.Mock;
12 import org.mockito.MockitoAnnotations;
13
14 import junit.framework.TestCase;
15
16 public class TestRelativeURLTransformResource extends TestCase
17 {
18 public static final String STATIC_PREFIX = "/test/s/en_GB/1/10/1000/_";
19 public static final String MODULE_KEY = "atlassian:test-resource";
20 public static final String TRANSFORM_PREFIX = STATIC_PREFIX + URL_PREFIX + PATH_SEPARATOR + MODULE_KEY + PATH_SEPARATOR;
21 @Mock
22 private DownloadableResource mockOriginalResource;
23 @Mock
24 private WebResourceUrlProvider mockWebResourceUrlProvider;
25 @Mock
26 private ModuleDescriptor mockModuleDescriptor;
27
28 private Plugin testPlugin;
29 private RelativeURLTransformResource transformResource;
30
31 @Override
32 public void setUp() throws Exception
33 {
34 super.setUp();
35
36 MockitoAnnotations.initMocks(this);
37 transformResource = new RelativeURLTransformResource(mockWebResourceUrlProvider, mockModuleDescriptor, mockOriginalResource);
38
39 testPlugin = TestUtils.createTestPlugin();
40 when(mockModuleDescriptor.getPlugin()).thenReturn(testPlugin);
41 when(mockModuleDescriptor.getCompleteKey()).thenReturn(MODULE_KEY);
42 when(mockWebResourceUrlProvider.getStaticResourcePrefix("1", UrlMode.RELATIVE)).thenReturn(STATIC_PREFIX);
43 }
44
45 @Override
46 public void tearDown() throws Exception
47 {
48 transformResource = null;
49 mockWebResourceUrlProvider = null;
50 mockModuleDescriptor = null;
51 mockOriginalResource = null;
52
53 super.tearDown();
54 }
55
56 public void testReplaceRelative()
57 {
58 assertTransformWorked(TRANSFORM_PREFIX + "../relative.png", "../relative.png");
59 }
60
61 public void testReplaceAbsoluteSkipped()
62 {
63 assertTransformWorked("/absolute.png", "/absolute.png");
64 }
65
66 public void testReplaceAbsoluteSkippedFQ()
67 {
68 assertTransformWorked("http://atlassian.com/test/absolute.png", "http://atlassian.com/test/absolute.png");
69 }
70
71 public void testReplaceAbsoluteHttpsSkipped()
72 {
73 assertTransformWorked("https://atlassian.com/test/absolute.png", "https://atlassian.com/test/absolute.png");
74 }
75
76 public void testReplaceDataUriSkipped()
77 {
78 assertTransformWorked("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAARCAYAAAA",
79 "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAARCAYAAAA");
80 }
81
82 public void testReplaceRelativeWithFunkyCharacters()
83 {
84 assertTransformWorked("/f\u00F8tex/absolute.png", "/f\u00F8tex/absolute.png");
85 }
86
87 public void testReplaceRelativeWithFunkyCharactersFQ()
88 {
89 assertTransformWorked("http://www.f\u00F8tex.dk", "http://www.f\u00F8tex.dk");
90 }
91
92 public void testReplaceRelativeWithFunkyCharactersTxPrefix()
93 {
94 assertTransformWorked(TRANSFORM_PREFIX + "f\u00F8tex.png", "f\u00F8tex.png");
95 }
96
97 public void testReplaceRelativeWithNumbers()
98 {
99 assertTransformWorked("/1/absolute.png", "/1/absolute.png");
100 }
101
102 public void testReplaceRelativeWithNumbersFQ()
103 {
104 assertTransformWorked("http://192.168.1.1:8080/test/absolute.png", "http://192.168.1.1:8080/test/absolute.png");
105 }
106
107 public void testReplaceRelativeWithNumbersTxPrefix()
108 {
109 assertTransformWorked(TRANSFORM_PREFIX + "../relative1.png", "../relative1.png");
110 }
111
112 private void assertTransformWorked(final String expectedUrl, final String originalUrl)
113 {
114 assertTransformWorked("url(%s)", expectedUrl, originalUrl);
115 assertTransformWorked("url( %s )", expectedUrl, originalUrl);
116 assertTransformWorked("url (%s)", expectedUrl, originalUrl);
117 assertTransformWorked("url(\"%s\")", expectedUrl, originalUrl);
118 assertTransformWorked("url( \"%s\")", expectedUrl, originalUrl);
119 assertTransformWorked("url (\"%s\")", expectedUrl, originalUrl);
120 assertTransformWorked("url('%s')", expectedUrl, originalUrl);
121 assertTransformWorked("url( '%s' )", expectedUrl, originalUrl);
122 assertTransformWorked("url ('%s' )", expectedUrl, originalUrl);
123 }
124
125 private void assertTransformWorked(final String format, final String expectedUrl, final String originalUrl)
126 {
127 final String original = String.format(".test { blahblah %s }", String.format(format, originalUrl));
128 final String expected = String.format(".test { blahblah %s }", String.format(format, expectedUrl));
129 assertEquals(expected, transformResource.transform(original).toString());
130 }
131 }