/* * ModeShape (http://www.modeshape.org) * * Licensed 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.modeshape.sequencer.text; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.modeshape.jcr.api.JcrConstants.NT_UNSTRUCTURED; import static org.modeshape.sequencer.text.TextSequencerLexicon.COLUMN; import static org.modeshape.sequencer.text.TextSequencerLexicon.DATA; import static org.modeshape.sequencer.text.TextSequencerLexicon.ROW; import java.util.ArrayList; import java.util.List; import javax.jcr.Node; import javax.jcr.RepositoryException; import javax.jcr.nodetype.NodeType; import org.modeshape.jcr.sequencer.AbstractSequencerTest; /** * Base test class for the implementations for {@link AbstractTextSequencer} * * @author Horia Chiorean */ public abstract class AbstractTextSequencerTest extends AbstractSequencerTest { protected static final String[] TEST_COLUMNS = new String[] {"foo", "bar", "baz"}; protected void assertRowsWithCustomRowFactory( String sequencedRootPath ) throws Exception { final int ROW_COUNT = 6; Node outputNode = getOutputNode(rootNode, sequencedRootPath); assertNotNull(outputNode); assertEquals(ROW_COUNT, outputNode.getNodes().getSize()); for (int rowIndex = 1; rowIndex <= ROW_COUNT; rowIndex++) { Node row = assertRow(outputNode, rowIndex, new String[]{}); String[] expectedColumns = TEST_COLUMNS; for (int colIndex = 0; colIndex < expectedColumns.length; colIndex++) { assertEquals(expectedColumns[colIndex], row.getProperty(DATA + colIndex).getString()); } } } protected void assertFileWithMissingRecords( String filePath ) throws Exception { final int ROW_COUNT = 6; Node outputNode = getOutputNode(rootNode, filePath); assertNotNull(outputNode); assertEquals(ROW_COUNT, outputNode.getNodes().getSize()); for (int rowIndex = 1; rowIndex <= ROW_COUNT; rowIndex++) { if (rowIndex == 3) { assertRow(outputNode, rowIndex, new String[] {"foo"}); } else { assertRow(outputNode, rowIndex, TEST_COLUMNS); } } } protected void assertRows( String rootoutputNodePath, int rowsCount, String[] expectedColumnData ) throws Exception { Node outputNode = getOutputNode(rootNode, rootoutputNodePath); assertNotNull(outputNode); assertEquals(rowsCount, outputNode.getNodes().getSize()); for (int rowIndex = 1; rowIndex <= rowsCount; rowIndex++) { assertRow(outputNode, rowIndex, expectedColumnData); } } protected Node assertRow( Node rootoutputNode, int index, String[] expectedColumnData) throws Exception { Node row = (index == 1) ? rootoutputNode.getNode(ROW) : rootoutputNode.getNode(ROW + "[" + index + "]"); assertEquals(NT_UNSTRUCTURED, row.getPrimaryNodeType().getName()); assertEquals(expectedColumnData.length, row.getNodes().getSize()); for (int colIndex = 0; colIndex < expectedColumnData.length; colIndex++) { assertColumn(row, colIndex, expectedColumnData[colIndex]); } return row; } protected void assertColumn( Node row, int index, String data ) throws RepositoryException { Node column = row.getNode("text:column[" + (index + 1) + "]"); assertEquals(NT_UNSTRUCTURED, column.getPrimaryNodeType().getName()); List<String> mixinNames = new ArrayList<String>(); for (NodeType mixinType : column.getMixinNodeTypes()) { mixinNames.add(mixinType.getName()); } assertTrue(mixinNames.contains(COLUMN)); assertEquals(data, column.getProperty(DATA).getString()); } }