use of com.vaadin.flow.server.Constants.TARGET in project flow by vaadin.
the class UpdateThemedImportsTest method setup.
@Before
public void setup() throws Exception {
File tmpRoot = temporaryFolder.getRoot();
frontendDirectory = new File(tmpRoot, DEFAULT_FRONTEND_DIR);
nodeModulesPath = new File(tmpRoot, NODE_MODULES);
generatedPath = new File(tmpRoot, Paths.get(TARGET, DEFAULT_GENERATED_DIR).toString());
importsFile = new File(generatedPath, IMPORTS_NAME);
Assert.assertTrue(nodeModulesPath.mkdirs());
createImport("./src/subfolder/sub-template.js", "");
createImport("./src/client-side-template.js", "import 'xx' from './subfolder/sub-template.js';" + "import '@vaadin/vaadin-button/src/vaadin-button.js'");
createImport("./src/client-side-no-themed-template.js", "");
createImport("./src/main-template.js", "import 'xx' from './client-side-template.js';" + "import \"./client-side-no-themed-template.js\";" + "import './src/wrong-themed-template.js';" + "import '@vaadin/vaadin-button/src/vaadin-button.js'");
// create themed modules
createImport("./theme/myTheme/subfolder/sub-template.js", "");
createImport("./theme/myTheme/client-side-template.js", "");
createImport("./theme/myTheme/main-template.js", "");
// wrong-themed-template.js should not be resolved inside node_modules.
// It should be searched only inside frontend directory
createImport("theme/myTheme/wrong-themed-template.js", "");
// create css files to avoid exception when files not found during the
// test
createImport("./foo.css", "");
createImport("@vaadin/vaadin-mixed-component/bar.css", "");
// make external component's module and its themed version
createImport("@vaadin/vaadin-button/src/vaadin-button.js", "");
createImport("@vaadin/vaadin-button/theme/myTheme/vaadin-button.js", "");
ClassFinder finder = getClassFinder();
FrontendDependencies deps = new FrontendDependencies(finder) {
@Override
public List<String> getModules() {
return Stream.of("./src/main-template.js").collect(Collectors.toList());
}
@Override
public Set<String> getScripts() {
return Collections.emptySet();
}
@Override
public AbstractTheme getTheme() {
return new MyTheme();
}
@Override
public ThemeDefinition getThemeDefinition() {
return new ThemeDefinition(MyTheme.class, "", "");
}
};
updater = new TaskUpdateImports(finder, deps, cf -> null, tmpRoot, generatedPath, frontendDirectory, null, null, false, TARGET, true, false, Mockito.mock(FeatureFlags.class));
}
use of com.vaadin.flow.server.Constants.TARGET in project flow by vaadin.
the class NodeUpdateImportsTest method noFallBackScanner_fallbackIsNotGenerated.
@Test
public void noFallBackScanner_fallbackIsNotGenerated() throws IOException {
Stream<Class<?>> classes = Stream.concat(Stream.of(NodeTestComponents.class.getDeclaredClasses()), Stream.of(ExtraNodeTestComponents.class.getDeclaredClasses()));
ClassFinder classFinder = new DefaultClassFinder(new URLClassLoader(getClassPath()), classes.toArray(Class<?>[]::new));
updater = new TaskUpdateImports(classFinder, new FrontendDependenciesScannerFactory().createScanner(false, classFinder, true), finder -> null, tmpRoot, generatedPath, frontendDirectory, tokenFile, null, false, TARGET, true, false, Mockito.mock(FeatureFlags.class)) {
@Override
Logger log() {
return logger;
}
};
updater.execute();
assertTrue(importsFile.exists());
String mainContent = FileUtils.readFileToString(importsFile, Charset.defaultCharset());
// fallback chunk load function is not generated
MatcherAssert.assertThat(mainContent, CoreMatchers.not(CoreMatchers.containsString("window.Vaadin.Flow.loadFallback = function loadFallback(){")));
Assert.assertFalse(fallBackImportsFile.exists());
}
use of com.vaadin.flow.server.Constants.TARGET in project flow by vaadin.
the class NodeUpdateImportsTest method tokenFileIsStable.
@Test
public void tokenFileIsStable() throws Exception {
Stream<Class<?>> classes = Stream.concat(Stream.of(ExtraNodeTestComponents.class.getDeclaredClasses()), Stream.of(NodeTestComponents.class.getDeclaredClasses()));
ClassFinder classFinder = new DefaultClassFinder(new URLClassLoader(getClassPath()), classes.toArray(Class<?>[]::new));
JsonObject fallBackData = Json.createObject();
updater = new TaskUpdateImports(classFinder, new FrontendDependenciesScannerFactory().createScanner(false, classFinder, true), finder -> new FrontendDependenciesScannerFactory().createScanner(true, finder, true), tmpRoot, generatedPath, frontendDirectory, tokenFile, fallBackData, false, TARGET, true, false, Mockito.mock(FeatureFlags.class)) {
@Override
Logger log() {
return logger;
}
};
updater.execute();
JsonObject fallback = fallBackData.getObject("chunks").getObject("fallback");
JsonArray jsModules = fallback.getArray("jsModules");
JsonArray cssImports = fallback.getArray("cssImports");
String expectedJsModules = "[\"@polymer/e.js\",\"@polymer/D.js\",\"@polymer/c.js\",\"@polymer/b.js\",\"@polymer/a.js\",\"./extra-javascript.js\"]";
String expectedCssImports = "[{\"value\":\"./b-css.css\"},{\"include\":\"a-a\",\"value\":\"./a-css.css\"},{\"include\":\"extra-bar\",\"themeFor\":\"extra-foo\",\"value\":\"./extra-css.css\"}]";
Assert.assertEquals(expectedJsModules, jsModules.toJson());
Assert.assertEquals(expectedCssImports, cssImports.toJson());
String actual = FileUtils.readFileToString(tokenFile, StandardCharsets.UTF_8);
String expected = //
"{\n" + //
" \"chunks\": {\n" + //
" \"fallback\": {\n" + //
" \"jsModules\": [\n" + //
" \"@polymer/e.js\",\n" + //
" \"@polymer/D.js\",\n" + //
" \"@polymer/c.js\",\n" + //
" \"@polymer/b.js\",\n" + //
" \"@polymer/a.js\",\n" + //
" \"./extra-javascript.js\"\n" + //
" ],\n" + //
" \"cssImports\": [\n" + //
" {\n" + //
" \"value\": \"./b-css.css\"\n" + //
" },\n" + //
" {\n" + //
" \"include\": \"a-a\",\n" + //
" \"value\": \"./a-css.css\"\n" + //
" },\n" + //
" {\n" + //
" \"include\": \"extra-bar\",\n" + //
" \"themeFor\": \"extra-foo\",\n" + //
" \"value\": \"./extra-css.css\"\n" + //
" }\n" + //
" ]\n" + //
" }\n" + //
" }\n" + "}";
Assert.assertEquals(expected, actual);
}
use of com.vaadin.flow.server.Constants.TARGET in project flow by vaadin.
the class NodeUpdateImportsTest method emptyByteCodeScannerData_themeIsDiscovered_fallbackIsGenerated.
@Test
public void emptyByteCodeScannerData_themeIsDiscovered_fallbackIsGenerated() throws IOException {
ClassFinder classFinder = new DefaultClassFinder(new URLClassLoader(getClassPath()), EmptyByteScannerDataTestComponents.class.getDeclaredClasses());
updater = new TaskUpdateImports(classFinder, new FrontendDependenciesScannerFactory().createScanner(false, classFinder, true), finder -> new FrontendDependenciesScannerFactory().createScanner(true, finder, true), tmpRoot, generatedPath, frontendDirectory, tokenFile, null, false, TARGET, true, false, Mockito.mock(FeatureFlags.class)) {
@Override
Logger log() {
return logger;
}
};
updater.execute();
assertTrue(importsFile.exists());
String mainContent = FileUtils.readFileToString(importsFile, Charset.defaultCharset());
// ============== check main generated imports file ============
// Contains theme lines
MatcherAssert.assertThat(mainContent, CoreMatchers.containsString("export const addCssBlock = function(block, before = false) {"));
MatcherAssert.assertThat(mainContent, CoreMatchers.containsString("addCssBlock('<custom-style>foo</custom-style>', true);"));
// fallback chunk load function is generated
MatcherAssert.assertThat(mainContent, CoreMatchers.containsString("fallbacks[thisScript.getAttribute('data-app-id')].loadFallback = function loadFallback() {"));
MatcherAssert.assertThat(mainContent, CoreMatchers.containsString("return import('./generated-flow-imports-fallback.js');"));
// ============== check fallback generated imports file ============
String fallBackContent = FileUtils.readFileToString(fallBackImportsFile, Charset.defaultCharset());
// Does not Contains theme lines
MatcherAssert.assertThat(fallBackContent, CoreMatchers.not(CoreMatchers.containsString("const div = document.createElement('div');")));
// Contains CSS import lines from CP not discovered by byte
// scanner
MatcherAssert.assertThat(fallBackContent, CoreMatchers.containsString("import $cssFromFile_0 from 'Frontend/foo.css';"));
MatcherAssert.assertThat(fallBackContent, CoreMatchers.containsString("registerStyles('', $css_0, {include: 'bar', moduleId: 'baz'});"));
// Contains JS module imports
MatcherAssert.assertThat(fallBackContent, CoreMatchers.containsString("import '@vaadin/vaadin-lumo-styles/icons.js';"));
MatcherAssert.assertThat(fallBackContent, CoreMatchers.containsString("import 'Frontend/common-js-file.js';"));
// Contains Javascript imports
MatcherAssert.assertThat(fallBackContent, CoreMatchers.containsString("import '@vaadin/flow-frontend/ExampleConnector.js';"));
}
use of com.vaadin.flow.server.Constants.TARGET in project flow by vaadin.
the class NodeUpdateImportsTest method noFallBackScanner_fallbackIsNotImportedEvenIfTheFileExists.
@Test
public void noFallBackScanner_fallbackIsNotImportedEvenIfTheFileExists() throws Exception {
Stream<Class<?>> classes = Stream.concat(Stream.of(NodeTestComponents.class.getDeclaredClasses()), Stream.of(ExtraNodeTestComponents.class.getDeclaredClasses()));
ClassFinder classFinder = new DefaultClassFinder(new URLClassLoader(getClassPath()), classes.toArray(Class<?>[]::new));
// create fallback imports file:
// it is present after generated but the user is now running
// everything without fallback. The file should not be included into
// the imports
fallBackImportsFile.mkdirs();
fallBackImportsFile.createNewFile();
Assert.assertTrue(fallBackImportsFile.exists());
updater = new TaskUpdateImports(classFinder, new FrontendDependenciesScannerFactory().createScanner(false, classFinder, true), finder -> null, tmpRoot, generatedPath, frontendDirectory, tokenFile, null, false, TARGET, true, false, Mockito.mock(FeatureFlags.class)) {
@Override
Logger log() {
return logger;
}
};
updater.execute();
assertTrue(importsFile.exists());
String mainContent = FileUtils.readFileToString(importsFile, Charset.defaultCharset());
// fallback file is not imported in generated-flow-imports
MatcherAssert.assertThat(mainContent, CoreMatchers.not(CoreMatchers.containsString(FrontendUtils.FALLBACK_IMPORTS_NAME)));
}
Aggregations