diff --git a/lib/tasks/buildThemes.js b/lib/tasks/buildThemes.js index 66557fc89..2604a0eb5 100644 --- a/lib/tasks/buildThemes.js +++ b/lib/tasks/buildThemes.js @@ -27,7 +27,7 @@ module.exports = function({workspace, dependencies, options}) { } return Promise.all(promises).then(([allResources, availableLibraries]) => { - if (!availableLibraries) { + if (!availableLibraries || availableLibraries.length === 0) { // Try to build all themes return allResources; } diff --git a/test/expected/build/theme.j/dest/resources/theme/j/themes/somefancytheme/Button.less b/test/expected/build/theme.j/dest/resources/theme/j/themes/somefancytheme/Button.less new file mode 100644 index 000000000..172060f90 --- /dev/null +++ b/test/expected/build/theme.j/dest/resources/theme/j/themes/somefancytheme/Button.less @@ -0,0 +1 @@ +.someClass{color:black} diff --git a/test/expected/build/theme.j/dest/resources/theme/j/themes/somefancytheme/library-RTL.css b/test/expected/build/theme.j/dest/resources/theme/j/themes/somefancytheme/library-RTL.css new file mode 100644 index 000000000..3824292b9 --- /dev/null +++ b/test/expected/build/theme.j/dest/resources/theme/j/themes/somefancytheme/library-RTL.css @@ -0,0 +1,6 @@ +.someClass { + color: #000000; +} + +/* Inline theming parameters */ +#sap-ui-theme-theme\.j{background-image:url('data:text/plain;utf-8,%7B%7D')} diff --git a/test/expected/build/theme.j/dest/resources/theme/j/themes/somefancytheme/library-parameters.json b/test/expected/build/theme.j/dest/resources/theme/j/themes/somefancytheme/library-parameters.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/test/expected/build/theme.j/dest/resources/theme/j/themes/somefancytheme/library-parameters.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/test/expected/build/theme.j/dest/resources/theme/j/themes/somefancytheme/library.css b/test/expected/build/theme.j/dest/resources/theme/j/themes/somefancytheme/library.css new file mode 100644 index 000000000..3824292b9 --- /dev/null +++ b/test/expected/build/theme.j/dest/resources/theme/j/themes/somefancytheme/library.css @@ -0,0 +1,6 @@ +.someClass { + color: #000000; +} + +/* Inline theming parameters */ +#sap-ui-theme-theme\.j{background-image:url('data:text/plain;utf-8,%7B%7D')} diff --git a/test/expected/build/theme.j/dest/resources/theme/j/themes/somefancytheme/library.source.less b/test/expected/build/theme.j/dest/resources/theme/j/themes/somefancytheme/library.source.less new file mode 100644 index 000000000..3092239b2 --- /dev/null +++ b/test/expected/build/theme.j/dest/resources/theme/j/themes/somefancytheme/library.source.less @@ -0,0 +1 @@ +@import "Button.less"; diff --git a/test/fixtures/theme.j/main/src/theme/j/themes/somefancytheme/Button.less b/test/fixtures/theme.j/main/src/theme/j/themes/somefancytheme/Button.less new file mode 100644 index 000000000..172060f90 --- /dev/null +++ b/test/fixtures/theme.j/main/src/theme/j/themes/somefancytheme/Button.less @@ -0,0 +1 @@ +.someClass{color:black} diff --git a/test/fixtures/theme.j/main/src/theme/j/themes/somefancytheme/library.source.less b/test/fixtures/theme.j/main/src/theme/j/themes/somefancytheme/library.source.less new file mode 100644 index 000000000..3092239b2 --- /dev/null +++ b/test/fixtures/theme.j/main/src/theme/j/themes/somefancytheme/library.source.less @@ -0,0 +1 @@ +@import "Button.less"; diff --git a/test/lib/builder/builder.js b/test/lib/builder/builder.js index 9cc5a4c09..6c0ea542d 100644 --- a/test/lib/builder/builder.js +++ b/test/lib/builder/builder.js @@ -14,6 +14,7 @@ const libraryEPath = path.join(__dirname, "..", "..", "fixtures", "library.e"); const libraryIPath = path.join(__dirname, "..", "..", "fixtures", "library.i"); const libraryHPath = path.join(__dirname, "..", "..", "fixtures", "library.h"); const libraryCore = path.join(__dirname, "..", "..", "fixtures", "sap.ui.core-evo"); +const themeJPath = path.join(__dirname, "..", "..", "fixtures", "theme.j"); const recursive = require("recursive-readdir"); @@ -31,12 +32,14 @@ const findFiles = (folder) => { function cloneProjectTree(tree) { const clone = JSON.parse(JSON.stringify(tree)); + function increaseDepth(node) { node._level++; - if ( Array.isArray(node.dependencies) ) { + if (Array.isArray(node.dependencies)) { node.dependencies.forEach(increaseDepth); } } + increaseDepth(clone); return clone; } @@ -253,6 +256,27 @@ test("Build library.i with manifest info taken from .library and library.js", (t }); }); +test("Build theme.j even without an library", (t) => { + const destPath = "./test/tmp/build/theme.j/dest"; + const expectedPath = "./test/expected/build/theme.j/dest"; + return builder.build({ + tree: themeJTree, + destPath + }).then(() => { + return findFiles(expectedPath); + }).then((expectedFiles) => { + // Check for all directories and files + assert.directoryDeepEqual(destPath, expectedPath); + + // Check for all file contents + expectedFiles.forEach((expectedFile) => { + const relativeFile = path.relative(expectedPath, expectedFile); + const destFile = path.join(destPath, relativeFile); + assert.fileEqual(destFile, expectedFile); + t.pass(); + }); + }); +}); const applicationATree = { "id": "application.a", @@ -737,3 +761,28 @@ const libraryITree = { } }; +const themeJTree = { + "id": "library.i", + "version": "1.0.0", + "path": themeJPath, + "dependencies": [], + "_level": 0, + "specVersion": "0.1", + "type": "library", + "metadata": { + "name": "theme.j", + "copyright": "Some fancy copyright" + }, + "resources": { + "configuration": { + "paths": { + "src": "main/src", + "test": "main/test" + } + }, + "pathMappings": { + "/resources/": "main/src", + "/test-resources/": "main/test" + } + } +};