blob: 99f2de022b95a603e5292a745efb80f1cbfa5458 [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.structure.io;
import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Property;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.structure.VertexProperty;
import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
import java.util.Iterator;
import java.util.List;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assume.assumeThat;
/**
* @author Stephen Mallette (http://stephen.genoprime.com)
*/
public abstract class AbstractCompatibilityTest {
protected final Model model = Model.instance();
public abstract Compatibility getCompatibility();
protected void assumeCompatibility(final String resource) {
final Model.Entry e = model.find(resource).orElseThrow(() -> new IllegalStateException("Could not find model"));
assumeThat("Test model is not compatible with IO - see comments in Model for details", e.isCompatibleWith(getCompatibility()), is(true));
}
protected <T> T findModelEntryObject(final String resourceName) {
return model.find(resourceName).orElseThrow(() -> new IllegalStateException("Could not find requested model entry")).getObject();
}
protected void assertVertex(final Vertex expected, final Vertex actual) {
assertEquals(expected.id(), actual.id());
assertEquals(expected.label(), actual.label());
assertEquals(IteratorUtils.count(expected.properties()), IteratorUtils.count(actual.properties()));
for (String k : expected.keys()) {
final Iterator<VertexProperty<Object>> expectedVps = expected.properties(k);
final List<VertexProperty<Object>> actualVps = IteratorUtils.list(actual.properties(k));
while (expectedVps.hasNext()) {
final VertexProperty expectedVp = expectedVps.next();
final VertexProperty<Object> found = actualVps.stream()
.filter(vp -> vp.id().equals(expectedVp.id()))
.findFirst()
.orElseThrow(() -> new RuntimeException("Could not find VertexProperty for " + expectedVp.id()));
assertVertexProperty(expectedVp, found);
}
}
}
protected void assertEdge(final Edge expected, final Edge actual) {
assertEquals(expected.id(), actual.id());
assertEquals(expected.label(), actual.label());
assertEquals(IteratorUtils.count(expected.properties()), IteratorUtils.count(actual.properties()));
assertEquals(expected.inVertex().id(), actual.inVertex().id());
assertEquals(expected.outVertex().id(), actual.outVertex().id());
assertEquals(expected.inVertex().label(), actual.inVertex().label());
assertEquals(expected.outVertex().label(), actual.outVertex().label());
final Iterator<Property<Object>> itty = expected.properties();
while(itty.hasNext()) {
final Property p = itty.next();
assertProperty(p, actual.property(p.key()));
}
}
protected void assertVertexProperty(final VertexProperty expected, final VertexProperty actual) {
assertEquals(expected.id(), actual.id());
assertEquals(expected.label(), actual.label());
assertEquals(IteratorUtils.count(expected.properties()), IteratorUtils.count(actual.properties()));
final Iterator<Property> itty = expected.properties();
while(itty.hasNext()) {
final Property p = itty.next();
assertProperty(p, actual.property(p.key()));
}
}
protected void assertProperty(final Property expected, final Property actual) {
assertEquals(expected.key(), actual.key());
assertEquals(expected.value(), actual.value());
}
}