blob: ebe40af5b4ffb70de272e199694f7573e2756fa4 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.tinkerpop.gremlin.process.traversal.step.util;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
import org.junit.Test;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.contains;
import static org.hamcrest.core.IsInstanceOf.instanceOf;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
/**
* @author Stephen Mallette (http://stephen.genoprime.com)
*/
public class ParametersTest {
@Test
public void shouldGetKeyValuesEmpty() {
final Parameters parameters = new Parameters();
assertThat(Arrays.equals(parameters.getKeyValues(mock(Traverser.Admin.class)), new Object[0]), is(true));
}
@Test
public void shouldGetKeyValues() {
final Parameters parameters = new Parameters();
parameters.set(null, "a", "axe", "b", "bat", "c", "cat");
final Object[] params = parameters.getKeyValues(mock(Traverser.Admin.class));
assertEquals(6, params.length);
assertThat(Arrays.equals(new Object[] {"a", "axe", "b", "bat", "c", "cat"}, params), is(true));
}
@Test
public void shouldGetKeyValuesIgnoringSomeKeys() {
final Parameters parameters = new Parameters();
parameters.set(null, "a", "axe", "b", "bat", "c", "cat");
final Object[] params = parameters.getKeyValues(mock(Traverser.Admin.class), "b");
assertEquals(4, params.length);
assertThat(Arrays.equals(new Object[] {"a", "axe", "c", "cat"}, params), is(true));
}
@Test
public void shouldGetUsingTraverserOverload() {
final Parameters parameters = new Parameters();
parameters.set(null, "a", "axe", "b", "bat", "c", "cat");
assertEquals(Collections.singletonList("axe"), parameters.get(mock(Traverser.Admin.class), "a", () -> "x"));
assertEquals(Collections.singletonList("bat"), parameters.get(mock(Traverser.Admin.class), "b", () -> "x"));
assertEquals(Collections.singletonList("cat"), parameters.get(mock(Traverser.Admin.class), "c", () -> "x"));
assertEquals(Collections.singletonList("zebra"), parameters.get(mock(Traverser.Admin.class), "z", () -> "zebra"));
}
@Test
public void shouldGetMultipleUsingTraverserOverload() {
final Parameters parameters = new Parameters();
parameters.set(null, "a", "axe", "a", "ant", "b", "bat", "b", "ball", "c", "cat");
final Map<Object,List<Object>> params = parameters.getRaw();
assertEquals(3, params.size());
assertEquals(Arrays.asList("axe", "ant"), parameters.get(mock(Traverser.Admin.class), "a", () -> "x"));
assertEquals(Arrays.asList("bat", "ball"), parameters.get(mock(Traverser.Admin.class), "b", () -> "x"));
assertEquals(Collections.singletonList("cat"), parameters.get(mock(Traverser.Admin.class), "c", () -> "x"));
assertEquals(Collections.singletonList("zebra"), parameters.get(mock(Traverser.Admin.class), "z", () -> "zebra"));
}
@Test
public void shouldGetRaw() {
final Parameters parameters = new Parameters();
parameters.set(null, "a", "axe", "b", "bat", "c", "cat");
final Map<Object,List<Object>> params = parameters.getRaw();
assertEquals(3, params.size());
assertEquals("axe", params.get("a").get(0));
assertEquals("bat", params.get("b").get(0));
assertEquals("cat", params.get("c").get(0));
}
@Test
public void shouldGetRawWithMulti() {
final Parameters parameters = new Parameters();
parameters.set(null, "a", "axe", "b", "bat", "a", "ant", "c", "cat");
final Map<Object,List<Object>> params = parameters.getRaw();
assertEquals(3, params.size());
assertThat(params.get("a"), contains("axe", "ant"));
assertEquals("bat", params.get("b").get(0));
assertEquals("cat", params.get("c").get(0));
}
@Test
public void shouldGetRawEmptyAndUnmodifiable() {
final Parameters parameters = new Parameters();
final Map<Object,List<Object>> params = parameters.getRaw();
assertEquals(Collections.emptyMap(), params);
}
@Test
public void shouldGetRawExcept() {
final Parameters parameters = new Parameters();
parameters.set(null, "a", "axe", "b", "bat", "c", "cat");
final Map<Object,List<Object>> params = parameters.getRaw("b");
assertEquals(2, params.size());
assertEquals("axe", params.get("a").get(0));
assertEquals("cat", params.get("c").get(0));
}
@Test
public void shouldRemove() {
final Parameters parameters = new Parameters();
parameters.set(null, "a", "axe", "b", "bat", "c", "cat");
final Map<Object,List<Object>> before = parameters.getRaw();
assertEquals(3, before.size());
assertEquals("axe", before.get("a").get(0));
assertEquals("bat", before.get("b").get(0));
assertEquals("cat", before.get("c").get(0));
parameters.remove("b");
final Map<Object,List<Object>> after = parameters.getRaw("b");
assertEquals(2, after.size());
assertEquals("axe", after.get("a").get(0));
assertEquals("cat", after.get("c").get(0));
}
@Test
public void shouldRemoveRefreshTraversalCache() {
final Parameters parameters = new Parameters();
parameters.set(null, "a", "axe", "b", "bat", "c", "cat", "c", mock(Traversal.Admin.class), "t", mock(Traversal.Admin.class));
final Map<Object,List<Object>> before = parameters.getRaw();
assertEquals(4, before.size());
assertEquals(2, parameters.getTraversals().size());
assertEquals("axe", before.get("a").get(0));
assertEquals("bat", before.get("b").get(0));
assertEquals("cat", before.get("c").get(0));
assertThat(before.get("c").get(1), instanceOf(Traversal.Admin.class));
assertThat(before.get("t").get(0), instanceOf(Traversal.Admin.class));
parameters.remove("t");
final Map<Object,List<Object>> afterRemoveT = parameters.getRaw();
assertEquals(3, afterRemoveT.size());
assertEquals(1, parameters.getTraversals().size());
assertEquals("axe", afterRemoveT.get("a").get(0));
assertEquals("bat", afterRemoveT.get("b").get(0));
assertEquals("cat", afterRemoveT.get("c").get(0));
assertThat(afterRemoveT.get("c").get(1), instanceOf(Traversal.Admin.class));
parameters.remove("c");
final Map<Object,List<Object>> afterRemoveC = parameters.getRaw();
assertEquals(2, afterRemoveC.size());
assertEquals(0, parameters.getTraversals().size());
assertEquals("axe", afterRemoveC.get("a").get(0));
assertEquals("bat", afterRemoveC.get("b").get(0));
}
@Test
public void shouldRename() {
final Parameters parameters = new Parameters();
parameters.set(null, "a", "axe", "b", "bat", "c", "cat");
parameters.rename("a", "z");
final Map<Object,List<Object>> before = parameters.getRaw();
assertEquals(3, before.size());
assertEquals("axe", before.get("z").get(0));
assertEquals("bat", before.get("b").get(0));
assertEquals("cat", before.get("c").get(0));
}
@Test
public void shouldContainKey() {
final Parameters parameters = new Parameters();
parameters.set(null, "a", "axe", "b", "bat", "c", "cat");
assertThat(parameters.contains("b"), is(true));
}
@Test
public void shouldNotContainKey() {
final Parameters parameters = new Parameters();
parameters.set(null, "a", "axe", "b", "bat", "c", "cat");
assertThat(parameters.contains("z"), is(false));
}
@Test
public void shouldGetSetMultiple() {
final Parameters parameters = new Parameters();
parameters.set(null, "a", "axe", "a", "ant", "b", "bat", "b", "ball", "c", "cat");
final Map<Object,List<Object>> params = parameters.getRaw();
assertEquals(3, params.size());
assertEquals("axe", params.get("a").get(0));
assertEquals("ant", params.get("a").get(1));
assertEquals("bat", params.get("b").get(0));
assertEquals("ball", params.get("b").get(1));
assertEquals("cat", params.get("c").get(0));
}
@Test
public void shouldGetDefault() {
final Parameters parameters = new Parameters();
parameters.set(null, "a", "axe", "b", "bat", "c", "cat");
assertEquals(Collections.singletonList("axe"), parameters.get("a", () -> "x"));
assertEquals(Collections.singletonList("bat"), parameters.get("b", () -> "x"));
assertEquals(Collections.singletonList("cat"), parameters.get("c", () -> "x"));
assertEquals(Collections.singletonList("zebra"), parameters.get("z", () -> "zebra"));
}
@Test
public void shouldClone() {
final Parameters parameters = new Parameters();
parameters.set(null, "a", "axe", "a", "ant", "b", "bat", "b", "ball", "c", "cat");
final Parameters parametersClone = parameters.clone();
assertEquals(parameters.getRaw(), parametersClone.getRaw());
assertEquals(parameters.getTraversals(), parametersClone.getTraversals());
}
@Test
public void shouldCloneWithTraversals() {
final Traversal.Admin t = mock(Traversal.Admin.class);
when(t.clone()).thenReturn(t);
final Parameters parameters = new Parameters();
parameters.set(null, "a", "axe", "a", "ant", "b", "bat", "b", "ball", "c", "cat", "t", t);
final Parameters parametersClone = parameters.clone();
assertEquals(parameters.getRaw(), parametersClone.getRaw());
assertEquals(parameters.getTraversals().size(), parametersClone.getTraversals().size());
}
@Test
public void shouldBeDifferent() {
final Parameters parameters = new Parameters();
parameters.set(null, "a", "axe", "a", "ant", "b", "bat", "b", "ball", "c", "cat");
final Parameters parametersDifferent = new Parameters();
parametersDifferent.set(null, "a", "ant", "a", "axe", "b", "bat", "b", "ball", "c", "cat");
assertNotEquals(parameters.getRaw(), parametersDifferent.getRaw());
}
@Test
public void shouldGetNoTraversals() {
final Parameters parameters = new Parameters();
parameters.set(null, "a", "axe", "a", "ant", "b", "bat", "b", "ball", "c", "cat");
assertEquals(Collections.emptyList(), parameters.getTraversals());
}
@Test
public void shouldGetTraversals() {
final Parameters parameters = new Parameters();
parameters.set(null, "a", "axe", "a", "ant", "b", "bat", "b", "ball", "c", "cat", "t", __.outE("knows"));
assertEquals(Collections.singletonList(__.outE("knows")), parameters.getTraversals());
}
@Test
public void shouldIntegrateTraversals() {
final TraversalParent mock = mock(TraversalParent.class);
final Parameters parameters = new Parameters();
// the mock can return nothing of consequence as the return isn't used in this case. we just need to
// validate that the method gets called as a result of calls to set/integrateTraversals()
when(mock.integrateChild(__.outE("knows").asAdmin())).thenReturn(null);
parameters.set(mock, "a", "axe", "a", "ant", "b", "bat", "b", "ball", "c", "cat", "t", __.outE("knows"));
verify(mock).integrateChild(__.outE("knows").asAdmin());
}
}