diff --git a/.gitignore b/.gitignore index c0fcd3b..f26a16a 100644 --- a/.gitignore +++ b/.gitignore @@ -39,10 +39,7 @@ eclipse.sh .DS_Store # Bazel build result -**/bazel-bazel-ls-demo-project -**/bazel-bin -**/bazel-out -**/bazel-testlogs +**/bazel-* # Checkstyle files *.checkstyle diff --git a/com.salesforce.b2eclipse.jdt.ls/src/main/java/com/salesforce/b2eclipse/BazelJdtPlugin.java b/com.salesforce.b2eclipse.jdt.ls/src/main/java/com/salesforce/b2eclipse/BazelJdtPlugin.java index f9f04cf..2782edb 100644 --- a/com.salesforce.b2eclipse.jdt.ls/src/main/java/com/salesforce/b2eclipse/BazelJdtPlugin.java +++ b/com.salesforce.b2eclipse.jdt.ls/src/main/java/com/salesforce/b2eclipse/BazelJdtPlugin.java @@ -39,6 +39,8 @@ import java.io.File; import java.io.IOException; import java.io.InputStreamReader; +import java.util.HashMap; +import java.util.Map; import java.util.NoSuchElementException; import org.eclipse.core.runtime.CoreException; @@ -47,6 +49,7 @@ import org.eclipse.core.runtime.Plugin; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.preferences.InstanceScope; +import org.eclipse.jdt.ls.core.internal.JavaLanguageServerPlugin; import org.osgi.framework.BundleContext; import org.osgi.service.prefs.BackingStoreException; import org.osgi.service.prefs.Preferences; @@ -58,6 +61,7 @@ import com.salesforce.b2eclipse.command.CommandBuilder; import com.salesforce.b2eclipse.command.shell.ShellCommandBuilder; import com.salesforce.b2eclipse.config.BazelAspectLocationImpl; +import com.salesforce.b2eclipse.managers.B2EPreferncesManager; import com.salesforce.b2eclipse.runtime.api.JavaCoreHelper; import com.salesforce.b2eclipse.runtime.api.ResourceHelper; import com.salesforce.b2eclipse.runtime.impl.EclipseJavaCoreHelper; @@ -145,6 +149,12 @@ public void start(BundleContext bundleContext) throws Exception { startInternal(aspectLocation, commandBuilder, eclipseResourceHelper, eclipseJavaCoreHelper); + Map configuration = JavaLanguageServerPlugin.getPreferencesManager().getPreferences().asMap(); + if (configuration == null) { + configuration = new HashMap<>(); + } + B2EPreferncesManager preferencesManager = B2EPreferncesManager.getInstance(); + preferencesManager.setConfiguration(configuration); } /** diff --git a/com.salesforce.b2eclipse.jdt.ls/src/main/java/com/salesforce/b2eclipse/config/BazelEclipseProjectFactory.java b/com.salesforce.b2eclipse.jdt.ls/src/main/java/com/salesforce/b2eclipse/config/BazelEclipseProjectFactory.java index 9ab711a..8f425cd 100644 --- a/com.salesforce.b2eclipse.jdt.ls/src/main/java/com/salesforce/b2eclipse/config/BazelEclipseProjectFactory.java +++ b/com.salesforce.b2eclipse.jdt.ls/src/main/java/com/salesforce/b2eclipse/config/BazelEclipseProjectFactory.java @@ -419,7 +419,7 @@ private static IFolder createFoldersForRelativePackagePath(IProject project, Str if (!generatedSources) { if (!packageSourceCodeFSRelativePath.startsWith(bazelPackageFSPath)) { - throw new IllegalStateException("src code path exepcted to be under bazel package path"); + throw new IllegalStateException("src code path expected to be under bazel package path"); } if (Paths.get(packageSourceCodeFSRelativePath).equals(Paths.get(bazelPackageFSPath))) { throw new IllegalStateException("did not expect src code path to be equals to the bazel package path"); diff --git a/com.salesforce.b2eclipse.jdt.ls/src/main/java/com/salesforce/b2eclipse/managers/B2EPreferncesManager.java b/com.salesforce.b2eclipse.jdt.ls/src/main/java/com/salesforce/b2eclipse/managers/B2EPreferncesManager.java index c74a625..8aa3e16 100644 --- a/com.salesforce.b2eclipse.jdt.ls/src/main/java/com/salesforce/b2eclipse/managers/B2EPreferncesManager.java +++ b/com.salesforce.b2eclipse.jdt.ls/src/main/java/com/salesforce/b2eclipse/managers/B2EPreferncesManager.java @@ -35,7 +35,6 @@ import java.util.Map; -import org.eclipse.jdt.ls.core.internal.JavaLanguageServerPlugin; import org.eclipse.jdt.ls.core.internal.handlers.MapFlattener; @SuppressWarnings("restriction") @@ -73,7 +72,10 @@ public final class B2EPreferncesManager { private String importBazelTestPath; private B2EPreferncesManager() { - Map configuration = JavaLanguageServerPlugin.getPreferencesManager().getPreferences().asMap(); + + } + + public void setConfiguration(Map configuration) { importBazelEnabled = MapFlattener.getBoolean(configuration, IMPORT_BAZEL_ENABLED, false); importBazelSrcPath = MapFlattener.getString(configuration, BAZEL_SRC_PATH, BAZEL_DEFAULT_SRC_PATH); importBazelTestPath = MapFlattener.getString(configuration, BAZEL_TEST_PATH, BAZEL_DEFAULT_TEST_PATH); diff --git a/com.salesforce.b2eclipse.tests/projects/build-with-class/WORKSPACE b/com.salesforce.b2eclipse.tests/projects/build-with-class/WORKSPACE new file mode 100644 index 0000000..e69de29 diff --git a/com.salesforce.b2eclipse.tests/projects/build-with-class/module1/java/src/example/BUILD b/com.salesforce.b2eclipse.tests/projects/build-with-class/module1/java/src/example/BUILD new file mode 100644 index 0000000..9f07387 --- /dev/null +++ b/com.salesforce.b2eclipse.tests/projects/build-with-class/module1/java/src/example/BUILD @@ -0,0 +1,13 @@ +load("@rules_java//java:defs.bzl", "java_binary") + +java_binary( + name = "ProjectRunner", + srcs = glob(["*.java"]), + main_class = "com.example.ProjectRunner", + deps = [":greeter"], +) + +java_library( + name = "greeter", + srcs = ["Greeting.java"], +) diff --git a/com.salesforce.b2eclipse.tests/projects/build-with-class/module1/java/src/example/Greeting.java b/com.salesforce.b2eclipse.tests/projects/build-with-class/module1/java/src/example/Greeting.java new file mode 100644 index 0000000..0174178 --- /dev/null +++ b/com.salesforce.b2eclipse.tests/projects/build-with-class/module1/java/src/example/Greeting.java @@ -0,0 +1,7 @@ +package com.example; + +public class Greeting { + public static void sayHi() { + System.out.println("Hi!"); + } +} diff --git a/com.salesforce.b2eclipse.tests/projects/build-with-class/module1/java/src/example/ProjectRunner.java b/com.salesforce.b2eclipse.tests/projects/build-with-class/module1/java/src/example/ProjectRunner.java new file mode 100644 index 0000000..038df90 --- /dev/null +++ b/com.salesforce.b2eclipse.tests/projects/build-with-class/module1/java/src/example/ProjectRunner.java @@ -0,0 +1,7 @@ +package com.example; + +public class ProjectRunner { + public static void main(String args[]) { + Greeting.sayHi(); + } +} diff --git a/com.salesforce.b2eclipse.tests/projects/build-with-subpackage/WORKSPACE b/com.salesforce.b2eclipse.tests/projects/build-with-subpackage/WORKSPACE new file mode 100644 index 0000000..e69de29 diff --git a/com.salesforce.b2eclipse.tests/projects/build-with-subpackage/module/BUILD b/com.salesforce.b2eclipse.tests/projects/build-with-subpackage/module/BUILD new file mode 100644 index 0000000..e51e434 --- /dev/null +++ b/com.salesforce.b2eclipse.tests/projects/build-with-subpackage/module/BUILD @@ -0,0 +1,8 @@ +load("@rules_java//java:defs.bzl", "java_binary") + +java_binary( + name = "ProjectRunner", + srcs = glob(["java/src/example/ProjectRunner.java"]), + main_class = "example.ProjectRunner", + deps = ["//module/submodule:greeter"], +) diff --git a/com.salesforce.b2eclipse.tests/projects/build-with-subpackage/module/java/src/example/ProjectRunner.java b/com.salesforce.b2eclipse.tests/projects/build-with-subpackage/module/java/src/example/ProjectRunner.java new file mode 100644 index 0000000..1e194a0 --- /dev/null +++ b/com.salesforce.b2eclipse.tests/projects/build-with-subpackage/module/java/src/example/ProjectRunner.java @@ -0,0 +1,9 @@ +package example; + +import greeting.SayHi; + +public class ProjectRunner { + public static void main(String args[]) { + SayHi.sayHi(); + } +} diff --git a/com.salesforce.b2eclipse.tests/projects/build-with-subpackage/module/submodule/BUILD b/com.salesforce.b2eclipse.tests/projects/build-with-subpackage/module/submodule/BUILD new file mode 100644 index 0000000..e85303c --- /dev/null +++ b/com.salesforce.b2eclipse.tests/projects/build-with-subpackage/module/submodule/BUILD @@ -0,0 +1,7 @@ +load("@rules_java//java:defs.bzl", "java_library") + +java_library( + name = "greeter", + srcs = glob(["java/src/greeting/SayHi.java"]), + visibility = ["//visibility:public"], +) diff --git a/com.salesforce.b2eclipse.tests/projects/build-with-subpackage/module/submodule/java/src/greeting/SayHi.java b/com.salesforce.b2eclipse.tests/projects/build-with-subpackage/module/submodule/java/src/greeting/SayHi.java new file mode 100644 index 0000000..34f9e3e --- /dev/null +++ b/com.salesforce.b2eclipse.tests/projects/build-with-subpackage/module/submodule/java/src/greeting/SayHi.java @@ -0,0 +1,7 @@ +package greeting; + +public class SayHi { + public static void sayHi() { + System.out.println("Hi!"); + } +} diff --git a/com.salesforce.b2eclipse.tests/projects/build-with-workspace/BUILD b/com.salesforce.b2eclipse.tests/projects/build-with-workspace/BUILD new file mode 100644 index 0000000..e69de29 diff --git a/com.salesforce.b2eclipse.tests/projects/build-with-workspace/WORKSPACE b/com.salesforce.b2eclipse.tests/projects/build-with-workspace/WORKSPACE new file mode 100644 index 0000000..e69de29 diff --git a/com.salesforce.b2eclipse.tests/projects/build-with-workspace/module1/BUILD b/com.salesforce.b2eclipse.tests/projects/build-with-workspace/module1/BUILD new file mode 100644 index 0000000..1169335 --- /dev/null +++ b/com.salesforce.b2eclipse.tests/projects/build-with-workspace/module1/BUILD @@ -0,0 +1,13 @@ +load("@rules_java//java:defs.bzl", "java_binary") + +java_binary( + name = "ProjectRunner", + srcs = glob(["src/main/java/com/example/ProjectRunner.java"]), + main_class = "com.example.ProjectRunner", + deps = [":greeter"], +) + +java_library( + name = "greeter", + srcs = ["src/main/java/com/example/Greeting.java"], +) diff --git a/com.salesforce.b2eclipse.tests/projects/build-with-workspace/module1/java/src/example/Greeting.java b/com.salesforce.b2eclipse.tests/projects/build-with-workspace/module1/java/src/example/Greeting.java new file mode 100644 index 0000000..0174178 --- /dev/null +++ b/com.salesforce.b2eclipse.tests/projects/build-with-workspace/module1/java/src/example/Greeting.java @@ -0,0 +1,7 @@ +package com.example; + +public class Greeting { + public static void sayHi() { + System.out.println("Hi!"); + } +} diff --git a/com.salesforce.b2eclipse.tests/projects/build-with-workspace/module1/java/src/example/ProjectRunner.java b/com.salesforce.b2eclipse.tests/projects/build-with-workspace/module1/java/src/example/ProjectRunner.java new file mode 100644 index 0000000..038df90 --- /dev/null +++ b/com.salesforce.b2eclipse.tests/projects/build-with-workspace/module1/java/src/example/ProjectRunner.java @@ -0,0 +1,7 @@ +package com.example; + +public class ProjectRunner { + public static void main(String args[]) { + Greeting.sayHi(); + } +} diff --git a/com.salesforce.b2eclipse.tests/src/main/java/com/salesforce/b2eclipse/BazelNatureTest.java b/com.salesforce.b2eclipse.tests/src/main/java/com/salesforce/b2eclipse/BazelNatureTest.java index 490c325..d87af10 100644 --- a/com.salesforce.b2eclipse.tests/src/main/java/com/salesforce/b2eclipse/BazelNatureTest.java +++ b/com.salesforce.b2eclipse.tests/src/main/java/com/salesforce/b2eclipse/BazelNatureTest.java @@ -38,7 +38,6 @@ public void testGetProject() { BazelNature nature = new BazelNature(); IProject actual = nature.getProject(); assertEquals(actual, expected); - System.out.println(nature); } } diff --git a/com.salesforce.b2eclipse.tests/src/main/java/com/salesforce/b2eclipse/BazelImportTest.java b/com.salesforce.b2eclipse.tests/src/main/java/com/salesforce/b2eclipse/importer/BaseBazelImproterTest.java similarity index 56% rename from com.salesforce.b2eclipse.tests/src/main/java/com/salesforce/b2eclipse/BazelImportTest.java rename to com.salesforce.b2eclipse.tests/src/main/java/com/salesforce/b2eclipse/importer/BaseBazelImproterTest.java index ba0a108..c9b2978 100644 --- a/com.salesforce.b2eclipse.tests/src/main/java/com/salesforce/b2eclipse/BazelImportTest.java +++ b/com.salesforce.b2eclipse.tests/src/main/java/com/salesforce/b2eclipse/importer/BaseBazelImproterTest.java @@ -23,59 +23,55 @@ * */ -package com.salesforce.b2eclipse; +package com.salesforce.b2eclipse.importer; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.jdt.ls.core.internal.JavaLanguageServerPlugin; -import org.eclipse.jdt.ls.core.internal.preferences.PreferenceManager; -import org.eclipse.jdt.ls.core.internal.preferences.Preferences; -import org.junit.Before; -import org.junit.Test; import com.salesforce.b2eclipse.config.BazelEclipseProjectFactory; -import com.salesforce.b2eclipse.importer.BazelProjectImportScanner; +import com.salesforce.b2eclipse.managers.B2EPreferncesManager; import com.salesforce.b2eclipse.model.BazelPackageInfo; import com.salesforce.b2eclipse.runtime.impl.EclipseWorkProgressMonitor; -@SuppressWarnings("restriction") -public class BazelImportTest { +/** + * An abstract class for importing a Bazel project. + */ +public abstract class BaseBazelImproterTest { + + public static final String IMPORT_BAZEL_ENABLED = "java.import.bazel.enabled"; - private static final String BAZEL_SRC_PATH = "java.import.bazel.src.path"; + public static final String BAZEL_SRC_PATH = "java.import.bazel.src.path"; - private static final String BAZEL_SRC_PATH_VALUE = "/java/src"; + public static final String BAZEL_SRC_PATH_VALUE = "/java/src"; + public static final String BAZEL_SRC_PATH_VALUE_FOR_BUILD_WITH_CLASS_TEST = "/"; + + private BazelPackageInfo workspaceRootPackage; private IWorkspaceRoot workspaceRoot; + private BazelProjectImportScanner scanner; - public BazelImportTest() { + public BaseBazelImproterTest() { IWorkspace workspace = ResourcesPlugin.getWorkspace(); this.workspaceRoot = workspace.getRoot(); + scanner = new BazelProjectImportScanner(); } - @Before - public void setup() { - PreferenceManager manager = new PreferenceManager(); + protected void setSettings(String path) { Map settings = new HashMap<>(); - settings.put(BAZEL_SRC_PATH, BAZEL_SRC_PATH_VALUE); - Preferences pref = Preferences.createFrom(settings); - manager.update(pref); - JavaLanguageServerPlugin.setPreferencesManager(manager); - BazelProjectImportScanner scanner = new BazelProjectImportScanner(); - BazelPackageInfo workspaceRootPackage = scanner.getProjects("projects/bazel-ls-demo-project"); + settings.put(IMPORT_BAZEL_ENABLED, true); + settings.put(BAZEL_SRC_PATH, path); + B2EPreferncesManager preferencesManager = B2EPreferncesManager.getInstance(); + preferencesManager.setConfiguration(settings); + } + protected void importProject() { List bazelPackagesToImport = workspaceRootPackage.getChildPackageInfos().stream().collect(Collectors.toList()); @@ -83,20 +79,28 @@ public void setup() { new EclipseWorkProgressMonitor(), new NullProgressMonitor()); } - @Test - public void testImport() throws CoreException { - IProject module1Proj = workspaceRoot.getProject("module1"); - IProject module2Proj = workspaceRoot.getProject("module2"); - IProject module3Proj = workspaceRoot.getProject("module3"); + public BazelPackageInfo getWorkspaceRootPackage() { + return workspaceRootPackage; + } - IProject[] referencedProjects = module1Proj.getReferencedProjects(); + public void setWorkspaceRootPackage(BazelPackageInfo workspaceRootPackage) { + this.workspaceRootPackage = workspaceRootPackage; + } + + public IWorkspaceRoot getWorkspaceRoot() { + return workspaceRoot; + } - assertEquals(2, referencedProjects.length); + public void setWorkspaceRoot(IWorkspaceRoot workspaceRoot) { + this.workspaceRoot = workspaceRoot; + } - assertNotNull("Didn't find module2 in the referenced projects list", - Arrays.stream(referencedProjects).anyMatch(proj -> proj.equals(module2Proj))); + public BazelProjectImportScanner getScanner() { + return scanner; + } - assertNotNull("Didn't find module3 in the referenced projects list", - Arrays.stream(referencedProjects).anyMatch(proj -> proj.equals(module3Proj))); + public void setScanner(BazelProjectImportScanner scanner) { + this.scanner = scanner; } + } diff --git a/com.salesforce.b2eclipse.tests/src/main/java/com/salesforce/b2eclipse/importer/BazelImportTest.java b/com.salesforce.b2eclipse.tests/src/main/java/com/salesforce/b2eclipse/importer/BazelImportTest.java new file mode 100644 index 0000000..e879526 --- /dev/null +++ b/com.salesforce.b2eclipse.tests/src/main/java/com/salesforce/b2eclipse/importer/BazelImportTest.java @@ -0,0 +1,71 @@ +/** + * Copyright (c) 2020, Salesforce.com, Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of Salesforce.com nor the names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package com.salesforce.b2eclipse.importer; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.util.Arrays; + +import org.eclipse.core.resources.IProject; + +import org.eclipse.core.runtime.CoreException; + +import org.junit.Before; +import org.junit.Test; + +/** + * Test class for importing a general Bazel test project. + */ +public class BazelImportTest extends BaseBazelImproterTest { + + public BazelImportTest() { + super.setWorkspaceRootPackage(getScanner().getProjects("projects/bazel-ls-demo-project")); + } + + @Before + public void setup() { + setSettings(BAZEL_SRC_PATH_VALUE); + importProject(); + } + + @Test + public void testImport() throws CoreException { + IProject module1Proj = getWorkspaceRoot().getProject("module1"); + IProject module2Proj = getWorkspaceRoot().getProject("module2"); + IProject module3Proj = getWorkspaceRoot().getProject("module3"); + + IProject[] referencedProjects = module1Proj.getReferencedProjects(); + + assertEquals(2, referencedProjects.length); + + assertTrue("Didn't find module2 in the referenced projects list", + Arrays.stream(referencedProjects).anyMatch(proj -> proj.equals(module2Proj))); + + assertTrue("Didn't find module3 in the referenced projects list", + Arrays.stream(referencedProjects).anyMatch(proj -> proj.equals(module3Proj))); + } +} diff --git a/com.salesforce.b2eclipse.tests/src/main/java/com/salesforce/b2eclipse/importer/BuildWithClassBazelImportTest.java b/com.salesforce.b2eclipse.tests/src/main/java/com/salesforce/b2eclipse/importer/BuildWithClassBazelImportTest.java new file mode 100644 index 0000000..badf7ee --- /dev/null +++ b/com.salesforce.b2eclipse.tests/src/main/java/com/salesforce/b2eclipse/importer/BuildWithClassBazelImportTest.java @@ -0,0 +1,57 @@ +/** + * Copyright (c) 2020, Salesforce.com, Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of Salesforce.com nor the names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package com.salesforce.b2eclipse.importer; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThrows; + +import org.junit.Before; +import org.junit.Test; + +/** + * A test class for importing a Bazel test project in which a BUILD file is located next to java classes. + */ +public class BuildWithClassBazelImportTest extends BaseBazelImproterTest { + + public BuildWithClassBazelImportTest() { + super.setWorkspaceRootPackage(getScanner().getProjects("projects/build-with-class")); + } + + @Before + public void setup() { + setSettings(BAZEL_SRC_PATH_VALUE_FOR_BUILD_WITH_CLASS_TEST); + } + + @Test() + public void testFailImportProjectBuildWithClass() { + IllegalStateException exception = assertThrows(IllegalStateException.class, () -> { + importProject(); + }); + + assertEquals("did not expect src code path to be equals to the bazel package path", exception.getMessage()); + } + +} diff --git a/com.salesforce.b2eclipse.tests/src/main/java/com/salesforce/b2eclipse/importer/BuildWithSubPackageBazelImportTest.java b/com.salesforce.b2eclipse.tests/src/main/java/com/salesforce/b2eclipse/importer/BuildWithSubPackageBazelImportTest.java new file mode 100644 index 0000000..78415a1 --- /dev/null +++ b/com.salesforce.b2eclipse.tests/src/main/java/com/salesforce/b2eclipse/importer/BuildWithSubPackageBazelImportTest.java @@ -0,0 +1,65 @@ +/** + * Copyright (c) 2020, Salesforce.com, Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of Salesforce.com nor the names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package com.salesforce.b2eclipse.importer; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; + +import java.util.Arrays; + +import org.eclipse.core.resources.IProject; +import org.eclipse.core.runtime.CoreException; +import org.junit.Before; +import org.junit.Test; + +/** + * Test class for importing a Bazel test project that contains a sub module. + */ +public class BuildWithSubPackageBazelImportTest extends BaseBazelImproterTest { + + public BuildWithSubPackageBazelImportTest() { + super.setWorkspaceRootPackage(getScanner().getProjects("projects/build-with-subpackage")); + } + + @Before + public void setup() { + setSettings(BAZEL_SRC_PATH_VALUE); + importProject(); + } + + @Test + public void testFailImportProjectBuildWithSubPackage() throws CoreException { + IProject moduleProj = getWorkspaceRoot().getProject("module"); + IProject subModuleProj = getWorkspaceRoot().getProject("submodule"); + IProject[] referencedProjects = moduleProj.getReferencedProjects(); + + assertEquals(0, referencedProjects.length); + + assertFalse("Find submodule in the referenced projects list", + Arrays.stream(referencedProjects).anyMatch(proj -> proj.equals(subModuleProj))); + } + +} diff --git a/com.salesforce.b2eclipse.tests/src/main/java/com/salesforce/b2eclipse/importer/BuildWithWorkspaceBazelImportTest.java b/com.salesforce.b2eclipse.tests/src/main/java/com/salesforce/b2eclipse/importer/BuildWithWorkspaceBazelImportTest.java new file mode 100644 index 0000000..fe1cb46 --- /dev/null +++ b/com.salesforce.b2eclipse.tests/src/main/java/com/salesforce/b2eclipse/importer/BuildWithWorkspaceBazelImportTest.java @@ -0,0 +1,47 @@ +/** + * Copyright (c) 2020, Salesforce.com, Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following + * disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of Salesforce.com nor the names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package com.salesforce.b2eclipse.importer; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThrows; + +import org.junit.Test; + +/** + * A test class for importing a Bazel test project in which the BUILD file is located next to the WORKSPACE file. + */ +public class BuildWithWorkspaceBazelImportTest extends BaseBazelImproterTest { + + @Test() + public void testFailImportProjectBuildWithClass() { + IllegalStateException exception = assertThrows(IllegalStateException.class, () -> { + super.setWorkspaceRootPackage(getScanner().getProjects("projects/build-with-workspace")); + }); + + assertEquals("Root package is not supported. BUILD files should be in subdirectories", exception.getMessage()); + } + +}