1 package com.atlassian.plugin.web.model;
2
3 import com.atlassian.plugin.PluginAccessor;
4 import com.atlassian.plugin.module.ModuleFactory;
5 import com.atlassian.plugin.web.descriptors.WebPanelRendererModuleDescriptor;
6 import com.atlassian.plugin.web.renderer.RendererException;
7 import com.atlassian.plugin.web.renderer.StaticWebPanelRenderer;
8 import com.atlassian.plugin.web.renderer.WebPanelRenderer;
9 import com.google.common.collect.ImmutableList;
10 import junit.framework.TestCase;
11
12 import java.io.IOException;
13 import java.io.StringWriter;
14 import java.util.Collections;
15 import java.util.Map;
16
17 import static org.mockito.Mockito.*;
18
19 public class AbstractWebPanelTest extends TestCase
20 {
21 public void testStaticGetHtml() throws IOException
22 {
23 AbstractWebPanel panel = new MyAbstractWebPanel();
24 panel.setResourceType(StaticWebPanelRenderer.RESOURCE_TYPE);
25
26 assertEquals("cheese", panel.getHtml(Collections.<String, Object>emptyMap()));
27 }
28
29 public void testStaticWriteHtml() throws IOException
30 {
31 AbstractWebPanel panel = new MyAbstractWebPanel();
32 panel.setResourceType(StaticWebPanelRenderer.RESOURCE_TYPE);
33
34 StringWriter out = new StringWriter();
35 panel.writeHtml(out, Collections.<String, Object>emptyMap());
36 assertEquals("cheese", out.toString());
37 }
38
39 public void testUnsupportedRendererType()
40 {
41 final PluginAccessor accessorMock = mock(PluginAccessor.class);
42 when(accessorMock.getEnabledModuleDescriptorsByClass(WebPanelRendererModuleDescriptor.class)).thenReturn(Collections.<WebPanelRendererModuleDescriptor>emptyList());
43
44 AbstractWebPanel panel = new AbstractWebPanel(accessorMock)
45 {
46 public String getHtml(Map<String, Object> context)
47 {
48 try
49 {
50 getRenderer();
51 fail();
52 }
53 catch (RendererException re)
54 {
55
56 }
57 return null;
58 }
59 };
60
61 panel.setResourceType("unsupported-type");
62 panel.getHtml(null);
63 }
64
65 public void testSupportedRendererType()
66 {
67 final PluginAccessor accessorMock = mock(PluginAccessor.class);
68 final WebPanelRenderer velocityRenderer = mock(WebPanelRenderer.class);
69 when(velocityRenderer.getResourceType()).thenReturn("velocity");
70 final WebPanelRenderer unsupportedRenderer = mock(WebPanelRenderer.class);
71 when(unsupportedRenderer.getResourceType()).thenReturn("unsupported-type");
72 WebPanelTestUtils.mockPluginAccessorReturning(accessorMock, unsupportedRenderer, velocityRenderer);
73 AbstractWebPanel panel = new AbstractWebPanel(accessorMock)
74 {
75 public String getHtml(Map<String, Object> context)
76 {
77 final WebPanelRenderer webPanelRenderer = getRenderer();
78 assertNotNull(webPanelRenderer);
79 assertEquals(velocityRenderer, webPanelRenderer);
80 return null;
81 }
82 };
83
84 panel.setResourceType("velocity");
85 panel.getHtml(null);
86 }
87
88 private static class MyAbstractWebPanel extends AbstractWebPanel
89 {
90 public MyAbstractWebPanel()
91 {
92 super(null);
93 }
94
95 public String getHtml(Map<String, Object> context)
96 {
97 final WebPanelRenderer renderer = getRenderer();
98 assertEquals(renderer, StaticWebPanelRenderer.RENDERER);
99 return "cheese";
100 }
101 }
102 }