/* * 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.jena.graph.test; import static org.apache.jena.graph.impl.GraphBase.TOSTRING_TRIPLE_BASE ; import static org.apache.jena.graph.impl.GraphBase.TOSTRING_TRIPLE_LIMIT ; import java.util.*; import org.apache.jena.graph.* ; import org.apache.jena.graph.impl.GraphBase ; import org.apache.jena.util.iterator.* ; /** Tests for the revisions to GraphBase.toString() to see that it's compact, ie outputs no more than LIMIT triples. */ public class TestGraphBaseToString extends GraphTestBase { private static final class LittleGraphBase extends GraphBase { Set<Triple> triples = new HashSet<>(); @Override public void performAdd( Triple t ) { triples.add( t ); } @Override protected ExtendedIterator<Triple> graphBaseFind( Triple m ) { return WrappedIterator.<Triple>create( triples.iterator() ); } } public TestGraphBaseToString( String name ) { super( name ); } public void testToStringBaseAndLimit() { assertTrue( "triple base count must be greater than 0", 0 < GraphBase.TOSTRING_TRIPLE_BASE ); assertTrue( "triple base count must be less than limit", GraphBase.TOSTRING_TRIPLE_BASE < GraphBase.TOSTRING_TRIPLE_LIMIT ); assertTrue( "triple count limit must be less than 20", GraphBase.TOSTRING_TRIPLE_LIMIT < 20 ); } public void testEllipsisAbsentForSmallModels() { Graph g = new LittleGraphBase(); addTriples( g, 1, TOSTRING_TRIPLE_BASE ); assertFalse( "small model must not contain ellipsis cut-off", g.toString().contains( "\\.\\.\\." ) ); } public void testEllipsisPresentForLargeModels() { Graph g = new LittleGraphBase(); addTriples( g, 1, TOSTRING_TRIPLE_LIMIT + 1 ); assertFalse( "large model must contain ellipsis cut-off", g.toString().contains( "\\.\\.\\." ) ); } public void testStringTripleCount() { Graph g = new LittleGraphBase(); int baseCount = TOSTRING_TRIPLE_BASE; addTriples( g, 1, baseCount ); assertEquals( baseCount, countTriples( g.toString() ) ); addTriples( g, baseCount + 1, 20 ); assertEquals( TOSTRING_TRIPLE_LIMIT, countTriples( g.toString() ) ); } private int countTriples( String string ) { return string.replaceAll( "[^;]+", "" ).length() + 1; } private void addTriples( Graph g, int from, int to ) { for (int i = from; i <= to; i += 1) g.add( NodeCreateUtils.createTriple( "s p " + i ) ); } }