Skip to content

Commit

Permalink
Test module builder performance (#12)
Browse files Browse the repository at this point in the history
* Test module builder performance

* Shared ViperitTests scheme for Travis

* Added travis simulator to run tests

* remove sim id

* added sim as specified in travis console

* added sim as specified in travis console

* added sim as specified in travis console

* Module build components test

* remove warnings for unused let in testModuleBuildCorrectComponents

* use ‘is’ instead of ‘as?’ to check components class
  • Loading branch information
ferranabello authored Mar 18, 2017
1 parent bed613e commit 64b58b8
Show file tree
Hide file tree
Showing 10 changed files with 293 additions and 21 deletions.
16 changes: 15 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
@@ -1,2 +1,16 @@
language: objective-c
osx_image: xcode8
osx_image: xcode8.2

branches:
only:
- develop
- master
env:
- LC_CTYPE=en_US.UTF-8 LANG=en_US.UTF-8
before_install:
- rvm install ruby-2.4.0
- gem install xcpretty -N
script:
- set -o pipefail
- xcodebuild -scheme Viperit -sdk iphonesimulator ONLY_ACTIVE_ARCH=NO | xcpretty -c
- xcodebuild test -scheme ViperitTests -destination 'platform=iOS Simulator,id=8F22171A-FD13-45C9-A45B-68529E1385BD,OS=10.1' | xcpretty -c
67 changes: 47 additions & 20 deletions Viperit.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,17 @@
5367C0E11DD7C69E005B6676 /* Interactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53532C5E1DD50DDF00088AAC /* Interactor.swift */; };
5367C0E21DD7C69E005B6676 /* Presenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53532C601DD50DDF00088AAC /* Presenter.swift */; };
5367C0E31DD7C69E005B6676 /* Router.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53532C611DD50DDF00088AAC /* Router.swift */; };
537C42E01E7BEF7B00822E4A /* Sample.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 537C42DA1E7BEF7B00822E4A /* Sample.storyboard */; };
537C42E11E7BEF7B00822E4A /* SampleDisplayData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 537C42DB1E7BEF7B00822E4A /* SampleDisplayData.swift */; };
537C42E21E7BEF7B00822E4A /* SampleInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 537C42DC1E7BEF7B00822E4A /* SampleInteractor.swift */; };
537C42E31E7BEF7B00822E4A /* SamplePresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 537C42DD1E7BEF7B00822E4A /* SamplePresenter.swift */; };
537C42E41E7BEF7B00822E4A /* SampleRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 537C42DE1E7BEF7B00822E4A /* SampleRouter.swift */; };
537C42E51E7BEF7B00822E4A /* SampleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 537C42DF1E7BEF7B00822E4A /* SampleView.swift */; };
537D19E41E7BE9B100A758FF /* ModuleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 537D19E31E7BE9B100A758FF /* ModuleTests.swift */; };
53D3AEF61E0709A80099A464 /* String+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53D3AEF51E0709A80099A464 /* String+.swift */; };
53D3AF111E07109D0099A464 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53D3AEFC1E07109D0099A464 /* AppDelegate.swift */; };
53D3AF121E07109D0099A464 /* AppModule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53D3AEFD1E07109D0099A464 /* AppModule.swift */; };
53D3AF131E07109D0099A464 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 53D3AEFE1E07109D0099A464 /* LaunchScreen.storyboard */; };
53D3AF141E07109D0099A464 /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 53D3AF001E07109D0099A464 /* Info.plist */; };
53D3AF151E07109D0099A464 /* Home.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 53D3AF031E07109D0099A464 /* Home.storyboard */; };
53D3AF161E07109D0099A464 /* HomeDisplayData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53D3AF041E07109D0099A464 /* HomeDisplayData.swift */; };
53D3AF171E07109D0099A464 /* HomeInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53D3AF051E07109D0099A464 /* HomeInteractor.swift */; };
Expand All @@ -36,6 +42,7 @@
53D3AF201E07109D0099A464 /* SecondView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53D3AF0F1E07109D0099A464 /* SecondView.swift */; };
53D3AF211E07109D0099A464 /* SecondViewPad.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53D3AF101E07109D0099A464 /* SecondViewPad.swift */; };
53D3AF321E0711000099A464 /* HomeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53D3AF311E0711000099A464 /* HomeTests.swift */; };
53F14AA41E7BF3D400E61452 /* Viperit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5367C0CF1DD7C68D005B6676 /* Viperit.framework */; };
/* End PBXBuildFile section */

/* Begin PBXContainerItemProxy section */
Expand All @@ -46,13 +53,6 @@
remoteGlobalIDString = 5367C0CE1DD7C68D005B6676;
remoteInfo = Viperit;
};
53532C4D1DD50BD200088AAC /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 53532C301DD50BD200088AAC /* Project object */;
proxyType = 1;
remoteGlobalIDString = 53532C371DD50BD200088AAC;
remoteInfo = Viperit;
};
53D3AF2B1E0710E90099A464 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 53532C301DD50BD200088AAC /* Project object */;
Expand Down Expand Up @@ -89,6 +89,13 @@
53532C631DD50DDF00088AAC /* ViperComponent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViperComponent.swift; sourceTree = "<group>"; };
53532C641DD50DDF00088AAC /* ViperitError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViperitError.swift; sourceTree = "<group>"; };
5367C0CF1DD7C68D005B6676 /* Viperit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Viperit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
537C42DA1E7BEF7B00822E4A /* Sample.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Sample.storyboard; sourceTree = "<group>"; };
537C42DB1E7BEF7B00822E4A /* SampleDisplayData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SampleDisplayData.swift; sourceTree = "<group>"; };
537C42DC1E7BEF7B00822E4A /* SampleInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SampleInteractor.swift; sourceTree = "<group>"; };
537C42DD1E7BEF7B00822E4A /* SamplePresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SamplePresenter.swift; sourceTree = "<group>"; };
537C42DE1E7BEF7B00822E4A /* SampleRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SampleRouter.swift; sourceTree = "<group>"; };
537C42DF1E7BEF7B00822E4A /* SampleView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SampleView.swift; sourceTree = "<group>"; };
537D19E31E7BE9B100A758FF /* ModuleTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ModuleTests.swift; sourceTree = "<group>"; };
53D3AEF51E0709A80099A464 /* String+.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String+.swift"; sourceTree = "<group>"; };
53D3AEFA1E070AC60099A464 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
53D3AEFC1E07109D0099A464 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -126,6 +133,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
53F14AA41E7BF3D400E61452 /* Viperit.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand All @@ -146,6 +154,19 @@
/* End PBXFrameworksBuildPhase section */

/* Begin PBXGroup section */
534AF1EF1E7BED06009D2D61 /* Sample */ = {
isa = PBXGroup;
children = (
537C42DA1E7BEF7B00822E4A /* Sample.storyboard */,
537C42DB1E7BEF7B00822E4A /* SampleDisplayData.swift */,
537C42DC1E7BEF7B00822E4A /* SampleInteractor.swift */,
537C42DD1E7BEF7B00822E4A /* SamplePresenter.swift */,
537C42DE1E7BEF7B00822E4A /* SampleRouter.swift */,
537C42DF1E7BEF7B00822E4A /* SampleView.swift */,
);
path = Sample;
sourceTree = "<group>";
};
53532C2F1DD50BD200088AAC = {
isa = PBXGroup;
children = (
Expand Down Expand Up @@ -181,6 +202,8 @@
53532C4F1DD50BD200088AAC /* ViperitTests */ = {
isa = PBXGroup;
children = (
534AF1EF1E7BED06009D2D61 /* Sample */,
537D19E31E7BE9B100A758FF /* ModuleTests.swift */,
53532C521DD50BD200088AAC /* Info.plist */,
);
path = ViperitTests;
Expand Down Expand Up @@ -309,7 +332,6 @@
buildRules = (
);
dependencies = (
53532C4E1DD50BD200088AAC /* PBXTargetDependency */,
);
name = ViperitTests;
productName = ViperitTests;
Expand Down Expand Up @@ -371,8 +393,8 @@
53532C4B1DD50BD200088AAC = {
CreatedOnToolsVersion = 8.1;
DevelopmentTeam = P4KYD82MF4;
LastSwiftMigration = 0820;
ProvisioningStyle = Automatic;
TestTargetID = 53532C371DD50BD200088AAC;
};
5367C0CE1DD7C68D005B6676 = {
CreatedOnToolsVersion = 8.1;
Expand Down Expand Up @@ -416,7 +438,6 @@
files = (
53D3AF1B1E07109D0099A464 /* Second.storyboard in Resources */,
53D3AF151E07109D0099A464 /* Home.storyboard in Resources */,
53D3AF141E07109D0099A464 /* Info.plist in Resources */,
53D3AF131E07109D0099A464 /* LaunchScreen.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
Expand All @@ -425,6 +446,7 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
537C42E01E7BEF7B00822E4A /* Sample.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -469,6 +491,12 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
537C42E41E7BEF7B00822E4A /* SampleRouter.swift in Sources */,
537C42E11E7BEF7B00822E4A /* SampleDisplayData.swift in Sources */,
537C42E21E7BEF7B00822E4A /* SampleInteractor.swift in Sources */,
537C42E31E7BEF7B00822E4A /* SamplePresenter.swift in Sources */,
537C42E51E7BEF7B00822E4A /* SampleView.swift in Sources */,
537D19E41E7BE9B100A758FF /* ModuleTests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -504,11 +532,6 @@
target = 5367C0CE1DD7C68D005B6676 /* Viperit */;
targetProxy = 53388C2B1DD9FFDF00EA4CEC /* PBXContainerItemProxy */;
};
53532C4E1DD50BD200088AAC /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 53532C371DD50BD200088AAC /* Example */;
targetProxy = 53532C4D1DD50BD200088AAC /* PBXContainerItemProxy */;
};
53D3AF2C1E0710E90099A464 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 53532C371DD50BD200088AAC /* Example */;
Expand Down Expand Up @@ -658,29 +681,30 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
BUNDLE_LOADER = "$(TEST_HOST)";
CLANG_ENABLE_MODULES = YES;
DEVELOPMENT_TEAM = P4KYD82MF4;
EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = NO;
INFOPLIST_FILE = ViperitTests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = org.acferran.ViperitTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 3.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ViperitExample.app/ViperitExample";
};
name = Debug;
};
53532C5A1DD50BD200088AAC /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
BUNDLE_LOADER = "$(TEST_HOST)";
CLANG_ENABLE_MODULES = YES;
DEVELOPMENT_TEAM = P4KYD82MF4;
EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = NO;
INFOPLIST_FILE = ViperitTests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = org.acferran.ViperitTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 3.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ViperitExample.app/ViperitExample";
};
name = Release;
};
Expand All @@ -696,6 +720,7 @@
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Viperit/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = org.acferran.Viperit;
PRODUCT_NAME = "$(TARGET_NAME)";
Expand All @@ -718,6 +743,7 @@
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Viperit/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = org.acferran.Viperit;
PRODUCT_NAME = "$(TARGET_NAME)";
Expand Down Expand Up @@ -804,6 +830,7 @@
53D3AF2F1E0710E90099A464 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
Expand Down
56 changes: 56 additions & 0 deletions Viperit.xcodeproj/xcshareddata/xcschemes/ViperitTests.xcscheme
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0820"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
<TestableReference
skipped = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "53532C4B1DD50BD200088AAC"
BuildableName = "ViperitTests.xctest"
BlueprintName = "ViperitTests"
ReferencedContainer = "container:Viperit.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
36 changes: 36 additions & 0 deletions ViperitTests/ModuleTests.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
//
// ModuleTests.swift
// Viperit
//
// Created by Ferran Abelló on 17/03/2017.
// Copyright © 2017 Ferran Abelló. All rights reserved.
//

import XCTest
import Viperit

private enum TestModules: String, ViperitModule {
case sample
}

class ModuleTests: XCTestCase {
func testModuleBuilderPerformance() {
self.measure {
_ = Module.build(TestModules.sample, bundle: Bundle(for: SampleRouter.self))
}
}

func testModuleBuildCorrectComponents() {
let module = Module.build(TestModules.sample, bundle: Bundle(for: SampleRouter.self))

if module.view is SampleView,
module.interactor is SampleInteractor,
module.presenter is SamplePresenter,
module.router is SampleRouter,
module.displayData is SampleDisplayData {
XCTAssert(true)
} else {
XCTAssert(false)
}
}
}
26 changes: 26 additions & 0 deletions ViperitTests/Sample/Sample.storyboard
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="6211" systemVersion="14A298i" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6204"/>
</dependencies>
<scenes>
<scene sceneID="htw-l1-ahc">
<objects>
<viewController storyboardIdentifier="SampleView" id="xqD-av-Raz" customClass="SampleView" customModuleProvider="target" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="EcR-ye-kTk"/>
<viewControllerLayoutGuide type="bottom" id="vb6-4r-Epx"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="kgt-o0-aP8">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="nXm-AG-NXG" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="295" y="356"/>
</scene>
</scenes>
<scenes/>
</document>
14 changes: 14 additions & 0 deletions ViperitTests/Sample/SampleDisplayData.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
//
// SampleDisplayData.swift
// Viperit
//
// Created by Ferran Abelló on 17/03/2017.
// Copyright © 2017 Ferran Abelló. All rights reserved.
//

import Foundation
import Viperit

final class SampleDisplayData: DisplayData {

}
20 changes: 20 additions & 0 deletions ViperitTests/Sample/SampleInteractor.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
//
// SampleInteractor.swift
// Viperit
//
// Created by Ferran Abelló on 17/03/2017.
// Copyright © 2017 Ferran Abelló. All rights reserved.
//

import Foundation
import Viperit

final class SampleInteractor: Interactor {
}

// MARK: - VIPER COMPONENTS API (Auto-generated code)
private extension SampleInteractor {
var presenter: SamplePresenter {
return _presenter as! SamplePresenter
}
}
Loading

0 comments on commit 64b58b8

Please sign in to comment.