From 803a9e1005449b0271f2a99dcd26b0dedc48f2b4 Mon Sep 17 00:00:00 2001 From: stuconnolly Date: Thu, 27 Sep 2012 10:31:56 +0000 Subject: Add data type tests. --- .../PostgresKit.xcodeproj/project.pbxproj | 14 +- Frameworks/PostgresKit/Tests/PGDataTypeTests.h | 57 +++++++ Frameworks/PostgresKit/Tests/PGDataTypeTests.m | 180 +++++++++++++++++++++ 3 files changed, 250 insertions(+), 1 deletion(-) create mode 100644 Frameworks/PostgresKit/Tests/PGDataTypeTests.h create mode 100644 Frameworks/PostgresKit/Tests/PGDataTypeTests.m (limited to 'Frameworks') diff --git a/Frameworks/PostgresKit/PostgresKit.xcodeproj/project.pbxproj b/Frameworks/PostgresKit/PostgresKit.xcodeproj/project.pbxproj index da627b47..c3928a59 100644 --- a/Frameworks/PostgresKit/PostgresKit.xcodeproj/project.pbxproj +++ b/Frameworks/PostgresKit/PostgresKit.xcodeproj/project.pbxproj @@ -9,6 +9,7 @@ /* Begin PBXBuildFile section */ 170465CE15C2960F00DC5BE5 /* PGPostgresTypeHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 170465CC15C2960F00DC5BE5 /* PGPostgresTypeHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; 170465CF15C2960F00DC5BE5 /* PGPostgresTypeHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 170465CD15C2960F00DC5BE5 /* PGPostgresTypeHandler.m */; }; + 171D58701612E9B900F84472 /* PGDataTypeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 171D586F1612E9B900F84472 /* PGDataTypeTests.m */; }; 1724C9B815F9ED8600AB2291 /* libpqtypes.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1724C9B715F9ED8600AB2291 /* libpqtypes.a */; }; 1724CC9215FB4CC200AB2291 /* PGPostgresTimeTZ.h in Headers */ = {isa = PBXBuildFile; fileRef = 1724CC9015FB4CC200AB2291 /* PGPostgresTimeTZ.h */; }; 1724CC9315FB4CC200AB2291 /* PGPostgresTimeTZ.m in Sources */ = {isa = PBXBuildFile; fileRef = 1724CC9115FB4CC200AB2291 /* PGPostgresTimeTZ.m */; }; @@ -70,6 +71,8 @@ /* Begin PBXFileReference section */ 170465CC15C2960F00DC5BE5 /* PGPostgresTypeHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PGPostgresTypeHandler.h; sourceTree = ""; }; 170465CD15C2960F00DC5BE5 /* PGPostgresTypeHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PGPostgresTypeHandler.m; sourceTree = ""; }; + 171D586E1612E9B900F84472 /* PGDataTypeTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PGDataTypeTests.h; sourceTree = ""; }; + 171D586F1612E9B900F84472 /* PGDataTypeTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PGDataTypeTests.m; sourceTree = ""; }; 1724C9B715F9ED8600AB2291 /* libpqtypes.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libpqtypes.a; sourceTree = ""; }; 1724CA3B15F9EE7300AB2291 /* libpqtypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = libpqtypes.h; sourceTree = ""; }; 1724CC9015FB4CC200AB2291 /* PGPostgresTimeTZ.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PGPostgresTimeTZ.h; sourceTree = ""; }; @@ -196,8 +199,10 @@ 171D582B1612E00D00F84472 /* Tests */ = { isa = PBXGroup; children = ( + 171D586E1612E9B900F84472 /* PGDataTypeTests.h */, + 171D586F1612E9B900F84472 /* PGDataTypeTests.m */, ); - name = Tests; + path = Tests; sourceTree = ""; }; 1724CA3715F9EDC900AB2291 /* libpq */ = { @@ -499,6 +504,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 171D58701612E9B900F84472 /* PGDataTypeTests.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -542,6 +548,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + BUNDLE_LOADER = ""; COPY_PHASE_STRIP = NO; FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_LIBRARY_DIR)/Frameworks"; GCC_DYNAMIC_NO_PIC = NO; @@ -561,6 +568,7 @@ ); PREBINDING = NO; PRODUCT_NAME = Tests; + TEST_HOST = ""; WRAPPER_EXTENSION = octest; }; name = Debug; @@ -569,6 +577,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + BUNDLE_LOADER = ""; COPY_PHASE_STRIP = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_LIBRARY_DIR)/Frameworks"; @@ -587,6 +596,7 @@ ); PREBINDING = NO; PRODUCT_NAME = Tests; + TEST_HOST = ""; WRAPPER_EXTENSION = octest; ZERO_LINK = NO; }; @@ -596,6 +606,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + BUNDLE_LOADER = ""; FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_LIBRARY_DIR)/Frameworks"; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_ENABLE_OBJC_EXCEPTIONS = YES; @@ -612,6 +623,7 @@ ); PREBINDING = NO; PRODUCT_NAME = Tests; + TEST_HOST = ""; WRAPPER_EXTENSION = octest; }; name = Distribution; diff --git a/Frameworks/PostgresKit/Tests/PGDataTypeTests.h b/Frameworks/PostgresKit/Tests/PGDataTypeTests.h new file mode 100644 index 00000000..4d0debe1 --- /dev/null +++ b/Frameworks/PostgresKit/Tests/PGDataTypeTests.h @@ -0,0 +1,57 @@ +// +// $Id$ +// +// PGDataTypeTests.h +// PostgresKit +// +// Created by Stuart Connolly (stuconnolly.com) on September 26, 2012. +// Copyright (c) 2012 Stuart Connolly. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the "Software"), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. + +#import +#import + +@interface PGDataTypeTests : SenTestCase +{ + id _result; + id _expectedResult; + + NSString *_field; + + PGPostgresConnection *_connection; +} + +@property (readwrite, retain) id result; + +@property (readwrite, retain) id expectedResult; + +@property (readwrite, retain) NSString *field; + +@property (readwrite, retain) PGPostgresConnection *connection; + +- (id)initWithInvocation:(NSInvocation *)invocation + connection:(PGPostgresConnection *)connection + expectedResult:(id)result + field:(NSString *)field; + +@end diff --git a/Frameworks/PostgresKit/Tests/PGDataTypeTests.m b/Frameworks/PostgresKit/Tests/PGDataTypeTests.m new file mode 100644 index 00000000..c9ec6f8f --- /dev/null +++ b/Frameworks/PostgresKit/Tests/PGDataTypeTests.m @@ -0,0 +1,180 @@ +// +// $Id$ +// +// PGDataTypeTests.m +// PostgresKit +// +// Created by Stuart Connolly (stuconnolly.com) on September 26, 2012. +// Copyright (c) 2012 Stuart Connolly. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the "Software"), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. + +#import "PGDataTypeTests.h" + +static NSString *PGTestDatabaseHost = @"localhost"; +static NSString *PGTestDatabaseUser = @"pgkit_test"; +static NSString *PGTestDatabaseName = @"pgkit_test"; +static NSString *PGTestDatabasePassword = @"pgkit"; + +static NSUInteger PGTestDatabasePort = 5432; + +@interface PGDataTypeTests () + +- (void)_establishConnection; + ++ (void)_addTestForField:(NSString *)field + withExpectedResult:(id)result + connection:(PGPostgresConnection *)connection + toTestSuite:(SenTestSuite *)testSuite; + +@end + +@implementation PGDataTypeTests + +@synthesize field = _field; +@synthesize result = _result; +@synthesize connection = _connection; +@synthesize expectedResult = _expectedResult; + +#pragma mark - +#pragma mark Initialisation + ++ (id)defaultTestSuite +{ + SenTestSuite *testSuite = [[SenTestSuite alloc] initWithName:[self className]]; + + PGPostgresConnection *connection = [[PGPostgresConnection alloc] init]; + + [self _addTestForField:@"int" withExpectedResult:[NSNumber numberWithInt:12345] connection:connection toTestSuite:testSuite]; + [self _addTestForField:@"smallint" withExpectedResult:[NSNumber numberWithInt:2] connection:connection toTestSuite:testSuite]; + [self _addTestForField:@"bigint" withExpectedResult:[NSNumber numberWithInt:123456789] connection:connection toTestSuite:testSuite]; + [self _addTestForField:@"bool" withExpectedResult:[NSNumber numberWithBool:YES] connection:connection toTestSuite:testSuite]; + [self _addTestForField:@"float" withExpectedResult:[NSNumber numberWithFloat:12345.678] connection:connection toTestSuite:testSuite]; + [self _addTestForField:@"numeric" withExpectedResult:[NSNumber numberWithDouble:12345.678] connection:connection toTestSuite:testSuite]; + [self _addTestForField:@"char" withExpectedResult:@"CHAR" connection:connection toTestSuite:testSuite]; + [self _addTestForField:@"varchar" withExpectedResult:@"VARCHAR" connection:connection toTestSuite:testSuite]; + [self _addTestForField:@"date" withExpectedResult: connection:connection toTestSuite:testSuite]; + [self _addTestForField:@"time" withExpectedResult: connection:connection toTestSuite:testSuite]; + [self _addTestForField:@"timetz" withExpectedResult: connection:connection toTestSuite:testSuite]; + [self _addTestForField:@"timestamp" withExpectedResult: connection:connection toTestSuite:testSuite]; + [self _addTestForField:@"timestamptz" withExpectedResult: connection:connection toTestSuite:testSuite]; + + [connection release]; + + return [testSuite autorelease]; +} + +- (id)initWithInvocation:(NSInvocation *)invocation + connection:(PGPostgresConnection *)connection + expectedResult:(id)result + field:(NSString *)field +{ + if ((self = [super initWithInvocation:invocation])) { + [self setConnection:connection]; + [self setExpectedResult:result]; + [self setField:field]; + + [self _establishConnection]; + } + + return self; +} + +#pragma mark - +#pragma mark Setup & Teardown + +- (void)setUp +{ + +} + +- (void)tearDown +{ + if (_connection && [_connection isConnected]) { + [_connection disconnect]; + } +} + +#pragma mark - +#pragma mark Tests + +- (void)testResultValueIsNotNull +{ + STAssertNotNil(_result, @""); +} + +- (void)testResultIsOfCorrectType +{ + STAssertTrue([_result isKindOfClass:[_expectedResult class]], @""); +} + +- (void)testResultHasCorrectValue +{ + STAssertEquals(_result, _expectedResult, @""); +} + +#pragma mark - +#pragma mark Private API + +- (void)_establishConnection +{ + [_connection setHost:PGTestDatabaseHost]; + [_connection setUser:PGTestDatabaseUser]; + [_connection setPort:PGTestDatabasePort]; + [_connection setDatabase:PGTestDatabaseName]; + [_connection setPassword:PGTestDatabasePassword]; + + do { + sleep(0.1); + } + while (![_connection isConnected]); + + if (![_connection isConnected]) STFail(@"Unable to establish connection to local database. All tests will fail."); +} + ++ (void)_addTestForField:(NSString *)field + withExpectedResult:(id)result + connection:(PGPostgresConnection *)connection + toTestSuite:(SenTestSuite *)testSuite +{ + for (NSInvocation *invocation in [self testInvocations]) + { + SenTestCase *test = [[[self class] alloc] initWithInvocation:invocation connection:connection expectedResult:result field:field]; + + [testSuite addTest:test]; + + [test release]; + } +} + +#pragma mark - + +- (void)dealloc +{ + if (_result) [_result release], _result = nil; + if (_field) [_field release], _field = nil; + if (_connection) [_connection release], _connection = nil; + + [super dealloc]; +} + +@end -- cgit v1.2.3