diff options
Diffstat (limited to 'UnitTests')
-rw-r--r-- | UnitTests/SPDatabaseActionTest.m | 92 | ||||
-rw-r--r-- | UnitTests/SPDatabaseCopyTest.h | 40 | ||||
-rw-r--r-- | UnitTests/SPDatabaseCopyTest.m | 11 | ||||
-rw-r--r-- | UnitTests/SPDatabaseRenameTest.h | 40 | ||||
-rw-r--r-- | UnitTests/SPDatabaseRenameTest.m | 11 | ||||
-rw-r--r-- | UnitTests/SPMenuAdditionsTests.h | 45 | ||||
-rw-r--r-- | UnitTests/SPMenuAdditionsTests.m | 17 | ||||
-rw-r--r-- | UnitTests/SPMutableArrayAdditionsTests.h | 42 | ||||
-rw-r--r-- | UnitTests/SPMutableArrayAdditionsTests.m | 14 | ||||
-rw-r--r-- | UnitTests/SPParserUtilsTest.m | 87 | ||||
-rw-r--r-- | UnitTests/SPStringAdditionsTests.h | 39 | ||||
-rw-r--r-- | UnitTests/SPStringAdditionsTests.m | 81 | ||||
-rw-r--r-- | UnitTests/SPTableCopyTest.h | 39 | ||||
-rw-r--r-- | UnitTests/SPTableCopyTest.m | 12 | ||||
-rw-r--r-- | UnitTests/SPTableFilterParserTest.m | 57 |
15 files changed, 375 insertions, 252 deletions
diff --git a/UnitTests/SPDatabaseActionTest.m b/UnitTests/SPDatabaseActionTest.m new file mode 100644 index 00000000..f7704df5 --- /dev/null +++ b/UnitTests/SPDatabaseActionTest.m @@ -0,0 +1,92 @@ +// +// SPDatabaseActionTest.m +// sequel-pro +// +// Created by Max Lohrmann on 12.03.15. +// Copyright (c) 2015 Max Lohrmann. 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. +// +// More info at <https://github.com/sequelpro/sequelpro> + +#import <OCMock/OCMock.h> +#import <SenTestingKit/SenTestingKit.h> + + +#import "SPDatabaseAction.h" +#import <SPMySQL/SPMySQL.h> + + +@interface SPDatabaseActionTest : SenTestCase + +- (void)testCreateDatabase_01_emptyName; +- (void)testCreateDatabase_02_allParams; +- (void)testCreateDatabase_03_nameOnly; + +@end + +@implementation SPDatabaseActionTest + +- (void)testCreateDatabase_01_emptyName +{ + id mockConnection = OCMStrictClassMock([SPMySQLConnection class]); + //OCMStrictClassMock would fail on any call, which is desired here + + SPDatabaseAction *createDb = [[[SPDatabaseAction alloc] init] autorelease]; + [createDb setConnection:mockConnection]; + STAssertFalse([createDb createDatabase:@"" withEncoding:nil collation:nil],@"create database = NO with empty db name"); + + OCMVerifyAll(mockConnection); +} + + +- (void)testCreateDatabase_02_allParams +{ + id mockConnection = OCMStrictClassMock([SPMySQLConnection class]); + + OCMExpect([mockConnection queryString:@"CREATE DATABASE `target_name` DEFAULT CHARACTER SET = `utf8` DEFAULT COLLATE = `utf8_bin_ci`"]); + OCMStub([mockConnection queryErrored]).andReturn(NO); + + SPDatabaseAction *createDb = [[[SPDatabaseAction alloc] init] autorelease]; + [createDb setConnection:mockConnection]; + + STAssertTrue([createDb createDatabase:@"target_name" withEncoding:@"utf8" collation:@"utf8_bin_ci"], @"create database return"); + + OCMVerifyAll(mockConnection); +} + +- (void)testCreateDatabase_03_nameOnly +{ + id mockConnection = OCMStrictClassMock([SPMySQLConnection class]); + + OCMExpect([mockConnection queryString:@"CREATE DATABASE `target_name`"]); + OCMStub([mockConnection queryErrored]).andReturn(NO); + + SPDatabaseAction *createDb = [[[SPDatabaseAction alloc] init] autorelease]; + [createDb setConnection:mockConnection]; + + STAssertTrue([createDb createDatabase:@"target_name" withEncoding:@"" collation:nil], @"create database return"); + + OCMVerifyAll(mockConnection); +} + +@end diff --git a/UnitTests/SPDatabaseCopyTest.h b/UnitTests/SPDatabaseCopyTest.h deleted file mode 100644 index 2ed193a3..00000000 --- a/UnitTests/SPDatabaseCopyTest.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// SPDatabaseCopyTest.h -// sequel-pro -// -// Created by David Rekowski. -// Copyright (c) 2010 David Rekowski. 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. -// -// More info at <https://github.com/sequelpro/sequelpro> - -#define USE_APPLICATION_UNIT_TEST 1 - -#import <SenTestingKit/SenTestingKit.h> - -@interface SPDatabaseCopyTest : SenTestCase - -- (void)testCopyDatabase; -- (void)testCreateDatabase; - -@end diff --git a/UnitTests/SPDatabaseCopyTest.m b/UnitTests/SPDatabaseCopyTest.m index 2ab44bea..036a1869 100644 --- a/UnitTests/SPDatabaseCopyTest.m +++ b/UnitTests/SPDatabaseCopyTest.m @@ -28,14 +28,23 @@ // // More info at <https://github.com/sequelpro/sequelpro> +#define USE_APPLICATION_UNIT_TEST 1 + #import <OCMock/OCMock.h> +#import <SenTestingKit/SenTestingKit.h> #import "SPAlertSheets.h" -#import "SPDatabaseCopyTest.h" #import "SPDatabaseCopy.h" #import "SPTableCopy.h" #import "SPLogger.h" +@interface SPDatabaseCopyTest : SenTestCase + +- (void)testCopyDatabase; +- (void)testCreateDatabase; + +@end + @implementation SPDatabaseCopyTest - (SPDatabaseCopy *)getDatabaseCopyFixture diff --git a/UnitTests/SPDatabaseRenameTest.h b/UnitTests/SPDatabaseRenameTest.h deleted file mode 100644 index 138b0e11..00000000 --- a/UnitTests/SPDatabaseRenameTest.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// SPDatabaseRenameTest.h -// sequel-pro -// -// Created by David Rekowski. -// Copyright (c) 2010 David Rekowski. 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. -// -// More info at <https://github.com/sequelpro/sequelpro> - -#define USE_APPLICATION_UNIT_TEST 1 - -#import <SenTestingKit/SenTestingKit.h> - -@interface SPDatabaseRenameTest : SenTestCase - -- (void)testRenameDatabase; -- (void)testCreateDatabase; - -@end diff --git a/UnitTests/SPDatabaseRenameTest.m b/UnitTests/SPDatabaseRenameTest.m index ce826e13..0c29ad0a 100644 --- a/UnitTests/SPDatabaseRenameTest.m +++ b/UnitTests/SPDatabaseRenameTest.m @@ -28,12 +28,21 @@ // // More info at <https://github.com/sequelpro/sequelpro> -#import "SPDatabaseRenameTest.h" +#define USE_APPLICATION_UNIT_TEST 1 + #import "SPDatabaseRename.h" #import "SPTableCopy.h" #import "SPLogger.h" #import <OCMock/OCMock.h> +#import <SenTestingKit/SenTestingKit.h> + +@interface SPDatabaseRenameTest : SenTestCase + +- (void)testRenameDatabase; +- (void)testCreateDatabase; + +@end @implementation SPDatabaseRenameTest diff --git a/UnitTests/SPMenuAdditionsTests.h b/UnitTests/SPMenuAdditionsTests.h deleted file mode 100644 index fbc4d653..00000000 --- a/UnitTests/SPMenuAdditionsTests.h +++ /dev/null @@ -1,45 +0,0 @@ -// -// SPMenuAdditionsTests.h -// sequel-pro -// -// Created by Stuart Connolly (stuconnolly.com) on March 20, 2011. -// Copyright (c) 2011 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. -// -// More info at <https://github.com/sequelpro/sequelpro> - -#import <SenTestingKit/SenTestingKit.h> - -/** - * @class SPMenuAdditionsTests SPMenuAdditionsTests.h - * - * @author Stuart Connolly http://stuconnolly.com/ - * - * SPMenuAdditionsTests tests class. - */ -@interface SPMenuAdditionsTests : SenTestCase -{ - NSMenu *menu; -} - -@end diff --git a/UnitTests/SPMenuAdditionsTests.m b/UnitTests/SPMenuAdditionsTests.m index e33920e7..83647e6f 100644 --- a/UnitTests/SPMenuAdditionsTests.m +++ b/UnitTests/SPMenuAdditionsTests.m @@ -28,9 +28,24 @@ // // More info at <https://github.com/sequelpro/sequelpro> -#import "SPMenuAdditionsTests.h" #import "SPMenuAdditions.h" +#import <SenTestingKit/SenTestingKit.h> + +/** + * @class SPMenuAdditionsTests SPMenuAdditionsTests.h + * + * @author Stuart Connolly http://stuconnolly.com/ + * + * SPMenuAdditionsTests tests class. + */ +@interface SPMenuAdditionsTests : SenTestCase +{ + NSMenu *menu; +} + +@end + static NSString *SPTestMenuItemTitle = @"Menu Item"; @implementation SPMenuAdditionsTests diff --git a/UnitTests/SPMutableArrayAdditionsTests.h b/UnitTests/SPMutableArrayAdditionsTests.h deleted file mode 100644 index d96ef285..00000000 --- a/UnitTests/SPMutableArrayAdditionsTests.h +++ /dev/null @@ -1,42 +0,0 @@ -// -// SPMutableArrayAdditionsTests.h -// sequel-pro -// -// Created by Stuart Connolly (stuconnolly.com) on February 2, 2011. -// Copyright (c) 2011 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. -// -// More info at <https://github.com/sequelpro/sequelpro> - -#import <SenTestingKit/SenTestingKit.h> - -/** - * @class SPMutableArrayAdditionsTest SPMutableArrayAdditionsTest.h - * - * @author Stuart Connolly http://stuconnolly.com/ - * - * SPMutableArrayAdditions tests class. - */ -@interface SPMutableArrayAdditionsTests : SenTestCase - -@end diff --git a/UnitTests/SPMutableArrayAdditionsTests.m b/UnitTests/SPMutableArrayAdditionsTests.m index a2890d8f..e09f00a4 100644 --- a/UnitTests/SPMutableArrayAdditionsTests.m +++ b/UnitTests/SPMutableArrayAdditionsTests.m @@ -28,9 +28,21 @@ // // More info at <https://github.com/sequelpro/sequelpro> -#import "SPMutableArrayAdditionsTests.h" #import "SPMutableArrayAdditions.h" +#import <SenTestingKit/SenTestingKit.h> + +/** + * @class SPMutableArrayAdditionsTest SPMutableArrayAdditionsTest.h + * + * @author Stuart Connolly http://stuconnolly.com/ + * + * SPMutableArrayAdditions tests class. + */ +@interface SPMutableArrayAdditionsTests : SenTestCase + +@end + @implementation SPMutableArrayAdditionsTests /** diff --git a/UnitTests/SPParserUtilsTest.m b/UnitTests/SPParserUtilsTest.m new file mode 100644 index 00000000..994b166a --- /dev/null +++ b/UnitTests/SPParserUtilsTest.m @@ -0,0 +1,87 @@ +// +// SPParserUtilsTest.m +// sequel-pro +// +// Created by Max Lohrmann on 27.01.15. +// Copyright (c) 2015 Max Lohrmann. 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. +// +// More info at <https://github.com/sequelpro/sequelpro> + +#define USE_APPLICATION_UNIT_TEST 1 + +#import <Cocoa/Cocoa.h> +#import <SenTestingKit/SenTestingKit.h> + +#include "SPParserUtils.h" + +@interface SPParserUtilsTest : SenTestCase + +- (void)testUtf8strlen; + +@end + +@implementation SPParserUtilsTest + +- (void)testUtf8strlen { + // NOTE!!: Those test do not verify that the utf8strlen() function works according to spec, + // but whether it produces the same results as NSString for the same input. + + const char *empty = ""; + NSString *emptyString = [NSString stringWithCString:empty encoding:NSUTF8StringEncoding]; + STAssertEquals(utf8strlen(empty),[emptyString length], @"empty string"); + + // This is just a little safeguard. + // If any of those conditions fail, all of the following assumptions are moot. + const char *charSeq = "\xF0\x9F\x8D\x8F"; //🍏 + NSString *charString = [NSString stringWithCString:charSeq encoding:NSUTF8StringEncoding]; + STAssertEquals(strlen(charSeq), (size_t)4, @"assumption about storage for binary C string"); + STAssertEquals([charString length], (NSUInteger)2, @"assumption about NSString internal storage of string"); + + const char *singleByteSeq = "Hello World!"; + NSString *singleByteString = [NSString stringWithCString:singleByteSeq encoding:NSUTF8StringEncoding]; + STAssertEquals(utf8strlen(singleByteSeq), [singleByteString length], @"ASCII UTF-8 subset"); + + const char *twoByteSeq = "H\xC3\xA4ll\xC3\xB6 W\xC3\x9Crld\xC3\x9F!"; // Hällö WÜrldß! + NSString *twoByteString = [NSString stringWithCString:twoByteSeq encoding:NSUTF8StringEncoding]; + STAssertEquals(utf8strlen(twoByteSeq), [twoByteString length], @"String containing two-byte utf8 characters"); + + const char *threeByteSeq = "\xE3\x81\x93.\xE3\x82\x93.\xE3\x81\xAB.\xE3\x81\xA1.\xE3\x81\xAF"; // こ.ん.に.ち.は + NSString *threeByteString = [NSString stringWithCString:threeByteSeq encoding:NSUTF8StringEncoding]; + STAssertEquals(utf8strlen(threeByteSeq), [threeByteString length], @"String containing three-byte utf8 characters"); + + const char *fourByteSeq = "\xF0\x9F\x8D\x8F\xF0\x9F\x8D\x8B\xF0\x9F\x8D\x92"; //🍏🍋🍒 + NSString *fourByteString = [NSString stringWithCString:fourByteSeq encoding:NSUTF8StringEncoding]; + STAssertEquals(utf8strlen(fourByteSeq), [fourByteString length], @"String containing only 4-byte utf8 characters (outside BMP)"); + + const char *mixedSeq = "\xE3\x81\x82\xE3\x82\x81\xE3\x80\x90\xE9\xA3\xB4\xE3\x80\x91\xF0\x9F\x8D\xAD \xE2\x89\x88 S\xC3\xBC\xC3\x9Figkeit"; // あめ【飴】🍭 ≈ Süßigkeit + NSString *mixedString = [NSString stringWithCString:mixedSeq encoding:NSUTF8StringEncoding]; + STAssertEquals(utf8strlen(mixedSeq), [mixedString length], @"utf8 characters with all 4 lengths mixed together."); + + //composed vs. decomposed chars + const char *decompSeq = "\xC3\xA4 - a\xCC\x88"; // ä - ä + NSString *decompString = [NSString stringWithCString:decompSeq encoding:NSUTF8StringEncoding]; + STAssertEquals(utf8strlen(decompSeq), [decompString length], @"\"LATIN SMALL LETTER A WITH DIAERESIS\" vs. \"LATIN SMALL LETTER A\" + \"COMBINING DIAERESIS\""); +} + +@end diff --git a/UnitTests/SPStringAdditionsTests.h b/UnitTests/SPStringAdditionsTests.h deleted file mode 100644 index d6854dbe..00000000 --- a/UnitTests/SPStringAdditionsTests.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// SPStringAdditionsTests.h -// sequel-pro -// -// Created by Jim Knight on May 17, 2009. -// Copyright (c) 2009 Jim Knight. 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. -// -// More info at <https://github.com/sequelpro/sequelpro> - -#import <SenTestingKit/SenTestingKit.h> - -@interface SPStringAdditionsTests : SenTestCase - -- (void)testStringByRemovingCharactersInSet; -- (void)testStringWithNewUUID; -- (void)testCreateViewSyntaxPrettifier; - -@end diff --git a/UnitTests/SPStringAdditionsTests.m b/UnitTests/SPStringAdditionsTests.m index af22df77..b0528ec7 100644 --- a/UnitTests/SPStringAdditionsTests.m +++ b/UnitTests/SPStringAdditionsTests.m @@ -28,10 +28,20 @@ // // More info at <https://github.com/sequelpro/sequelpro> -#import "SPStringAdditionsTests.h" #import "SPStringAdditions.h" #import "RegexKitLite.h" +#import <SenTestingKit/SenTestingKit.h> + +@interface SPStringAdditionsTests : SenTestCase + +- (void)testStringByRemovingCharactersInSet; +- (void)testStringWithNewUUID; +- (void)testCreateViewSyntaxPrettifier; +- (void)testNonConsecutivelySearchStringMatchingRanges; + +@end + @implementation SPStringAdditionsTests /** @@ -86,4 +96,73 @@ STAssertEqualObjects([actualSyntax description], [expectedSyntax description], @"Actual view syntax '%@' does not equal expected syntax '%@'", actualSyntax, expectedSyntax); } +- (void)testNonConsecutivelySearchStringMatchingRanges +{ + //basic tests + { + NSArray *matches = nil; + STAssertTrue([@"" nonConsecutivelySearchString:@"" matchingRanges:&matches], @"Equality of empty strings"); + STAssertTrue(([matches count] == 1) && NSEqualRanges(NSMakeRange(0, 0), [(NSValue *)[matches objectAtIndex:0] rangeValue]), @"Returned matches in empty string"); + } + + { + NSArray *matches = (void *)0xdeadbeef; + STAssertFalse([@"" nonConsecutivelySearchString:@"R" matchingRanges:&matches], @"Inequality with empty left side"); + STAssertTrue((matches == (void *)0xdeadbeef), @"out variable not touched by mismatch"); + } + + STAssertFalse([@"L" nonConsecutivelySearchString:@"" matchingRanges:NULL], @"Inequality with empty right side"); + + { + NSArray *matches = nil; + STAssertTrue([@"left" nonConsecutivelySearchString:@"le" matchingRanges:&matches], @"Anchored match left"); + STAssertTrue(([matches count] == 1) && NSEqualRanges(NSMakeRange(0, 2), [(NSValue *)[matches objectAtIndex:0] rangeValue]), @"Returned matches in anchored left match"); + } + + { + NSArray *matches = nil; + STAssertTrue([@"right" nonConsecutivelySearchString:@"ht" matchingRanges:&matches], @"Anchored match right"); + STAssertTrue(([matches count] == 1) && NSEqualRanges(NSMakeRange(3, 2), [(NSValue *)[matches objectAtIndex:0] rangeValue]), @"Returned matches in anchroed right match"); + } + + STAssertFalse([@"ht" nonConsecutivelySearchString:@"right" matchingRanges:NULL], @"Left and Right are not commutative"); + + //real tests + { + NSArray *matches = nil; + STAssertTrue([@"... is not secure anymore!" nonConsecutivelySearchString:@"NSA" matchingRanges:&matches], @"Non-consecutive match, ignoring case"); + STAssertTrue(([matches count] == 3) && + (NSEqualRanges(NSMakeRange(7, 1), [(NSValue *)[matches objectAtIndex:0] rangeValue])) && + (NSEqualRanges(NSMakeRange(11, 1), [(NSValue *)[matches objectAtIndex:1] rangeValue])) && + (NSEqualRanges(NSMakeRange(18, 1), [(NSValue *)[matches objectAtIndex:2] rangeValue])), @"Returned matches in non-consecutive string"); + } + + STAssertFalse([@"Deoxyribonucleic Acid" nonConsecutivelySearchString:@"DNS" matchingRanges:NULL], @"Non-consecutive mismatch"); + + { + NSArray *matches = nil; + STAssertTrue([@"Turn left, then right at the corner" nonConsecutivelySearchString:@"left right" matchingRanges:&matches], @"Partly consecutive match"); + STAssertTrue(([matches count] == 3) && + (NSEqualRanges(NSMakeRange(5, 4), [(NSValue *)[matches objectAtIndex:0] rangeValue])) && + (NSEqualRanges(NSMakeRange(10, 1), [(NSValue *)[matches objectAtIndex:1] rangeValue])) && + (NSEqualRanges(NSMakeRange(16, 5), [(NSValue *)[matches objectAtIndex:2] rangeValue])), @"Returned matches in partly-consecutive string"); + } + + //advanced tests + + // LATIN CAPITAL LETTER A == LATIN SMALL LETTER A + // LATIN SMALL LETTER O WITH DIAERESIS == LATIN SMALL LETTER O + // FULLWIDTH LATIN SMALL LETTER b == LATIN SMALL LETTER B + STAssertTrue([@"A:\xC3\xB6:\xEF\xBD\x82" nonConsecutivelySearchString:@"aob" matchingRanges:NULL], @"Fuzzy matching of defined characters"); + + //all bytes on the right are contained on the left, but on a character level "ä" is not contained in "Hütte Ф" + STAssertFalse([@"H\xC3\xBCtte \xD0\xA4" nonConsecutivelySearchString:@"\xC3\xA4" matchingRanges:NULL], @"Mismatch of composed characters with same prefix"); + + // ":😥:𠘄:" vs "😄" (according to wikipedia "𠘄" is the arachic variant of "印") + // TECHNICALLY THIS SHOULD NOT MATCH! + // However Apple doesn't correctly handle characters in the 4-Byte UTF range, so let's use this test to check for changes in Apples behaviour :) + STAssertTrue([@":\xF0\x9F\x98\x84:\xF0\xA0\x98\x84:" nonConsecutivelySearchString:@"\xF0\x9F\x98\x84" matchingRanges:NULL], @"Mismatch of composed characters (4-byte) with same prefix"); + +} + @end diff --git a/UnitTests/SPTableCopyTest.h b/UnitTests/SPTableCopyTest.h deleted file mode 100644 index 29c5eea4..00000000 --- a/UnitTests/SPTableCopyTest.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// SPTableCopyTest.h -// sequel-pro -// -// Created by David Rekowski. -// Copyright (c) 2010 David Rekowski. 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. -// -// More info at <https://github.com/sequelpro/sequelpro> - -#define USE_APPLICATION_UNIT_TEST 1 - -#import <SenTestingKit/SenTestingKit.h> - -@interface SPTableCopyTest : SenTestCase - -- (void)testCopyTableFromToWithData; - -@end diff --git a/UnitTests/SPTableCopyTest.m b/UnitTests/SPTableCopyTest.m index 099066bc..76a2fe45 100644 --- a/UnitTests/SPTableCopyTest.m +++ b/UnitTests/SPTableCopyTest.m @@ -29,10 +29,18 @@ // More info at <https://github.com/sequelpro/sequelpro> #import "SPTableCopy.h" -#import "SPTableCopyTest.h" +#import <SPMySQL/SPMySQL.h> +#import <SenTestingKit/SenTestingKit.h> #import <OCMock/OCMock.h> -#import <SPMySQL/SPMySQL.h> + +#define USE_APPLICATION_UNIT_TEST 1 + +@interface SPTableCopyTest : SenTestCase + +- (void)testCopyTableFromToWithData; + +@end @implementation SPTableCopyTest diff --git a/UnitTests/SPTableFilterParserTest.m b/UnitTests/SPTableFilterParserTest.m new file mode 100644 index 00000000..d5f46969 --- /dev/null +++ b/UnitTests/SPTableFilterParserTest.m @@ -0,0 +1,57 @@ +// +// SPTableFilterParserTest.m +// sequel-pro +// +// Created by Max Lohrmann on 23.04.15. +// +// + +#import <Foundation/Foundation.h> +#import "SPTableFilterParser.h" + +#define USE_APPLICATION_UNIT_TEST 1 + +#import <Cocoa/Cocoa.h> +#import <SenTestingKit/SenTestingKit.h> + +@interface SPTableFilterParserTest : SenTestCase + +- (void)testFilterString; + +@end + +@implementation SPTableFilterParserTest + +- (void)testFilterString { + //simple zero argument case + { + SPTableFilterParser *p = [[[SPTableFilterParser alloc] initWithFilterClause:@" constant $BINARY string" numberOfArguments:0] autorelease]; + [p setCurrentField:@"FLD"]; + + // binary matches as "$BINARY ", eating the one additional whitespace + STAssertEqualObjects([p filterString],@"`FLD` constant string", @"Constant replacement"); + } + //simple one argument case with binary + { + SPTableFilterParser *p = [[[SPTableFilterParser alloc] initWithFilterClause:@"= FOO($BINARY ${})" numberOfArguments:1] autorelease]; + [p setCurrentField:@"FLD2"]; + [p setCaseSensitive:YES]; + [p setArgument:@"arg1"]; + + STAssertEqualObjects([p filterString], @"`FLD2` = FOO(BINARY arg1)", @"One Argument, $BINARY variable"); + } + //simple two argument case with explicit current field + { + SPTableFilterParser *p = [[[SPTableFilterParser alloc] initWithFilterClause:@"MIN($CURRENT_FIELD,${}) = ${}" numberOfArguments:2] autorelease]; + [p setCurrentField:@"FLD3"]; + [p setSuppressLeadingTablePlaceholder:YES]; + [p setFirstBetweenArgument:@"LA"]; + [p setSecondBetweenArgument:@"RA"]; + + STAssertEqualObjects([p filterString], @"MIN(`FLD3`,LA) = RA", @"Two Arguments, $CURRENT_FIELD variable"); + } + +} + + +@end |