/*
* Copyright 2016 Nokia Solutions and Networks
* Licensed under the Apache License, Version 2.0,
* see license.txt file for details.
*/
package org.rf.ide.core.project;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assume.assumeFalse;
import static org.junit.Assume.assumeTrue;
import java.io.File;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Collections;
import java.util.Map;
import java.util.Optional;
import org.assertj.core.api.Condition;
import org.junit.Test;
import org.rf.ide.core.executor.RedSystemProperties;
import org.rf.ide.core.project.ResolvedImportPath.MalformedPathImportException;
import com.google.common.collect.ImmutableMap;
public class ResolvedImportPathTest {
@Test(expected = MalformedPathImportException.class)
public void exceptionIsThrown_whenGivenPathIsInvalidUri() {
createResolved(":path/somewhere", Collections.<String, String>emptyMap());
}
@Test
public void noResolvedPathIsProvided_whenSomeParametersAreNotPossibleToBeResolved() {
final Map<String, String> parameters = ImmutableMap.of("${var1}", "val1", "${var2}", "val2");
assertThat(createResolved("${var}/path/somewhere", parameters)).is(absent());
assertThat(createResolved("${var}/${var1}/path/somewhere", parameters)).is(absent());
assertThat(createResolved("${var}/${var2}/path/somewhere", parameters)).is(absent());
}
@Test
public void resolvedPathIsProvided_whenAllParametersAreResolveable() throws URISyntaxException {
final Map<String, String> parameters = ImmutableMap.of("${var1}", "val1", "${var2}", "val2");
assertThat(createResolved("val/path/somewhere", parameters))
.has(elementContained(new ResolvedImportPath(new URI("val/path/somewhere"))));
assertThat(createResolved("${var1}/path/somewhere", parameters))
.has(elementContained(new ResolvedImportPath(new URI("val1/path/somewhere"))));
assertThat(createResolved("${var2}/path/somewhere", parameters))
.has(elementContained(new ResolvedImportPath(new URI("val2/path/somewhere"))));
assertThat(createResolved("${var1}/${var2}/path/somewhere", parameters))
.has(elementContained(new ResolvedImportPath(new URI("val1/val2/path/somewhere"))));
}
@Test
public void testPathsResolution_whenResolvedPathIsRelative_inWindows() {
assumeTrue(RedSystemProperties.isWindowsPlatform());
final Map<String, String> parameters = Collections.<String, String> emptyMap();
final ResolvedImportPath resolvedPath = createResolved("relative/path", parameters).get();
final URI uri = resolvedPath.resolveInRespectTo(new File("c:/some/location").toURI());
assertThat(uri).isEqualTo(new File("c:/some/relative/path/").toURI());
}
@Test
public void testPathsResolution_whenResolvedPathIsRelative_inUnix() {
assumeFalse(RedSystemProperties.isWindowsPlatform());
final Map<String, String> parameters = Collections.<String, String> emptyMap();
final ResolvedImportPath resolvedPath = createResolved("relative/path", parameters).get();
final URI uri = resolvedPath.resolveInRespectTo(new File("/some/location").toURI());
assertThat(uri).isEqualTo(new File("/some/relative/path/").toURI());
}
private static Optional<ResolvedImportPath> createResolved(final String path,
final Map<String, String> parameters) {
return ResolvedImportPath.from(ImportPath.from(path), parameters);
}
private static <T> Condition<Optional<? extends T>> absent() {
return new Condition<Optional<? extends T>>() {
@Override
public boolean matches(final Optional<? extends T> optional) {
return !optional.isPresent();
}
};
}
private static <T> Condition<Optional<? extends T>> elementContained(final T element) {
return new Condition<Optional<? extends T>>() {
@Override
public boolean matches(final Optional<? extends T> optional) {
return optional.isPresent() && optional.get().equals(element);
}
};
}
}