Skip to content

Commit 5c94bab

Browse files
committed
Added tests for plugin.groovy support
1 parent 3af1321 commit 5c94bab

File tree

2 files changed

+77
-25
lines changed

2 files changed

+77
-25
lines changed

grails-core/src/main/groovy/org/grails/plugins/AbstractGrailsPlugin.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -125,11 +125,8 @@ public boolean isEnabled(String[] profiles) {
125125
}
126126

127127
protected Resource readPluginConfiguration(Class<?> pluginClass) {
128-
final URL urlToPluginYml = IOUtils.findResourceRelativeToClass(pluginClass, PLUGIN_YML_PATH);
129-
final URL urlToPluginGroovy = IOUtils.findResourceRelativeToClass(pluginClass, PLUGIN_GROOVY_PATH);
130-
131-
Resource ymlUrlResource = urlToPluginYml != null ? new UrlResource(urlToPluginYml) : null;
132-
Resource groovyUrlResource = urlToPluginGroovy != null ? new UrlResource(urlToPluginGroovy) : null;
128+
Resource ymlUrlResource = getConfigurationResource(pluginClass, PLUGIN_YML_PATH);
129+
Resource groovyUrlResource = getConfigurationResource(pluginClass, PLUGIN_GROOVY_PATH);
133130

134131
Boolean groovyUrlResourceExists = groovyUrlResource != null && groovyUrlResource.exists();
135132

@@ -145,6 +142,11 @@ protected Resource readPluginConfiguration(Class<?> pluginClass) {
145142
return null;
146143
}
147144

145+
protected Resource getConfigurationResource(Class<?> pluginClass, String path) {
146+
final URL urlToConfig = IOUtils.findResourceRelativeToClass(pluginClass, path);
147+
return urlToConfig != null ? new UrlResource(urlToConfig) : null;
148+
}
149+
148150
public String getFileSystemName() {
149151
return getFileSystemShortName() + '-' + getVersion();
150152
}

grails-core/src/test/groovy/org/codehaus/groovy/grails/plugins/BinaryPluginSpec.groovy

Lines changed: 70 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@ import grails.core.DefaultGrailsApplication
44
import org.grails.plugins.BinaryGrailsPlugin
55
import org.grails.plugins.BinaryGrailsPluginDescriptor
66
import org.springframework.core.io.ByteArrayResource
7+
import org.springframework.core.io.FileSystemResource
78
import org.springframework.core.io.Resource
8-
9+
import spock.lang.Shared
910
import spock.lang.Specification
1011

1112
class BinaryPluginSpec extends Specification {
1213

13-
def "Test creation of a binary plugin"() {
14-
given:
15-
def str = '''
14+
@Shared
15+
String testBinary = '''
1616
<plugin name='testBinary'>
1717
<class>org.codehaus.groovy.grails.plugins.TestBinaryGrailsPlugin</class>
1818
<resources>
@@ -21,10 +21,9 @@ class BinaryPluginSpec extends Specification {
2121
</plugin>
2222
'''
2323

24-
def xml = new XmlSlurper().parseText(str)
25-
24+
def "Test creation of a binary plugin"() {
2625
when:
27-
def descriptor = new BinaryGrailsPluginDescriptor(new ByteArrayResource(str.getBytes('UTF-8')), ['org.codehaus.groovy.grails.plugins.TestBinaryResource'])
26+
def descriptor = new BinaryGrailsPluginDescriptor(new ByteArrayResource(testBinary.getBytes('UTF-8')), ['org.codehaus.groovy.grails.plugins.TestBinaryResource'])
2827
def binaryPlugin = new BinaryGrailsPlugin(TestBinaryGrailsPlugin, descriptor, new DefaultGrailsApplication())
2928

3029
then:
@@ -36,20 +35,8 @@ class BinaryPluginSpec extends Specification {
3635

3736

3837
def "Test load static resource from binary plugin"() {
39-
given:
40-
def str = '''
41-
<plugin name='testBinary'>
42-
<class>org.codehaus.groovy.grails.plugins.TestBinaryGrailsPlugin</class>
43-
<resources>
44-
<resource>org.codehaus.groovy.grails.plugins.TestBinaryResource</resource>
45-
</resources>
46-
</plugin>
47-
'''
48-
49-
def xml = new XmlSlurper().parseText(str)
50-
5138
when:
52-
def resource = new MockBinaryPluginResource(str.getBytes('UTF-8'))
39+
def resource = new MockBinaryPluginResource(testBinary.getBytes('UTF-8'))
5340
def descriptor = new BinaryGrailsPluginDescriptor(resource, ['org.codehaus.groovy.grails.plugins.TestBinaryResource'])
5441
resource.relativesResources['static/css/main.css'] = new ByteArrayResource(''.bytes)
5542
def binaryPlugin = new BinaryGrailsPlugin(TestBinaryGrailsPlugin, descriptor, new DefaultGrailsApplication())
@@ -63,6 +50,68 @@ class BinaryPluginSpec extends Specification {
6350
then:
6451
cssResource == null
6552
}
53+
54+
def "Test plugin with both plugin.yml and plugin.groovy throws exception"() {
55+
when:
56+
def descriptor = new BinaryGrailsPluginDescriptor(new ByteArrayResource(testBinary.getBytes('UTF-8')), ['org.codehaus.groovy.grails.plugins.TestBinaryResource'])
57+
MockConfigBinaryGrailsPlugin.YAML_EXISTS = true
58+
MockConfigBinaryGrailsPlugin.GROOVY_EXISTS = true
59+
new MockConfigBinaryGrailsPlugin(descriptor)
60+
61+
then:
62+
thrown(RuntimeException)
63+
}
64+
65+
def "Test plugin with only plugin.yml"() {
66+
when:
67+
def descriptor = new BinaryGrailsPluginDescriptor(new ByteArrayResource(testBinary.getBytes('UTF-8')), ['org.codehaus.groovy.grails.plugins.TestBinaryResource'])
68+
MockConfigBinaryGrailsPlugin.YAML_EXISTS = true
69+
MockConfigBinaryGrailsPlugin.GROOVY_EXISTS = false
70+
def binaryPlugin = new MockConfigBinaryGrailsPlugin(descriptor)
71+
72+
then:
73+
binaryPlugin.propertySource.getProperty('foo') == "bar"
74+
}
75+
76+
def "Test plugin with only plugin.groovy"() {
77+
when:
78+
def descriptor = new BinaryGrailsPluginDescriptor(new ByteArrayResource(testBinary.getBytes('UTF-8')), ['org.codehaus.groovy.grails.plugins.TestBinaryResource'])
79+
MockConfigBinaryGrailsPlugin.YAML_EXISTS = false
80+
MockConfigBinaryGrailsPlugin.GROOVY_EXISTS = true
81+
def binaryPlugin = new MockConfigBinaryGrailsPlugin(descriptor)
82+
83+
then:
84+
binaryPlugin.propertySource.getProperty('bar') == "foo"
85+
}
86+
87+
}
88+
89+
class MockConfigBinaryGrailsPlugin extends BinaryGrailsPlugin {
90+
static Boolean YAML_EXISTS = false
91+
static Boolean GROOVY_EXISTS = false
92+
93+
MockConfigBinaryGrailsPlugin(BinaryGrailsPluginDescriptor descriptor) {
94+
super(TestBinaryGrailsPlugin, descriptor, new DefaultGrailsApplication())
95+
}
96+
97+
protected Resource getConfigurationResource(Class<?> pluginClass, String path) {
98+
String tempDir = System.getProperty("java.io.tmpdir")
99+
if (YAML_EXISTS && path == PLUGIN_YML_PATH) {
100+
File file = new File(tempDir, "plugin.yml")
101+
file.write("foo: bar")
102+
return new FileSystemResource(file)
103+
}
104+
if (GROOVY_EXISTS && path == PLUGIN_GROOVY_PATH) {
105+
File file = new File(tempDir, "plugin.groovy")
106+
file.write("bar = 'foo'")
107+
return new FileSystemResource(file)
108+
}
109+
return null
110+
}
111+
112+
public String getVersion() {
113+
super.getVersion()
114+
}
66115
}
67116

68117
class TestBinaryGrailsPlugin {
@@ -91,3 +140,4 @@ class MyView extends Script {
91140
return "Good"
92141
}
93142
}
143+

0 commit comments

Comments
 (0)