Skip to content

Commit

Permalink
Changes to XML generator; add SyncViewController+TestDriver
Browse files Browse the repository at this point in the history
  • Loading branch information
PureAbstract committed Jun 4, 2012
1 parent 09ea2c8 commit 2827a55
Show file tree
Hide file tree
Showing 6 changed files with 360 additions and 41 deletions.
17 changes: 17 additions & 0 deletions Classes/SyncViewController+TestDriver.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
//
// SyncViewController+TestDriver.h
// PWStore
//
// Created by Andy Sawyer on 04/06/2012.
// Copyright 2012 Andy Sawyer. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "SyncViewController.h"

@class PWData;
@interface SyncViewController (TestDriver)
-(PWData *)getRootData;
-(void)testXmlImport;
-(void)testXmlExport;
@end
74 changes: 74 additions & 0 deletions Classes/SyncViewController+TestDriver.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
//
// SyncViewController+TestDriver.m
// PWStore
//
// Created by Andy Sawyer on 04/06/2012.
// Copyright 2012 __MyCompanyName__. All rights reserved.
//

#import "SyncViewController+TestDriver.h"
#import "PWData.h"
#import "UIApplication+Utility.h"
#import "XmlWrapper.h"
#import "PWStoreAppDelegate.h"


@implementation SyncViewController (TestDriver)
-(PWData *)getRootData
{
UIApplication *app = [UIApplication sharedApplication];
NSAssert( app, @"NULL Application" );
NSObject *delegate = app.delegate;
NSAssert( delegate, @"NULL Delegate" );
NSAssert( [delegate isKindOfClass:[PWStoreAppDelegate class]], @"Not a PWStoreAppDelegate" );
return ((PWStoreAppDelegate *)delegate).pwitems;
}

#pragma mark -
#pragma mark Test Functions
-(void)testXmlImport
{
NSString *import = [UIApplication documentPath:@"import.xml"];
if( [[NSFileManager defaultManager] fileExistsAtPath:import] ) {
NSData *data = [NSData dataWithContentsOfFile:import];
if( data ) {
XmlWrapper *xml = [XmlWrapper xmlWithData:data];
NSAssert( xml, @"failed to load xml" );
if( xml ) {
NSArray *results = [xml xpathQuery:@"//root/item"];
if( results ) {
for( XmlNode *node in results ) {
NSLog(@"node : %@", node.name);
}
}
}
}
}
}

-(void)testXmlExport
{
XmlWrapper *xml = [[XmlWrapper alloc] init];
PWData *data = [self getRootData];
for( PWItem *item in data ) {
XmlNode *node = [xml.rootNode addChildNode:@"item"];
[node addAttribute:@"title" value:item.title];
[node addAttribute:@"login" value:item.login];
[node addAttribute:@"password" value:item.password];
[node addAttribute:@"url" value:item.url];
[node addAttribute:@"email" value:item.email];
[node addChildNode:@"notes"
content:item.notes];
}
NSString *exp = [xml toString];
NSError *error = nil;
BOOL ok = [exp writeToFile:[UIApplication documentPath:@"export.xml"]
atomically:YES
encoding:NSUTF8StringEncoding
error:&error];
if( !ok || error ) {
NSLog(@"Save failed");
}
[xml release];
}
@end
10 changes: 9 additions & 1 deletion Classes/SyncViewController.m
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
//

#import "SyncViewController.h"
#import "SyncViewController+TestDriver.h"

enum {
kRowFtpUpload,
Expand Down Expand Up @@ -176,7 +177,14 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath
[detailViewController release];
*/
if( indexPath.section == 0 ) {
// Do things
switch( indexPath.row ) {
case kRowXmlImport:
[self testXmlImport];
break;
case kRowXmlExport:
[self testXmlExport];
break;
}
}
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];
}
Expand Down
23 changes: 21 additions & 2 deletions Classes/XmlWrapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,33 @@
//

#import <Foundation/Foundation.h>
#include <libxml/parser.h>

@interface XmlNode : NSObject {
void *nodePtr_; // xmlNodePtr
}
@property (nonatomic,readonly) NSString *name;
@property (nonatomic,copy) NSString *content;

-(NSArray *)childNodes;
-(NSDictionary *)attributes;

-(XmlNode *)addChildNode:(NSString *)name;
-(XmlNode *)addChildNode:(NSString *)name content:(NSString *)content;

-(void)addAttribute:(NSString *)name value:(NSString *)value;
@end

@interface XmlWrapper : NSObject {
xmlDocPtr docPtr_;
void *docPtr_; // xmlDocPtr
}
@property (readonly) XmlNode *rootNode;
-(id)init;
-(id)initWithData:(NSData *)data;
+(id)xmlWithData:(NSData *)data;

-(NSArray *)xpathQuery:(NSString *)xpath;

-(NSString *)toString;

@end

Loading

0 comments on commit 2827a55

Please sign in to comment.