public function prevUntilOperationTests(array $currentNodePaths, $subject, array $expectedNodePaths, array $unexpectedNodePaths)
{
$nodeTypeManager = $this->objectManager->get(NodeTypeManager::class);
$testNodeType = $nodeTypeManager->getNodeType('Neos.ContentRepository.Testing:NodeType');
$rootNode = $this->node->getNode('/');
$nodeA = $rootNode->createNode('a');
$nodeA->createNode('a1', $testNodeType);
$nodeA->createNode('a2');
$nodeA->createNode('a3', $testNodeType);
$nodeA->createNode('a4');
$nodeA->createNode('a5');
$nodeB = $rootNode->createNode('b');
$nodeB->createNode('b1');
$nodeB->createNode('b2', $testNodeType);
$nodeB->createNode('b3');
$nodeB->createNode('b4');
$currentNodes = array();
foreach ($currentNodePaths as $currentNodePath) {
$currentNodes[] = $rootNode->getNode($currentNodePath);
}
if (is_array($subject)) {
$subjectNodes = array();
foreach ($subject as $subjectNodePath) {
$subjectNodes[] = $rootNode->getNode($subjectNodePath);
}
$subject = $subjectNodes;
}
$q = new FlowQuery($currentNodes);
$result = $q->prevUntil($subject)->get();
if ($expectedNodePaths === array() && $unexpectedNodePaths === array()) {
$this->assertEmpty($result);
} else {
foreach ($expectedNodePaths as $expectedNodePath) {
$expectedNode = $rootNode->getNode($expectedNodePath);
if (!in_array($expectedNode, $result)) {
$this->fail(sprintf('Expected result to contain node "%s"', $expectedNodePath));
}
}
foreach ($unexpectedNodePaths as $unexpectedNodePath) {
$unexpectedNode = $rootNode->getNode($unexpectedNodePath);
if (in_array($unexpectedNode, $result)) {
$this->fail(sprintf('Expected result not to contain node "%s"', $unexpectedNodePath));
}
}
}
}