scriptSource.getScriptAsString(), scriptSource.suggestedClassName());
scriptSource.getScriptAsString(), scriptSource.suggestedClassName());
scriptSource.getScriptAsString(), scriptSource.suggestedClassName());
scriptSource.getScriptAsString(), scriptSource.suggestedClassName());
@Test public void testScriptedClassThatHasNoPublicNoArgCtor() throws Exception { ScriptSource script = mock(ScriptSource.class); String badScript = "class Foo { protected Foo() {} \n String toString() { 'X' }}"; given(script.getScriptAsString()).willReturn(badScript); given(script.suggestedClassName()).willReturn("someName"); GroovyScriptFactory factory = new GroovyScriptFactory(ScriptFactoryPostProcessor.INLINE_SCRIPT_PREFIX + badScript); assertEquals("X", factory.getScriptedObject(script).toString()); }
@Test public void testGetScriptedObjectDoesNotChokeOnNullInterfacesBeingPassedIn() throws Exception { ScriptSource script = mock(ScriptSource.class); given(script.getScriptAsString()).willReturn("class Bar {}"); given(script.suggestedClassName()).willReturn("someName"); GroovyScriptFactory factory = new GroovyScriptFactory("a script source locator (doesn't matter here)"); Object scriptedObject = factory.getScriptedObject(script); assertNotNull(scriptedObject); }
@Test public void testScriptedClassThatDoesNotHaveANoArgCtor() throws Exception { ScriptSource script = mock(ScriptSource.class); String badScript = "class Foo { public Foo(String foo) {}}"; given(script.getScriptAsString()).willReturn(badScript); given(script.suggestedClassName()).willReturn("someName"); GroovyScriptFactory factory = new GroovyScriptFactory(ScriptFactoryPostProcessor.INLINE_SCRIPT_PREFIX + badScript); try { factory.getScriptedObject(script); fail("Must have thrown a ScriptCompilationException (no public no-arg ctor in scripted class)."); } catch (ScriptCompilationException expected) { assertTrue(expected.contains(NoSuchMethodException.class)); } }
private void parseScriptIfNecessary(ScriptSource scriptSource) throws Exception { if (this.scriptClass == null || scriptSource.isModified()) { this.scriptLock.lockInterruptibly(); try { // synchronized double check if (this.scriptClass == null || scriptSource.isModified()) { String className = scriptSource.suggestedClassName(); if (StringUtils.hasText(className)) { this.scriptClass = this.groovyClassLoader.parseClass(scriptSource.getScriptAsString(), className); } else { this.scriptClass = this.groovyClassLoader.parseClass(scriptSource.getScriptAsString()); } } } finally { this.scriptLock.unlock(); } } }
private void parseScriptIfNecessary(ScriptSource scriptSource) throws Exception { if (this.scriptClass == null || scriptSource.isModified()) { this.scriptLock.lockInterruptibly(); try { // synchronized double check if (this.scriptClass == null || scriptSource.isModified()) { String className = scriptSource.suggestedClassName(); if (StringUtils.hasText(className)) { this.scriptClass = this.groovyClassLoader.parseClass(scriptSource.getScriptAsString(), className); } else { this.scriptClass = this.groovyClassLoader.parseClass(scriptSource.getScriptAsString()); } } } finally { this.scriptLock.unlock(); } } }
scriptSource.getScriptAsString(), scriptSource.suggestedClassName());
scriptSource.getScriptAsString(), scriptSource.suggestedClassName());