/*******************************************************************************
* Copyright (c) 2014 Bruno Medeiros and other Contributors.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Bruno Medeiros - initial API and implementation
*******************************************************************************/
package com.googlecode.goclipse.tooling.env;
import static melnorme.utilbox.core.Assert.AssertNamespace.assertTrue;
import java.io.File;
import org.junit.Test;
import com.googlecode.goclipse.tooling.CommonGoToolingTest;
import com.googlecode.goclipse.tooling.GoPackageName;
import melnorme.utilbox.collections.ArrayList2;
import melnorme.utilbox.collections.Indexable;
import melnorme.utilbox.core.CommonException;
import melnorme.utilbox.misc.CollectionUtil;
import melnorme.utilbox.misc.Location;
import melnorme.utilbox.misc.MiscUtil;
public class GoEnvironmentTest extends CommonGoToolingTest {
public static Location SAMPLE_ROOT_PATH = Location.create_fromValid(path(MiscUtil.OS_IS_WINDOWS ? "C:/" : "/"));
private static final Location WS_BAR = TESTS_WORKDIR.resolve_valid("WorkspaceBar");
private static final Location WS_FOO = TESTS_WORKDIR.resolve_valid("WorkspaceFoo");
public static GoPackageName goPkg(String pathString) {
return GoPackageName.fromPath(MiscUtil.createPathOrNull(pathString));
}
@Test
public void test_GoPackageName() throws Exception { test_GoPackageName$(); }
public void test_GoPackageName$() throws Exception {
GoPackageName.createValid("foo/bar");
GoPackageName.createValid("foo/bar.asdf");
GoPackageName.createValid("foo/bar..asdf");
GoPackageName.createValid("foo/bar...asdf");
if(MiscUtil.OS_IS_WINDOWS) {
assertEquals(GoPackageName.createValid("foo\\bar").toString(), "foo/bar");
}
verifyThrows(() -> GoPackageName.createValid("foo/.."), CommonException.class);
verifyThrows(() -> GoPackageName.createValid("./foo"), CommonException.class);
verifyThrows(() -> GoPackageName.createValid(""), CommonException.class);
}
@Test
public void test_GoPath() throws Exception { test_GoPath$(); }
public void test_GoPath$() throws Exception {
GoPath goPath = new GoPath(WS_FOO + File.pathSeparator + WS_BAR);
assertAreEqual(goPath.findGoPathEntry(WS_FOO.resolve_valid("xxx")), new GoWorkspaceLocation(WS_FOO));
assertAreEqual(goPath.findGoPathEntry(WS_BAR.resolve_valid("xxx")), new GoWorkspaceLocation(WS_BAR));
assertAreEqual(goPath.findGoPathEntry(TESTS_WORKDIR.resolve_valid("xxx")), null);
assertAreEqual(goPath.findGoPackageForLocation(WS_FOO.resolve_valid("xxx/")), null);
assertAreEqual(goPath.findGoPackageForLocation(WS_FOO.resolve_valid("src/xxx/")), goPkg("xxx"));
assertAreEqual(goPath.findGoPackageForLocation(WS_FOO.resolve_valid("src/xxx/zzz")), goPkg("xxx/zzz"));
assertAreEqual(goPath.findGoPackageForLocation(WS_FOO.resolve_valid("src")), null);
assertAreEqual(goPath.findGoPackageForLocation(WS_BAR.resolve_valid("src/xxx")), goPkg("xxx"));
assertAreEqual(goPath.findGoPackageForLocation(WS_BAR.resolve_valid("src/src/src")), goPkg("src/src"));
assertAreEqual(goPath.findGoPackageForLocation(TESTS_WORKDIR.resolve_valid("src/xxx")), null);
// Test empty case
goPath = new GoPath("");
assertTrue(goPath.isEmpty());
assertTrue(goPath.getGoPathEntries().size() == 0);
assertEquals(goPath.getGoPathString(), "");
verifyThrows(() -> new GoPath("").validate(), CommonException.class, "empty");
}
@Test
public void test() throws Exception { test$(); }
public void test$() throws Exception {
GoEnvironment goEnv = SAMPLE_GOEnv_1;
goEnv.validate();
Location goRootSrc = goEnv.getGoRoot_Location().resolve_valid("src");
assertAreEqual(goEnv.findGoPackageForSourceFile(goRootSrc.resolve_valid("pack/m.go")),
goPkg("pack"));
assertAreEqual(goEnv.findGoPackageForSourceFile(goRootSrc.resolve_valid("pack/foo/m.go")),
goPkg("pack/foo"));
assertAreEqual(goEnv.findGoPackageForSourceFile(goRootSrc.resolve_valid("../foo/m.go")),
null);
assertAreEqual(goEnv.findGoPackageForSourceFile(SAMPLE_ROOT_PATH), null);
}
@Test
public void testFindSourcePackage() throws Exception { testFindSourcePackage$(); }
public void testFindSourcePackage$() throws Exception {
GoPath goPath = new GoPath(TR_SAMPLE_GOPATH_ENTRY.toString());
ArrayList2<GoPackageName> Packages_foo = list(
goPkg("samplePackage"),
goPkg("samplePackage/subpack"),
goPkg("samplePackage/subpack/bar")
);
ArrayList2<GoPackageName> Packages_foobar = list(
goPkg("samplePackage2/xxx")
);
ArrayList2<GoPackageName> PackagesAll = new ArrayList2<GoPackageName>()
.addAll2(Packages_foo)
.addAll2(Packages_foobar);
GoWorkspaceLocation goWorkspace = new GoWorkspaceLocation(TR_SAMPLE_GOPATH_ENTRY);
assertEqualSorted(goWorkspace.findSourcePackages(TR_SAMPLE_GOPATH_ENTRY.resolve_valid("src")), PackagesAll);
assertEqualSorted(goWorkspace.findSourcePackages(TR_SAMPLE_GOPATH_ENTRY.resolve_valid("..")), list());
assertEqualSorted(goWorkspace.findSourcePackages(TR_SAMPLE_GOPATH_ENTRY), list());
assertEqualSorted(goWorkspace.findSubPackages(""), PackagesAll);
assertEqualSorted(goWorkspace.findSubPackages("."), PackagesAll);
assertEqualSorted(goWorkspace.findSubPackages("samplePackage"), Packages_foo);
assertEqualSorted(goWorkspace.findSubPackages("samplePackage/."), Packages_foo);
assertEqualSorted(goWorkspace.findSubPackages("samplePackage2/."), Packages_foobar);
assertEqualSorted(goPath.findGoSourcePackages(TR_SAMPLE_GOPATH_ENTRY), PackagesAll);
assertEqualSorted(goPath.findGoSourcePackages(TR_SAMPLE_GOPATH_ENTRY.resolve_valid("src")),
PackagesAll);
assertEqualSorted(goPath.findGoSourcePackages(TR_SAMPLE_GOPATH_ENTRY.resolve_valid("src/samplePackage")),
Packages_foo);
assertEqualSorted(goPath.findGoSourcePackages(TR_SAMPLE_GOPATH_ENTRY.resolve_valid("src/samplePackage2")),
Packages_foobar);
// Test no results
assertAreEqual(goPath.findGoSourcePackages(TR_SAMPLE_GOPATH_ENTRY.resolve_valid("..")), list());
}
protected <T extends Comparable<T>> void assertEqualSorted(ArrayList2<T> list1, Indexable<?> list2) {
CollectionUtil.sort(list1);
assertAreEqual(list1, list2);
}
}