/*!
@header FTModifyGraphTEST
@abstract Module of FT
@availability OS X, GNUstep
@copyright 2004, 2005 Free Software Foundation, Inc.
Author: Oliver Langer
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-------------------------------------------------------------------------
Modification history
03.08.05 ola initial version
-------------------------------------------------------------------------
*/
#include
@implementation FTModifyGraphTEST
- testGraphModification {
id graphManager;
id graph;
id graphId;
id nid1,nid2,nid3,ne1, ne2;
id objectToIdMapper;
id graphIdMapper;
id n1,n2,n3;
id edge;
id transaction;
id nodeIterator;
BOOL gotException;
NSLog( @"FTModifyGraphTEST::testGraphModification: BEGINNING...." );
EC_AUTORELEASEPOOL_BEGIN
objectToIdMapper = [session defaultObjectToIdMapper];
graphManager = [session graphManager];
NSLog( @"Now creating graph..." );
transaction = [session beginTransactionWithParent: nil
withSettings: nil];
graphId = [objectToIdMapper mapObject: @"modifyTestGraph"];
graph = [graphManager createGraphWithId: graphId];
ECAssertTrue( nil != graph, @"Graph creation failed!" );
NSLog( @"FTModifyGraphTEST::Now creating some nodes..." );
graphIdMapper = [[graph objectToIdMapper] retain];
ECAssertTrue( nil != graphIdMapper,
@"getting objectToIdMapper of graph FAILED" );
NSLog( @"FTModifyGraphTEST::Creating nodes and relationships..." );
nid1 = [graphIdMapper mapObject: @"fatherNode"];
nid2 = [graphIdMapper mapObject: @"child_1_Node"];
nid3 = [graphIdMapper mapObject: @"child_2_Node"];
ne1 = [graphIdMapper mapObject: @"edge1"];
ne2 = [graphIdMapper mapObject: @"edge2"];
n1 = [graph createNodeWithId: nid1];
n2 = [graph createNodeWithId: nid2];
n3 = [graph createNodeWithId: nid3];
NSLog( @"FTModifyGraphTEST::Created nodes n1, n2, n3" );
edge = [n1 createAndAppendEdgeWithId: ne1 withTargetNode: n2];
edge = [n1 createAndAppendEdgeWithId: ne2 withTargetNode: n3];
NSLog( @"FTModifyGraphTEST::Performing a commit..." );
[transaction commit];
NSLog( @"Now iterating through all nodes..." );
nodeIterator = [graph nodeIterator];
while( [nodeIterator hasNext] ) {
id node = [nodeIterator next];
NSLog( @">>%@", [node nodeId] );
}
NSLog( @"FTModifyGraphTEST::Graph created! Now trying to read the graph" );
[graph close];
graphId = [objectToIdMapper mapObject: @"modifyTestGraph"];
graph = [graphManager graphWithId: graphId];
NSLog( @"FTModifyGraphTEST::Got graph! Now removing edge to node "\
"child_1_Node..." );
transaction = [session beginTransactionWithParent: nil
withSettings: nil];
n1 = [graph nodeWithId: nid1];
[n1 removeAllOutgoingNodesWithId: nid2];
nodeIterator = [n1 outgoingNodes];
while( [nodeIterator hasNext] ) {
id node = [nodeIterator next];
NSLog( @">>%@", [node nodeId] );
}
[transaction commit];
NSLog( @"FTModifyGraphTEST::Closing Graph..." );
[graph close];
/**
* Now we check the resulting graph
*/
NSLog( @"FTModifyGraphTEST::Checking the resulting graph..." );
graphId = [objectToIdMapper mapObject: @"modifyTestGraph"];
graph = [graphManager graphWithId: graphId];
NSLog( @"FTModifyGraphTEST::Got graph! Now reading edges..." );
n1 = [graph nodeWithId: nid1];
nodeIterator = [n1 outgoingNodes];
ECAssertTrue( [nodeIterator hasNext], @"Unable to get child node 2!" );
n3 = [nodeIterator next];
ECAssertTrue( YES == [[n3 nodeId] isEqual: nid3], @"Expected node n2!" );
ECAssertTrue( NO == [nodeIterator hasNext], @"Father node should have ONE "\
"successor only!" );
NSLog( @"FTModifyGraphTEST: Now asking for incoming nodes of node n3..."\
"(father node)" );
nodeIterator = [n3 incomingNodes];
while( [nodeIterator hasNext] ) {
id node = [nodeIterator next];
NSLog( @">>%@", [node nodeId] );
}
NSLog( @"FTModifyGraphTEST: Now asking for incoming nodes of node n2..."\
"(none...)" );
nodeIterator = [n2 incomingNodes];
while( [nodeIterator hasNext] ) {
id node = [nodeIterator next];
NSLog( @">>%@", [node nodeId] );
}
NSLog( @"Now iterating through all nodes..." );
nodeIterator = [graph nodeIterator];
while( [nodeIterator hasNext] ) {
id node = [nodeIterator next];
NSLog( @">>%@", [node nodeId] );
}
[graph close];
NSLog( @"Now testing deletion of a node: ");
graph = [graphManager graphWithId: graphId];
NSLog( @"Removing node child_1_Node..." );
transaction = [session beginTransactionWithParent: nil
withSettings: nil];
n2 = [graph nodeWithId: nid2];
[graph removeNode: n2];
[transaction commit];
NSLog( @"Now iterating through all nodes..." );
nodeIterator = [graph nodeIterator];
while( [nodeIterator hasNext] ) {
id node = [nodeIterator next];
NSLog( @">>%@", [node nodeId] );
}
NSLog( @"Trying to remove child_2_Node which should fail since there "\
"are still incoming links..." );
transaction = [session beginTransactionWithParent: nil
withSettings: nil];
n3 = [graph nodeWithId: nid3];
gotException = NO;
NS_DURING
[graph removeNode: n3];
NS_HANDLER
NSLog( @"Got EXPECTED exception: %@", localException );
gotException = YES;
NS_ENDHANDLER
ECAssertTrue( gotException, @"Remove operation for node child_2_Node did "\
"NOT throw an exception but it should since this node has incoming "\
"links..." );
[transaction commit];
[graph close];
EC_AUTORELEASEPOOL_END
NSLog( @"FTModifyGraphTEST::testGraphModification: FINISHED" );
return self;
}
@end