use of com.vaadin.flow.server.frontend.scanner.ClassFinder in project flow by vaadin.
the class FrontendResourcesAreCopiedAfterCleaningTest method copyResources.
private void copyResources() throws ExecutionFailedException {
ClassFinder classFinder = new ClassFinder.DefaultClassFinder(FrontendResourcesAreCopiedAfterCleaningTest.class.getClassLoader());
Lookup mockLookup = Mockito.mock(Lookup.class);
Mockito.doReturn(classFinder).when(mockLookup).lookup(ClassFinder.class);
NodeTasks.Builder builder = new NodeTasks.Builder(mockLookup, npmFolder, TARGET);
File resourcesFolder = new File(npmFolder, Paths.get(TARGET, DEFAULT_FLOW_RESOURCES_FOLDER).toString());
builder.withEmbeddableWebComponents(false).enableImportsUpdate(false).createMissingPackageJson(true).enableImportsUpdate(true).runNpmInstall(false).enablePackagesUpdate(true).withFlowResourcesFolder(resourcesFolder).copyResources(Collections.singleton(testJar)).build().execute();
}
use of com.vaadin.flow.server.frontend.scanner.ClassFinder 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.frontend.scanner.ClassFinder in project flow by vaadin.
the class TaskInstallWebpackPluginsTest method pluginsAddedToPackageJson.
@Test
public void pluginsAddedToPackageJson() throws IOException {
File resourceFolder = temporaryFolder.newFolder();
ClassFinder finder = Mockito.mock(ClassFinder.class);
NodeUpdater nodeUpdater = new NodeUpdater(finder, Mockito.mock(FrontendDependencies.class), rootFolder, new File(""), resourceFolder, BUILD_DIRECTORY, Mockito.mock(FeatureFlags.class)) {
@Override
public void execute() {
}
};
task.execute();
final JsonObject packageJson = nodeUpdater.getPackageJson();
final JsonObject devDependencies = packageJson.getObject(DEV_DEPENDENCIES);
for (String plugin : WebpackPluginsUtil.getPlugins()) {
Assert.assertTrue("packageJson is missing " + plugin, devDependencies.hasKey("@vaadin/" + plugin));
final String pluginFolder = "./" + rootFolder.toPath().relativize(getPluginFolder(plugin).toPath()).toString().replace('\\', '/');
Assert.assertEquals("Plugin is pointing to wrong directory", pluginFolder, devDependencies.getString("@vaadin/" + plugin));
}
}
use of com.vaadin.flow.server.frontend.scanner.ClassFinder 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.frontend.scanner.ClassFinder 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);
}
Aggregations