View Javadoc

1   package com.atlassian.plugin.util;
2   
3   import com.atlassian.fugue.Option;
4   import com.atlassian.plugin.InstallationMode;
5   import com.google.common.base.Function;
6   import com.google.common.collect.Iterables;
7   import org.dom4j.Element;
8   import org.junit.Test;
9   import org.junit.runner.RunWith;
10  import org.mockito.Mock;
11  import org.mockito.runners.MockitoJUnitRunner;
12  
13  import java.util.List;
14  
15  import static com.google.common.collect.Iterables.transform;
16  import static com.google.common.collect.Lists.newArrayList;
17  import static org.junit.Assert.*;
18  import static org.mockito.Mockito.*;
19  
20  @RunWith(MockitoJUnitRunner.class)
21  public final class TestModuleRestricts
22  {
23      @Mock
24      private Element moduleElement;
25  
26      @Test
27      public void parseModuleWithNoRestrictInformation()
28      {
29          final ModuleRestricts restricts = ModuleRestricts.parse(moduleElement);
30          assertTrue(Iterables.isEmpty(restricts.restricts));
31      }
32  
33      @Test
34      public void parseModuleWithApplicationAsAttribute()
35      {
36          when(moduleElement.attributeValue("application")).thenReturn("my-app");
37          final ModuleRestricts restricts = ModuleRestricts.parse(moduleElement);
38  
39          assertEquals(1, Iterables.size(restricts.restricts));
40          assertEquals("my-app", Iterables.get(restricts.restricts, 0).application);
41      }
42  
43      @Test
44      public void parseModuleWithApplicationAsRestrictElement()
45      {
46          final List<Element> restrictElements = mockRestrictElements("my-app");
47          when(moduleElement.elements("restrict")).thenReturn(restrictElements);
48  
49  
50          final ModuleRestricts restricts = ModuleRestricts.parse(moduleElement);
51  
52          assertEquals(restrictElements.size(), Iterables.size(restricts.restricts));
53          assertEquals("my-app", Iterables.get(restricts.restricts, 0).application);
54      }
55  
56      @Test
57      public void parseModuleWithMultipleApplicationAsRestrictElement()
58      {
59          final List<Element> restrictElements = mockRestrictElements("my-app", "my-app2");
60          when(moduleElement.elements("restrict")).thenReturn(restrictElements);
61  
62          final ModuleRestricts restricts = ModuleRestricts.parse(moduleElement);
63  
64          assertEquals(restrictElements.size(), Iterables.size(restricts.restricts));
65          assertEquals("my-app", Iterables.get(restricts.restricts, 0).application);
66          assertEquals(Option.<InstallationMode>none(), Iterables.get(restricts.restricts, 0).mode);
67          assertEquals("my-app2", Iterables.get(restricts.restricts, 1).application);
68          assertEquals(Option.<InstallationMode>none(), Iterables.get(restricts.restricts, 1).mode);
69      }
70  
71      @Test
72      public void parseModuleWithApplicationAsRestrictElementWithInstallationModeAttribute()
73      {
74          final Element restrictElement = mockRestrictElement("my-app");
75          when(restrictElement.attributeValue("mode")).thenReturn("local");
76          final List<Element> restrictElements = newArrayList(restrictElement);
77  
78          when(moduleElement.elements("restrict")).thenReturn(restrictElements);
79  
80          final ModuleRestricts restricts = ModuleRestricts.parse(moduleElement);
81  
82          assertEquals(restrictElements.size(), Iterables.size(restricts.restricts));
83          assertEquals("my-app", Iterables.get(restricts.restricts, 0).application);
84          assertEquals(Option.option(InstallationMode.LOCAL), Iterables.get(restricts.restricts, 0).mode);
85      }
86  
87      @Test
88      public void parseModuleWithApplicationAsRestrictElementWithVersionRangeAttribute()
89      {
90          final Element restrictElement = mockRestrictElement("my-app");
91          when(restrictElement.attributeValue("version")).thenReturn("[2.0]");
92          final List<Element> restrictElements = newArrayList(restrictElement);
93  
94          when(moduleElement.elements("restrict")).thenReturn(restrictElements);
95  
96          final ModuleRestricts restricts = ModuleRestricts.parse(moduleElement);
97  
98          assertEquals(restrictElements.size(), Iterables.size(restricts.restricts));
99          assertEquals("my-app", Iterables.get(restricts.restricts, 0).application);
100         assertEquals(VersionRange.single("2.0"), Iterables.get(restricts.restricts, 0).version);
101     }
102 
103     @Test
104     public void parseModuleWithApplicationAsRestrictElementWithVersionRangeElement()
105     {
106         final Element restrictElement = mockRestrictElement("my-app");
107         final Element versionElement = mockVersionElement("[2.0]");
108         when(restrictElement.elements("version")).thenReturn(newArrayList(versionElement));
109         final List<Element> restrictElements = newArrayList(restrictElement);
110 
111         when(moduleElement.elements("restrict")).thenReturn(restrictElements);
112 
113         final ModuleRestricts restricts = ModuleRestricts.parse(moduleElement);
114 
115         assertEquals(restrictElements.size(), Iterables.size(restricts.restricts));
116         assertEquals("my-app", Iterables.get(restricts.restricts, 0).application);
117         assertEquals(VersionRange.empty().or(VersionRange.single("2.0")), Iterables.get(restricts.restricts, 0).version);
118     }
119 
120     @Test
121     public void parseModuleWithApplicationAsRestrictElementWithVersionRangeElements()
122     {
123         final Element restrictElement = mockRestrictElement("my-app");
124         final Element versionElement = mockVersionElement("[2.0]");
125         final Element versionElement2 = mockVersionElement("[3.0,4.0)");
126         when(restrictElement.elements("version")).thenReturn(newArrayList(versionElement, versionElement2));
127         final List<Element> restrictElements = newArrayList(restrictElement);
128 
129         when(moduleElement.elements("restrict")).thenReturn(restrictElements);
130 
131         final ModuleRestricts restricts = ModuleRestricts.parse(moduleElement);
132 
133         assertEquals(restrictElements.size(), Iterables.size(restricts.restricts));
134         assertEquals("my-app", Iterables.get(restricts.restricts, 0).application);
135         assertEquals(VersionRange.empty().or(VersionRange.single("2.0")).or(VersionRange.include("3.0").exclude("4.0")), Iterables.get(restricts.restricts, 0).version);
136     }
137 
138     private List<Element> mockRestrictElements(String... appNames)
139     {
140         return newArrayList(transform(newArrayList(appNames), new Function<String, Element>()
141         {
142             @Override
143             public Element apply(String appName)
144             {
145                 return mockRestrictElement(appName);
146             }
147         }));
148     }
149 
150     private Element mockRestrictElement(String appName)
151     {
152         final Element restrictElement = mock(Element.class);
153         when(restrictElement.attributeValue("application")).thenReturn(appName);
154         return restrictElement;
155     }
156 
157     private Element mockVersionElement(String range)
158     {
159         final Element versionElement = mock(Element.class);
160         when(versionElement.getText()).thenReturn(range);
161         return versionElement;
162     }
163 }