| /* |
| * 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.map; |
| |
| import org.apache.tinkerpop.gremlin.AbstractGremlinTest; |
| import org.apache.tinkerpop.gremlin.FeatureRequirement; |
| import org.apache.tinkerpop.gremlin.LoadGraphWith; |
| import org.apache.tinkerpop.gremlin.process.GremlinProcessRunner; |
| import org.apache.tinkerpop.gremlin.process.traversal.Traversal; |
| import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__; |
| import org.apache.tinkerpop.gremlin.structure.Graph; |
| import org.apache.tinkerpop.gremlin.structure.T; |
| import org.apache.tinkerpop.gremlin.structure.Vertex; |
| import org.apache.tinkerpop.gremlin.structure.VertexProperty; |
| import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils; |
| import org.junit.Test; |
| import org.junit.runner.RunWith; |
| |
| import java.util.List; |
| |
| import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN; |
| import static org.hamcrest.Matchers.containsInAnyOrder; |
| import static org.junit.Assert.*; |
| |
| /** |
| * @author Marko A. Rodriguez (http://markorodriguez.com) |
| */ |
| @RunWith(GremlinProcessRunner.class) |
| public abstract class AddVertexTest extends AbstractGremlinTest { |
| |
| public abstract Traversal<Vertex, Vertex> get_g_VX1X_addVXanimalX_propertyXage_selectXaX_byXageXX_propertyXname_puppyX(final Object v1Id); |
| |
| public abstract Traversal<Vertex, Vertex> get_g_V_addVXanimalX_propertyXage_0X(); |
| |
| public abstract Traversal<Vertex, Vertex> get_g_addVXpersonX_propertyXname_stephenX(); |
| |
| public abstract Traversal<Vertex, Vertex> get_g_addVXpersonX_propertyXname_stephenX_propertyXname_stephenmX(); |
| |
| public abstract Traversal<Vertex, Vertex> get_g_addVXpersonX_propertyXsingle_name_stephenX_propertyXsingle_name_stephenmX(); |
| |
| public abstract Traversal<Vertex, Vertex> get_g_addVXpersonX_propertyXsingle_name_stephenX_propertyXsingle_name_stephenm_since_2010X(); |
| |
| public abstract Traversal<Vertex, Vertex> get_g_V_hasXname_markoX_propertyXfriendWeight_outEXknowsX_weight_sum__acl_privateX(); |
| |
| public abstract Traversal<Vertex, Vertex> get_g_addVXanimalX_propertyXname_mateoX_propertyXname_gateoX_propertyXname_cateoX_propertyXage_5X(); |
| |
| public abstract Traversal<Vertex, Vertex> get_g_V_addVXanimalX_propertyXname_valuesXnameXX_propertyXname_an_animalX_propertyXvaluesXnameX_labelX(); |
| |
| // 3.0.0 DEPRECATIONS |
| @Deprecated |
| public abstract Traversal<Vertex, Vertex> get_g_V_addVXlabel_animal_age_0X(); |
| |
| @Deprecated |
| public abstract Traversal<Vertex, Vertex> get_g_addVXlabel_person_name_stephenX(); |
| |
| @Test |
| @LoadGraphWith(MODERN) |
| @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_VERTICES) |
| @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_PROPERTY) |
| public void g_V_addVXanimalX_propertyXage_selectXaX_byXageXX_propertyXname_puppyX() { |
| final Traversal<Vertex, Vertex> traversal = get_g_VX1X_addVXanimalX_propertyXage_selectXaX_byXageXX_propertyXname_puppyX(convertToVertexId(graph, "marko")); |
| printTraversalForm(traversal); |
| final Vertex vertex = traversal.next(); |
| assertEquals("animal", vertex.label()); |
| assertEquals(29, vertex.<Integer>value("age").intValue()); |
| assertEquals("puppy", vertex.<String>value("name")); |
| assertFalse(traversal.hasNext()); |
| assertEquals(7, IteratorUtils.count(g.V())); |
| } |
| |
| |
| @Test |
| @LoadGraphWith(MODERN) |
| @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_VERTICES) |
| @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_PROPERTY) |
| public void g_V_addVXanimalX_propertyXage_0X() { |
| final Traversal<Vertex, Vertex> traversal = get_g_V_addVXanimalX_propertyXage_0X(); |
| printTraversalForm(traversal); |
| int count = 0; |
| while (traversal.hasNext()) { |
| final Vertex vertex = traversal.next(); |
| assertEquals("animal", vertex.label()); |
| assertEquals(0, vertex.<Integer>value("age").intValue()); |
| count++; |
| } |
| assertEquals(6, count); |
| assertEquals(12, IteratorUtils.count(g.V())); |
| |
| } |
| |
| @Test |
| @LoadGraphWith(MODERN) |
| @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_VERTICES) |
| @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_PROPERTY) |
| public void g_addVXpersonX_propertyXname_stephenX() { |
| final Traversal<Vertex, Vertex> traversal = get_g_addVXpersonX_propertyXname_stephenX(); |
| printTraversalForm(traversal); |
| final Vertex stephen = traversal.next(); |
| assertFalse(traversal.hasNext()); |
| assertEquals("person", stephen.label()); |
| assertEquals("stephen", stephen.value("name")); |
| assertEquals(1, IteratorUtils.count(stephen.properties())); |
| assertEquals(7, IteratorUtils.count(g.V())); |
| } |
| |
| @Test |
| @LoadGraphWith(MODERN) |
| @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_VERTICES) |
| @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_PROPERTY) |
| @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_MULTI_PROPERTIES) |
| public void g_addVXpersonX_propertyXname_stephenX_propertyXname_stephenmX() { |
| final Traversal<Vertex, Vertex> traversal = get_g_addVXpersonX_propertyXname_stephenX_propertyXname_stephenmX(); |
| printTraversalForm(traversal); |
| final Vertex stephen = traversal.next(); |
| assertFalse(traversal.hasNext()); |
| assertEquals("person", stephen.label()); |
| assertThat((List<String>) IteratorUtils.asList(stephen.values("name")), containsInAnyOrder("stephen", "stephenm")); |
| assertEquals(2, IteratorUtils.count(stephen.properties())); |
| assertEquals(7, IteratorUtils.count(g.V())); |
| } |
| |
| @Test |
| @LoadGraphWith(MODERN) |
| @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_VERTICES) |
| @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_PROPERTY) |
| public void g_addVXpersonX_propertyXsingle_name_stephenX_propertyXsingle_name_stephenmX() { |
| final Traversal<Vertex, Vertex> traversal = get_g_addVXpersonX_propertyXsingle_name_stephenX_propertyXsingle_name_stephenmX(); |
| printTraversalForm(traversal); |
| final Vertex stephen = traversal.next(); |
| assertFalse(traversal.hasNext()); |
| assertEquals("person", stephen.label()); |
| assertEquals("stephenm", stephen.value("name")); |
| assertEquals(1, IteratorUtils.count(stephen.properties())); |
| assertEquals(7, IteratorUtils.count(g.V())); |
| } |
| |
| @Test |
| @LoadGraphWith(MODERN) |
| @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_VERTICES) |
| @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_PROPERTY) |
| @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_MULTI_PROPERTIES) |
| public void g_addVXpersonX_propertyXsingle_name_stephenX_propertyXsingle_name_stephenm_since_2010X() { |
| final Traversal<Vertex, Vertex> traversal = get_g_addVXpersonX_propertyXsingle_name_stephenX_propertyXsingle_name_stephenm_since_2010X(); |
| printTraversalForm(traversal); |
| final Vertex stephen = traversal.next(); |
| assertFalse(traversal.hasNext()); |
| assertEquals("person", stephen.label()); |
| assertEquals("stephenm", stephen.value("name")); |
| assertEquals(2010, Integer.parseInt(stephen.property("name").value("since").toString())); |
| assertEquals(1, IteratorUtils.count(stephen.property("name").properties())); |
| assertEquals(1, IteratorUtils.count(stephen.properties())); |
| assertEquals(7, IteratorUtils.count(g.V())); |
| } |
| |
| @Test |
| @LoadGraphWith(MODERN) |
| @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_VERTICES) |
| @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_PROPERTY) |
| @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_META_PROPERTIES) |
| public void g_V_hasXname_markoX_addVXmetaPersonX_propertyXname_nameX_propertyXfriendWeight_outEXknowsX_weight_sum__acl_privateX() { |
| final Traversal<Vertex, Vertex> traversal = get_g_V_hasXname_markoX_propertyXfriendWeight_outEXknowsX_weight_sum__acl_privateX(); |
| printTraversalForm(traversal); |
| final Vertex marko = traversal.next(); |
| assertFalse(traversal.hasNext()); |
| assertEquals("person", marko.label()); |
| assertEquals("marko", marko.value("name")); |
| assertEquals(1.5, marko.value("friendWeight"), 0.01); |
| assertEquals("private", marko.property("friendWeight").value("acl")); |
| assertEquals(3, IteratorUtils.count(marko.properties())); |
| assertEquals(1, IteratorUtils.count(marko.property("friendWeight").properties())); |
| } |
| |
| @Test |
| @LoadGraphWith(MODERN) |
| @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_VERTICES) |
| @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_PROPERTY) |
| @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_MULTI_PROPERTIES) |
| public void g_addVXanimalX_propertyXname_mateoX_propertyXname_gateoX_propertyXname_cateoX_propertyXage_5X() { |
| final Traversal<Vertex, Vertex> traversal = get_g_addVXanimalX_propertyXname_mateoX_propertyXname_gateoX_propertyXname_cateoX_propertyXage_5X(); |
| printTraversalForm(traversal); |
| final Vertex mateo = traversal.next(); |
| assertFalse(traversal.hasNext()); |
| assertEquals("animal", mateo.label()); |
| assertEquals(3, IteratorUtils.count(mateo.properties("name"))); |
| mateo.values("name").forEachRemaining(name -> { |
| assertTrue(name.equals("mateo") || name.equals("cateo") || name.equals("gateo")); |
| }); |
| assertEquals(5, ((Integer) mateo.value("age")).intValue()); |
| } |
| |
| @Test |
| @LoadGraphWith(MODERN) |
| @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_VERTICES) |
| @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_PROPERTY) |
| @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_MULTI_PROPERTIES) |
| public void g_V_addVXanimalX_propertyXname_valuesXnameXX_propertyXname_an_animalX_propertyXvaluesXnameX_labelX() { |
| final Traversal<Vertex, Vertex> traversal = get_g_V_addVXanimalX_propertyXname_valuesXnameXX_propertyXname_an_animalX_propertyXvaluesXnameX_labelX(); |
| printTraversalForm(traversal); |
| while (traversal.hasNext()) { |
| final Vertex vertex = traversal.next(); |
| assertEquals("animal", vertex.label()); |
| assertEquals(2, IteratorUtils.count(vertex.properties("name"))); |
| List<String> names = IteratorUtils.asList(vertex.values("name")); |
| assertEquals(2, names.size()); |
| assertTrue(names.contains("an animal")); |
| assertTrue(names.contains("marko") || names.contains("vadas") || names.contains("josh") || names.contains("lop") || names.contains("ripple") || names.contains("peter")); |
| if (names.contains("marko")) { |
| assertEquals("person", vertex.value("marko")); |
| } else if (names.contains("vadas")) { |
| assertEquals("person", vertex.value("vadas")); |
| } else if (names.contains("josh")) { |
| assertEquals("person", vertex.value("josh")); |
| } else if (names.contains("ripple")) { |
| assertEquals("software", vertex.value("ripple")); |
| } else if (names.contains("lop")) { |
| assertEquals("software", vertex.value("lop")); |
| } else if (names.contains("peter")) { |
| assertEquals("person", vertex.value("peter")); |
| } else { |
| throw new IllegalStateException("This state should not have been reached"); |
| } |
| } |
| } |
| |
| ///// |
| |
| @Test |
| @LoadGraphWith(MODERN) |
| @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_VERTICES) |
| @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_PROPERTY) |
| public void g_V_addVXlabel_animal_age_0X() { |
| final Traversal<Vertex, Vertex> traversal = get_g_V_addVXlabel_animal_age_0X(); |
| printTraversalForm(traversal); |
| int count = 0; |
| while (traversal.hasNext()) { |
| final Vertex vertex = traversal.next(); |
| assertEquals("animal", vertex.label()); |
| assertEquals(0, vertex.<Integer>value("age").intValue()); |
| count++; |
| } |
| assertEquals(6, count); |
| assertEquals(12, IteratorUtils.count(g.V())); |
| |
| } |
| |
| @Test |
| @LoadGraphWith(MODERN) |
| @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_VERTICES) |
| @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_PROPERTY) |
| public void g_addVXlabel_person_name_stephenX() { |
| final Traversal<Vertex, Vertex> traversal = get_g_addVXlabel_person_name_stephenX(); |
| printTraversalForm(traversal); |
| final Vertex stephen = traversal.next(); |
| assertFalse(traversal.hasNext()); |
| assertEquals("person", stephen.label()); |
| assertEquals("stephen", stephen.value("name")); |
| assertEquals(1, IteratorUtils.count(stephen.properties())); |
| assertEquals(7, IteratorUtils.count(g.V())); |
| } |
| |
| |
| public static class Traversals extends AddVertexTest { |
| |
| @Override |
| public Traversal<Vertex, Vertex> get_g_VX1X_addVXanimalX_propertyXage_selectXaX_byXageXX_propertyXname_puppyX(final Object v1Id) { |
| return g.V(v1Id).as("a").addV("animal").property("age", __.select("a").by("age")).property("name", "puppy"); |
| } |
| |
| @Override |
| public Traversal<Vertex, Vertex> get_g_V_addVXanimalX_propertyXage_0X() { |
| return g.V().addV("animal").property("age", 0); |
| } |
| |
| @Override |
| public Traversal<Vertex, Vertex> get_g_addVXpersonX_propertyXname_stephenX() { |
| return g.addV("person").property("name", "stephen"); |
| } |
| |
| @Override |
| public Traversal<Vertex, Vertex> get_g_addVXpersonX_propertyXname_stephenX_propertyXname_stephenmX() { |
| return g.addV("person").property("name", "stephen").property("name", "stephenm"); |
| } |
| |
| @Override |
| public Traversal<Vertex, Vertex> get_g_addVXpersonX_propertyXsingle_name_stephenX_propertyXsingle_name_stephenmX() { |
| return g.addV("person").property(VertexProperty.Cardinality.single, "name", "stephen").property(VertexProperty.Cardinality.single, "name", "stephenm"); |
| } |
| |
| @Override |
| public Traversal<Vertex, Vertex> get_g_addVXpersonX_propertyXsingle_name_stephenX_propertyXsingle_name_stephenm_since_2010X() { |
| return g.addV("person").property(VertexProperty.Cardinality.single, "name", "stephen").property(VertexProperty.Cardinality.single, "name", "stephenm", "since", 2010); |
| } |
| |
| @Override |
| public Traversal<Vertex, Vertex> get_g_V_hasXname_markoX_propertyXfriendWeight_outEXknowsX_weight_sum__acl_privateX() { |
| return g.V().has("name", "marko").property("friendWeight", __.outE("knows").values("weight").sum(), "acl", "private"); |
| } |
| |
| @Override |
| public Traversal<Vertex, Vertex> get_g_addVXanimalX_propertyXname_mateoX_propertyXname_gateoX_propertyXname_cateoX_propertyXage_5X() { |
| return g.addV("animal").property("name", "mateo").property("name", "gateo").property("name", "cateo").property("age", 5); |
| } |
| |
| @Override |
| public Traversal<Vertex, Vertex> get_g_V_addVXanimalX_propertyXname_valuesXnameXX_propertyXname_an_animalX_propertyXvaluesXnameX_labelX() { |
| return g.V().addV("animal").property("name", __.values("name")).property("name", "an animal").property(__.values("name"), __.label()); |
| } |
| |
| @Override |
| public Traversal<Vertex, Vertex> get_g_V_addVXlabel_animal_age_0X() { |
| return g.V().addV(T.label, "animal", "age", 0); |
| } |
| |
| @Override |
| public Traversal<Vertex, Vertex> get_g_addVXlabel_person_name_stephenX() { |
| return g.addV(T.label, "person", "name", "stephen"); |
| } |
| } |
| } |