diff --git a/FSInteractiveMap.xcodeproj/project.pbxproj b/FSInteractiveMap.xcodeproj/project.pbxproj index 4a1d21d..766664d 100644 --- a/FSInteractiveMap.xcodeproj/project.pbxproj +++ b/FSInteractiveMap.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 8E302F891C53EA81009A368A /* FSSVGParsingTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E302F881C53EA81009A368A /* FSSVGParsingTests.m */; }; 8ED756AE1A5095A80073A6A2 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 8ED756AD1A5095A80073A6A2 /* main.m */; }; 8ED756B11A5095A80073A6A2 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 8ED756B01A5095A80073A6A2 /* AppDelegate.m */; }; 8ED756B41A5095A80073A6A2 /* MasterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8ED756B31A5095A80073A6A2 /* MasterViewController.m */; }; @@ -44,6 +45,7 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 8E302F881C53EA81009A368A /* FSSVGParsingTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSSVGParsingTests.m; sourceTree = ""; }; 8ED756A81A5095A80073A6A2 /* FSInteractiveMap.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FSInteractiveMap.app; sourceTree = BUILT_PRODUCTS_DIR; }; 8ED756AC1A5095A80073A6A2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 8ED756AD1A5095A80073A6A2 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; @@ -147,6 +149,7 @@ 8ED756C71A5095A80073A6A2 /* FSInteractiveMapTests */ = { isa = PBXGroup; children = ( + 8E302F881C53EA81009A368A /* FSSVGParsingTests.m */, 8ED756CA1A5095A80073A6A2 /* FSInteractiveMapTests.m */, 8ED756C81A5095A80073A6A2 /* Supporting Files */, ); @@ -248,7 +251,7 @@ 8ED756A01A5095A80073A6A2 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0610; + LastUpgradeCheck = 0720; ORGANIZATIONNAME = "Arthur GUIBERT"; TargetAttributes = { 8ED756A71A5095A80073A6A2 = { @@ -331,6 +334,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 8E302F891C53EA81009A368A /* FSSVGParsingTests.m in Sources */, 8ED756CB1A5095A80073A6A2 /* FSInteractiveMapTests.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -385,6 +389,7 @@ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; @@ -449,6 +454,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = FSInteractiveMap/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.slipcorp.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -459,6 +465,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = FSInteractiveMap/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.slipcorp.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; @@ -477,6 +484,7 @@ ); INFOPLIST_FILE = FSInteractiveMapTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.slipcorp.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FSInteractiveMap.app/FSInteractiveMap"; }; @@ -492,6 +500,7 @@ ); INFOPLIST_FILE = FSInteractiveMapTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.slipcorp.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FSInteractiveMap.app/FSInteractiveMap"; }; diff --git a/FSInteractiveMap/FSInteractiveMap/FSInteractiveMapView.m b/FSInteractiveMap/FSInteractiveMap/FSInteractiveMapView.m index 85b7db8..fc2db0e 100644 --- a/FSInteractiveMap/FSInteractiveMap/FSInteractiveMapView.m +++ b/FSInteractiveMap/FSInteractiveMap/FSInteractiveMapView.m @@ -143,7 +143,7 @@ - (void)setColors:(NSDictionary*)colorsDict FSSVGPathElement* element = _svg.paths[i]; if([self.layer.sublayers[i] isKindOfClass:CAShapeLayer.class] && element.fill) { - CAShapeLayer* l = self.layer.sublayers[i]; + CAShapeLayer* l = (CAShapeLayer*)self.layer.sublayers[i]; if(element.fill) { if(colorsDict && [colorsDict objectForKey:element.identifier]) { @@ -172,7 +172,7 @@ - (void)enumerateLayersUsingBlock:(void (^)(NSString *, CAShapeLayer *))block FSSVGPathElement* element = _svg.paths[i]; if([self.layer.sublayers[i] isKindOfClass:CAShapeLayer.class] && element.fill) { - CAShapeLayer* l = self.layer.sublayers[i]; + CAShapeLayer* l = (CAShapeLayer*)self.layer.sublayers[i]; block(element.identifier, l); } } @@ -192,7 +192,7 @@ - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event FSSVGPathElement* element = _svg.paths[i]; if([self.layer.sublayers[i] isKindOfClass:CAShapeLayer.class] && element.fill) { - CAShapeLayer* l = self.layer.sublayers[i]; + CAShapeLayer* l = (CAShapeLayer*)self.layer.sublayers[i]; if(_clickHandler) { _clickHandler(element.identifier, l); diff --git a/FSInteractiveMap/Info.plist b/FSInteractiveMap/Info.plist index dd79980..fd1ab7c 100644 --- a/FSInteractiveMap/Info.plist +++ b/FSInteractiveMap/Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier - com.slipcorp.$(PRODUCT_NAME:rfc1034identifier) + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/FSInteractiveMapTests/FSSVGParsingTests.m b/FSInteractiveMapTests/FSSVGParsingTests.m new file mode 100644 index 0000000..36832cf --- /dev/null +++ b/FSInteractiveMapTests/FSSVGParsingTests.m @@ -0,0 +1,111 @@ +// +// FSSVGParsingTests.m +// FSInteractiveMap +// +// Created by Arthur GUIBERT on 23/01/2016. +// Copyright © 2016 Arthur GUIBERT. All rights reserved. +// + +#import +#import "FSSVGUtils.h" +#import "FSSVGPathElement.h" + +static const float FSSVGAccuryForTest = 0.001f; + +@interface FSSVGParsingTests : XCTestCase + +@end + +@implementation FSSVGParsingTests + +- (void)setUp { + [super setUp]; +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; +} + +#pragma mark - Testing the parsePoints method + +- (void)testEmptyPointsListParsing { + NSArray* points = [FSSVGUtils parsePoints:""]; + XCTAssertEqual([points count], 0); +} + +- (void)testSinglePointParsing { + NSArray* points = [FSSVGUtils parsePoints:"1.2345"]; + XCTAssertEqual([points count], 1); + XCTAssertEqualWithAccuracy([points[0] floatValue], 1.2345f, FSSVGAccuryForTest); +} + +- (void)testMultiplePointsParsing { + NSArray* points = [FSSVGUtils parsePoints:"1.2345, 2.345, 8,\n 0.001"]; + XCTAssertEqual([points count], 4); + XCTAssertEqualWithAccuracy([points[0] floatValue], 1.2345f, FSSVGAccuryForTest); + XCTAssertEqualWithAccuracy([points[1] floatValue], 2.345f, FSSVGAccuryForTest); + XCTAssertEqualWithAccuracy([points[2] floatValue], 8, FSSVGAccuryForTest); + XCTAssertEqualWithAccuracy([points[3] floatValue], 0.001, FSSVGAccuryForTest); +} + +- (void)testWrongFormat { + NSArray* points = [FSSVGUtils parsePoints:"abcd"]; + XCTAssertEqual([points count], 0); +} + +#pragma mark - Testing the transfor parsing method + +- (void)testEmptyTransform { + CGAffineTransform transform = [FSSVGUtils parseTransform:@""]; + + XCTAssertEqual(transform.tx, 0); + XCTAssertEqual(transform.ty, 0); + XCTAssertEqual(transform.a, 1); + XCTAssertEqual(transform.b, 0); + XCTAssertEqual(transform.c, 0); + XCTAssertEqual(transform.d, 1); +} + +- (void)testTranslateTransform { + CGAffineTransform transform = [FSSVGUtils parseTransform:@"translate(1, 2)"]; + + XCTAssertEqual(transform.tx, 1); + XCTAssertEqual(transform.ty, 2); + XCTAssertEqual(transform.a, 1); + XCTAssertEqual(transform.b, 0); + XCTAssertEqual(transform.c, 0); + XCTAssertEqual(transform.d, 1); +} + +- (void)testMatrixTransform { + CGAffineTransform transform = [FSSVGUtils parseTransform:@"matrix(1, 2, 3, 4, 5, 6)"]; + + XCTAssertEqual(transform.a, 1); + XCTAssertEqual(transform.b, 2); + XCTAssertEqual(transform.c, 3); + XCTAssertEqual(transform.d, 4); + XCTAssertEqual(transform.tx, 5); + XCTAssertEqual(transform.ty, 6); +} + +#pragma mark - SVGPathElement testing + +- (void)testSvgPathElementInit { + NSDictionary* dict = @{ + @"title" : @"title__01", + @"id" : @"part_1", + @"class" : @"land", + @"d" : @"M302.37,434.36l-0.06,-1.12l1.61,-0.37l0.59,0.1l-0.11,2.11l-2.34,0.31l-0.5,-0.25L302.37,434.36zM309.41,631.56l-2.38,-1.12l-3.36,2.7l1.4,2.05l2.38,-2.05l1.26,1.59l3.79,-1.36l0.84,-1.58l-2.24,-2.01L309.41,631.56zM377.41,482.2l-0.95,-3.57l-1.02,-0.88l-2.4,-0.11l-2.16,-0.81l-3.58,-3.13l-4.15,-2.31l-4.19,0.11l-5.46,-1.47l-3.26,0.86l0.46,-1.54l-1.37,-1.63l-4.66,-1.7l-3.53,-1l-2.13,1.83l-0.1,-2.79l-4.96,-0.44l-0.87,-0.84l2.11,-2.29l-0.08,-1.92l-1.5,-0.46l-1.57,-4.88l-0.69,-1.54l-0.96,0.13l-0.46,-1.14l-2.97,-2.36l-2.06,-0.66l-0.95,-0.31l-3.01,-0.75l-2.27,0.2l-0.3,0.5l-3.36,-0.56l-1.11,-0.98l-1.5,-1.37l-1.06,-0.07l-0.08,-1.45l-1.73,-1.83L307.7,440l-1.1,-0.66l-1.46,0.06l-0.45,-2.26l-2.13,-1.39l-2.24,-0.21l-0.96,-1.34l2.38,-0.84l-3.36,0.04l-3.47,0.17l-0.03,0.71l-1.57,0.88l-2.14,-0.35l-1.61,-1.27l-3,0.29l-2.52,-0.02l-0.11,-0.94l-1.82,-1.58l-1.97,-0.05l-1.01,-2l-0.98,0.9l0.39,1.34l-3.49,1.15l0.14,2.15l0.87,1l-0.63,2.04l-1.21,0.18l-1.06,-2.24l1.24,-1.64l0.03,-1.48l-0.91,-1.29l1.65,-0.33l0.08,-0.67l0.54,-0.96l-0.74,-0.75l-0" + }; + + FSSVGPathElement* element = [[FSSVGPathElement alloc] initWithAttributes:dict]; + + XCTAssertNotNil(element); + XCTAssertEqual(element.title, @"title__01"); + XCTAssertEqual(element.identifier, @"part_1"); + XCTAssertEqual(element.className, @"land"); + XCTAssertNotNil(element.path); +} + +@end diff --git a/FSInteractiveMapTests/Info.plist b/FSInteractiveMapTests/Info.plist index 163dfc9..ba72822 100644 --- a/FSInteractiveMapTests/Info.plist +++ b/FSInteractiveMapTests/Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier - com.slipcorp.$(PRODUCT_NAME:rfc1034identifier) + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName