blob: 238af56517cceb4c133c2ea07cd7e7e492453afc [file] [log] [blame]
// Copyright 2011-2013 The Apache Software Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package org.apache.tapestry5.services.javascript;
import org.apache.tapestry5.Asset
import org.apache.tapestry5.services.AssetSource
import org.apache.tapestry5.test.TapestryTestCase
import org.testng.annotations.Test
/** @since 5.3 */
class ExtensibleJavaScriptStackTest extends TapestryTestCase {
@Test
void contributed_libraries_are_expanded() {
def lib1path = '${lib1}/lib.js'
Asset lib1 = mockAsset()
def lib2path = '${lib2}/lib.js'
Asset lib2 = mockAsset()
AssetSource mockSource = mockAssetSource()
expect(mockSource.getExpandedAsset(lib1path)).andReturn(lib1)
expect(mockSource.getExpandedAsset(lib2path)).andReturn(lib2)
replay()
ExtensibleJavaScriptStack stack = new ExtensibleJavaScriptStack(mockSource, [
new StackExtension(StackExtensionType.LIBRARY, lib1path),
new StackExtension(StackExtensionType.LIBRARY, lib2path),
])
assert stack.stacks.empty
assert stack.javaScriptLibraries == [lib1, lib2]
assert stack.stylesheets.empty
assert stack.initialization == null
verify()
}
@Test
void contributed_stack() {
AssetSource mockSource = mockAssetSource()
replay()
ExtensibleJavaScriptStack stack = new ExtensibleJavaScriptStack(mockSource, [
new StackExtension(StackExtensionType.STACK, "stacka"),
new StackExtension(StackExtensionType.STACK, "stackb"),
])
assert stack.stacks == ["stacka", "stackb"]
assert stack.javaScriptLibraries.empty
verify()
}
@Test
void contributed_modules() {
replay()
ExtensibleJavaScriptStack stack = new ExtensibleJavaScriptStack(null, [
new StackExtension(StackExtensionType.MODULE, "t5/core/dom"),
new StackExtension(StackExtensionType.MODULE, "magic"),
])
assert stack.getModules() == ["t5/core/dom", "magic"]
verify()
}
@Test
void contributed_stylesheets_are_expanded() {
def stylesheet1path = '${stylesheet1}/stylesheet.css'
def stylesheet1URL = "/foo/ss1/stylesheet.css"
Asset stylesheet1 = mockAsset()
def stylesheet2path = '${stylesheet2}/stylesheet.js'
def stylesheet2URL = '/foo/ss2/stylesheet.css'
Asset stylesheet2 = mockAsset()
AssetSource mockSource = mockAssetSource()
expect(mockSource.getExpandedAsset(stylesheet1path)).andReturn(stylesheet1)
expect(mockSource.getExpandedAsset(stylesheet2path)).andReturn(stylesheet2)
expect(stylesheet1.toClientURL()).andReturn(stylesheet1URL).atLeastOnce()
expect(stylesheet2.toClientURL()).andReturn(stylesheet2URL).atLeastOnce()
replay()
ExtensibleJavaScriptStack stack = new ExtensibleJavaScriptStack(mockSource, [
new StackExtension(StackExtensionType.STYLESHEET, stylesheet1path),
new StackExtension(StackExtensionType.STYLESHEET, stylesheet2path),
])
assert stack.stacks.empty
assert stack.javaScriptLibraries.empty
assert stack.stylesheets == [
new StylesheetLink(stylesheet1),
new StylesheetLink(stylesheet2)
]
assert stack.initialization == null
verify()
}
@Test
void initializations_are_combined() {
ExtensibleJavaScriptStack stack = new ExtensibleJavaScriptStack(null, [
new StackExtension(StackExtensionType.INITIALIZATION, "doThis();"),
new StackExtension(StackExtensionType.INITIALIZATION, "doThat();"),
])
assert stack.initialization == "doThis();\ndoThat();"
}
}