├── .gitignore
├── AutoMockableTests
├── AutoMockableTests.swift
└── Info.plist
├── AutoMocker.podspec
├── AutoMocker.xcodeproj
├── project.pbxproj
└── project.xcworkspace
│ └── xcshareddata
│ └── IDEWorkspaceChecks.plist
├── AutoMocker
├── AutoMockable.swift
├── AutoMocker.h
├── Info.plist
├── mock.swift
└── mocker.swift
├── AutoMockerTests
├── AutoMockerTests.swift
└── Info.plist
├── LICENSE
└── README.md
/.gitignore:
--------------------------------------------------------------------------------
1 | # Xcode
2 | #
3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
4 |
5 | ## Build generated
6 | build/
7 | DerivedData/
8 |
9 | ## Various settings
10 | *.pbxuser
11 | !default.pbxuser
12 | *.mode1v3
13 | !default.mode1v3
14 | *.mode2v3
15 | !default.mode2v3
16 | *.perspectivev3
17 | !default.perspectivev3
18 | xcuserdata/
19 |
20 | ## Other
21 | *.moved-aside
22 | *.xccheckout
23 | *.xcscmblueprint
24 |
25 | ## Obj-C/Swift specific
26 | *.hmap
27 | *.ipa
28 | *.dSYM.zip
29 | *.dSYM
30 |
31 | ## Playgrounds
32 | timeline.xctimeline
33 | playground.xcworkspace
34 |
35 | # Swift Package Manager
36 | #
37 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
38 | # Packages/
39 | # Package.pins
40 | # Package.resolved
41 | .build/
42 |
43 | # CocoaPods
44 | #
45 | # We recommend against adding the Pods directory to your .gitignore. However
46 | # you should judge for yourself, the pros and cons are mentioned at:
47 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
48 | #
49 | # Pods/
50 |
51 | # Carthage
52 | #
53 | # Add this line if you want to avoid checking in source code from Carthage dependencies.
54 | # Carthage/Checkouts
55 |
56 | Carthage/Build
57 |
58 | # fastlane
59 | #
60 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
61 | # screenshots whenever they are needed.
62 | # For more information about the recommended setup visit:
63 | # https://docs.fastlane.tools/best-practices/source-control/#source-control
64 |
65 | fastlane/report.xml
66 | fastlane/Preview.html
67 | fastlane/screenshots/**/*.png
68 | fastlane/test_output
69 |
--------------------------------------------------------------------------------
/AutoMockableTests/AutoMockableTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AutoMockableTests.swift
3 | // AutoMockableTests
4 | //
5 | // Created by Vincent on 16/07/2019.
6 | // Copyright © 2019 Vincent. All rights reserved.
7 | //
8 |
9 | import XCTest
10 | @testable import AutoMockable
11 |
12 | fileprivate struct MyData {
13 | let bool: Bool
14 | let string: String
15 | let integers: [Int]
16 | }
17 |
18 | class AutoMockableTests: XCTestCase {
19 |
20 | func testMockingBuildsSuccessfully() {
21 | _ = mock(MyData.init)
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/AutoMockableTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 |
22 |
23 |
--------------------------------------------------------------------------------
/AutoMocker.podspec:
--------------------------------------------------------------------------------
1 | Pod::Spec.new do |s|
2 | s.name = 'AutoMocker'
3 | s.version = '0.1.1'
4 | s.summary = 'AutoMocker is a Swift framework that leverages the type system to let you easily create mocked instances of your data types.'
5 |
6 | s.description = <<-DESC
7 | AutoMocker is a Swift framework that leverages the type system to let you easily create mocked instances of your data types.
8 |
9 | Here's an example of how it can be used:
10 |
11 | struct MyData {
12 | let bool: Bool
13 | let string: String
14 | let integers: [Int]
15 | }
16 |
17 | let mocked = mock(MyData.init) // a mocked instance has been created 🎉
18 | DESC
19 |
20 | s.homepage = 'https://github.com/vincent-pradeilles/AutoMocker'
21 | s.license = { :type => 'MIT', :file => 'LICENSE' }
22 | s.author = { 'Vincent Pradeilles' => 'vin.pradeilles+AutoMocker@gmail.com' }
23 | s.source = { :git => 'https://github.com/vincent-pradeilles/AutoMocker.git', :tag => s.version.to_s }
24 |
25 | s.swift_version = '5.1'
26 | s.ios.deployment_target = '9.0'
27 |
28 | s.framework = 'Foundation'
29 |
30 | s.source_files = 'AutoMocker/**/*.swift'
31 |
32 | end
33 |
--------------------------------------------------------------------------------
/AutoMocker.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 50;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | BF033D6A22DDE3C3006C38CC /* AutoMocker.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF033D6022DDE3C3006C38CC /* AutoMocker.framework */; };
11 | BF033D6F22DDE3C3006C38CC /* AutoMockerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF033D6E22DDE3C3006C38CC /* AutoMockerTests.swift */; };
12 | BF033D7122DDE3C3006C38CC /* AutoMocker.h in Headers */ = {isa = PBXBuildFile; fileRef = BF033D6322DDE3C3006C38CC /* AutoMocker.h */; settings = {ATTRIBUTES = (Public, ); }; };
13 | BF55F2FE22DDE43300458563 /* AutoMockable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF55F2FB22DDE43300458563 /* AutoMockable.swift */; };
14 | BF55F2FF22DDE43300458563 /* mocker.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF55F2FC22DDE43300458563 /* mocker.swift */; };
15 | BF55F30022DDE43300458563 /* mock.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF55F2FD22DDE43300458563 /* mock.swift */; };
16 | /* End PBXBuildFile section */
17 |
18 | /* Begin PBXContainerItemProxy section */
19 | BF033D6B22DDE3C3006C38CC /* PBXContainerItemProxy */ = {
20 | isa = PBXContainerItemProxy;
21 | containerPortal = BF033D5722DDE3C3006C38CC /* Project object */;
22 | proxyType = 1;
23 | remoteGlobalIDString = BF033D5F22DDE3C3006C38CC;
24 | remoteInfo = AutoMocker;
25 | };
26 | /* End PBXContainerItemProxy section */
27 |
28 | /* Begin PBXFileReference section */
29 | BF033D6022DDE3C3006C38CC /* AutoMocker.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AutoMocker.framework; sourceTree = BUILT_PRODUCTS_DIR; };
30 | BF033D6322DDE3C3006C38CC /* AutoMocker.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AutoMocker.h; sourceTree = ""; };
31 | BF033D6422DDE3C3006C38CC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
32 | BF033D6922DDE3C3006C38CC /* AutoMockerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AutoMockerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
33 | BF033D6E22DDE3C3006C38CC /* AutoMockerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoMockerTests.swift; sourceTree = ""; };
34 | BF033D7022DDE3C3006C38CC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
35 | BF55F2FB22DDE43300458563 /* AutoMockable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AutoMockable.swift; sourceTree = ""; };
36 | BF55F2FC22DDE43300458563 /* mocker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = mocker.swift; sourceTree = ""; };
37 | BF55F2FD22DDE43300458563 /* mock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = mock.swift; sourceTree = ""; };
38 | /* End PBXFileReference section */
39 |
40 | /* Begin PBXFrameworksBuildPhase section */
41 | BF033D5D22DDE3C3006C38CC /* Frameworks */ = {
42 | isa = PBXFrameworksBuildPhase;
43 | buildActionMask = 2147483647;
44 | files = (
45 | );
46 | runOnlyForDeploymentPostprocessing = 0;
47 | };
48 | BF033D6622DDE3C3006C38CC /* Frameworks */ = {
49 | isa = PBXFrameworksBuildPhase;
50 | buildActionMask = 2147483647;
51 | files = (
52 | BF033D6A22DDE3C3006C38CC /* AutoMocker.framework in Frameworks */,
53 | );
54 | runOnlyForDeploymentPostprocessing = 0;
55 | };
56 | /* End PBXFrameworksBuildPhase section */
57 |
58 | /* Begin PBXGroup section */
59 | BF033D5622DDE3C3006C38CC = {
60 | isa = PBXGroup;
61 | children = (
62 | BF033D6222DDE3C3006C38CC /* AutoMocker */,
63 | BF033D6D22DDE3C3006C38CC /* AutoMockerTests */,
64 | BF033D6122DDE3C3006C38CC /* Products */,
65 | );
66 | sourceTree = "";
67 | };
68 | BF033D6122DDE3C3006C38CC /* Products */ = {
69 | isa = PBXGroup;
70 | children = (
71 | BF033D6022DDE3C3006C38CC /* AutoMocker.framework */,
72 | BF033D6922DDE3C3006C38CC /* AutoMockerTests.xctest */,
73 | );
74 | name = Products;
75 | sourceTree = "";
76 | };
77 | BF033D6222DDE3C3006C38CC /* AutoMocker */ = {
78 | isa = PBXGroup;
79 | children = (
80 | BF033D6322DDE3C3006C38CC /* AutoMocker.h */,
81 | BF55F2FB22DDE43300458563 /* AutoMockable.swift */,
82 | BF55F2FD22DDE43300458563 /* mock.swift */,
83 | BF55F2FC22DDE43300458563 /* mocker.swift */,
84 | BF033D6422DDE3C3006C38CC /* Info.plist */,
85 | );
86 | path = AutoMocker;
87 | sourceTree = "";
88 | };
89 | BF033D6D22DDE3C3006C38CC /* AutoMockerTests */ = {
90 | isa = PBXGroup;
91 | children = (
92 | BF033D6E22DDE3C3006C38CC /* AutoMockerTests.swift */,
93 | BF033D7022DDE3C3006C38CC /* Info.plist */,
94 | );
95 | path = AutoMockerTests;
96 | sourceTree = "";
97 | };
98 | /* End PBXGroup section */
99 |
100 | /* Begin PBXHeadersBuildPhase section */
101 | BF033D5B22DDE3C3006C38CC /* Headers */ = {
102 | isa = PBXHeadersBuildPhase;
103 | buildActionMask = 2147483647;
104 | files = (
105 | BF033D7122DDE3C3006C38CC /* AutoMocker.h in Headers */,
106 | );
107 | runOnlyForDeploymentPostprocessing = 0;
108 | };
109 | /* End PBXHeadersBuildPhase section */
110 |
111 | /* Begin PBXNativeTarget section */
112 | BF033D5F22DDE3C3006C38CC /* AutoMocker */ = {
113 | isa = PBXNativeTarget;
114 | buildConfigurationList = BF033D7422DDE3C3006C38CC /* Build configuration list for PBXNativeTarget "AutoMocker" */;
115 | buildPhases = (
116 | BF033D5B22DDE3C3006C38CC /* Headers */,
117 | BF033D5C22DDE3C3006C38CC /* Sources */,
118 | BF033D5D22DDE3C3006C38CC /* Frameworks */,
119 | BF033D5E22DDE3C3006C38CC /* Resources */,
120 | );
121 | buildRules = (
122 | );
123 | dependencies = (
124 | );
125 | name = AutoMocker;
126 | productName = AutoMocker;
127 | productReference = BF033D6022DDE3C3006C38CC /* AutoMocker.framework */;
128 | productType = "com.apple.product-type.framework";
129 | };
130 | BF033D6822DDE3C3006C38CC /* AutoMockerTests */ = {
131 | isa = PBXNativeTarget;
132 | buildConfigurationList = BF033D7722DDE3C3006C38CC /* Build configuration list for PBXNativeTarget "AutoMockerTests" */;
133 | buildPhases = (
134 | BF033D6522DDE3C3006C38CC /* Sources */,
135 | BF033D6622DDE3C3006C38CC /* Frameworks */,
136 | BF033D6722DDE3C3006C38CC /* Resources */,
137 | );
138 | buildRules = (
139 | );
140 | dependencies = (
141 | BF033D6C22DDE3C3006C38CC /* PBXTargetDependency */,
142 | );
143 | name = AutoMockerTests;
144 | productName = AutoMockerTests;
145 | productReference = BF033D6922DDE3C3006C38CC /* AutoMockerTests.xctest */;
146 | productType = "com.apple.product-type.bundle.unit-test";
147 | };
148 | /* End PBXNativeTarget section */
149 |
150 | /* Begin PBXProject section */
151 | BF033D5722DDE3C3006C38CC /* Project object */ = {
152 | isa = PBXProject;
153 | attributes = {
154 | LastSwiftUpdateCheck = 1100;
155 | LastUpgradeCheck = 1100;
156 | ORGANIZATIONNAME = Vincent;
157 | TargetAttributes = {
158 | BF033D5F22DDE3C3006C38CC = {
159 | CreatedOnToolsVersion = 11.0;
160 | LastSwiftMigration = 1100;
161 | };
162 | BF033D6822DDE3C3006C38CC = {
163 | CreatedOnToolsVersion = 11.0;
164 | };
165 | };
166 | };
167 | buildConfigurationList = BF033D5A22DDE3C3006C38CC /* Build configuration list for PBXProject "AutoMocker" */;
168 | compatibilityVersion = "Xcode 9.3";
169 | developmentRegion = en;
170 | hasScannedForEncodings = 0;
171 | knownRegions = (
172 | en,
173 | Base,
174 | );
175 | mainGroup = BF033D5622DDE3C3006C38CC;
176 | productRefGroup = BF033D6122DDE3C3006C38CC /* Products */;
177 | projectDirPath = "";
178 | projectRoot = "";
179 | targets = (
180 | BF033D5F22DDE3C3006C38CC /* AutoMocker */,
181 | BF033D6822DDE3C3006C38CC /* AutoMockerTests */,
182 | );
183 | };
184 | /* End PBXProject section */
185 |
186 | /* Begin PBXResourcesBuildPhase section */
187 | BF033D5E22DDE3C3006C38CC /* Resources */ = {
188 | isa = PBXResourcesBuildPhase;
189 | buildActionMask = 2147483647;
190 | files = (
191 | );
192 | runOnlyForDeploymentPostprocessing = 0;
193 | };
194 | BF033D6722DDE3C3006C38CC /* Resources */ = {
195 | isa = PBXResourcesBuildPhase;
196 | buildActionMask = 2147483647;
197 | files = (
198 | );
199 | runOnlyForDeploymentPostprocessing = 0;
200 | };
201 | /* End PBXResourcesBuildPhase section */
202 |
203 | /* Begin PBXSourcesBuildPhase section */
204 | BF033D5C22DDE3C3006C38CC /* Sources */ = {
205 | isa = PBXSourcesBuildPhase;
206 | buildActionMask = 2147483647;
207 | files = (
208 | BF55F2FF22DDE43300458563 /* mocker.swift in Sources */,
209 | BF55F30022DDE43300458563 /* mock.swift in Sources */,
210 | BF55F2FE22DDE43300458563 /* AutoMockable.swift in Sources */,
211 | );
212 | runOnlyForDeploymentPostprocessing = 0;
213 | };
214 | BF033D6522DDE3C3006C38CC /* Sources */ = {
215 | isa = PBXSourcesBuildPhase;
216 | buildActionMask = 2147483647;
217 | files = (
218 | BF033D6F22DDE3C3006C38CC /* AutoMockerTests.swift in Sources */,
219 | );
220 | runOnlyForDeploymentPostprocessing = 0;
221 | };
222 | /* End PBXSourcesBuildPhase section */
223 |
224 | /* Begin PBXTargetDependency section */
225 | BF033D6C22DDE3C3006C38CC /* PBXTargetDependency */ = {
226 | isa = PBXTargetDependency;
227 | target = BF033D5F22DDE3C3006C38CC /* AutoMocker */;
228 | targetProxy = BF033D6B22DDE3C3006C38CC /* PBXContainerItemProxy */;
229 | };
230 | /* End PBXTargetDependency section */
231 |
232 | /* Begin XCBuildConfiguration section */
233 | BF033D7222DDE3C3006C38CC /* Debug */ = {
234 | isa = XCBuildConfiguration;
235 | buildSettings = {
236 | ALWAYS_SEARCH_USER_PATHS = NO;
237 | CLANG_ANALYZER_NONNULL = YES;
238 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
239 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
240 | CLANG_CXX_LIBRARY = "libc++";
241 | CLANG_ENABLE_MODULES = YES;
242 | CLANG_ENABLE_OBJC_ARC = YES;
243 | CLANG_ENABLE_OBJC_WEAK = YES;
244 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
245 | CLANG_WARN_BOOL_CONVERSION = YES;
246 | CLANG_WARN_COMMA = YES;
247 | CLANG_WARN_CONSTANT_CONVERSION = YES;
248 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
249 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
250 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
251 | CLANG_WARN_EMPTY_BODY = YES;
252 | CLANG_WARN_ENUM_CONVERSION = YES;
253 | CLANG_WARN_INFINITE_RECURSION = YES;
254 | CLANG_WARN_INT_CONVERSION = YES;
255 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
256 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
257 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
258 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
259 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
260 | CLANG_WARN_STRICT_PROTOTYPES = YES;
261 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
262 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
263 | CLANG_WARN_UNREACHABLE_CODE = YES;
264 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
265 | COPY_PHASE_STRIP = NO;
266 | CURRENT_PROJECT_VERSION = 1;
267 | DEBUG_INFORMATION_FORMAT = dwarf;
268 | ENABLE_STRICT_OBJC_MSGSEND = YES;
269 | ENABLE_TESTABILITY = YES;
270 | GCC_C_LANGUAGE_STANDARD = gnu11;
271 | GCC_DYNAMIC_NO_PIC = NO;
272 | GCC_NO_COMMON_BLOCKS = YES;
273 | GCC_OPTIMIZATION_LEVEL = 0;
274 | GCC_PREPROCESSOR_DEFINITIONS = (
275 | "DEBUG=1",
276 | "$(inherited)",
277 | );
278 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
279 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
280 | GCC_WARN_UNDECLARED_SELECTOR = YES;
281 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
282 | GCC_WARN_UNUSED_FUNCTION = YES;
283 | GCC_WARN_UNUSED_VARIABLE = YES;
284 | IPHONEOS_DEPLOYMENT_TARGET = 13.0;
285 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
286 | MTL_FAST_MATH = YES;
287 | ONLY_ACTIVE_ARCH = YES;
288 | SDKROOT = iphoneos;
289 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
290 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
291 | VERSIONING_SYSTEM = "apple-generic";
292 | VERSION_INFO_PREFIX = "";
293 | };
294 | name = Debug;
295 | };
296 | BF033D7322DDE3C3006C38CC /* Release */ = {
297 | isa = XCBuildConfiguration;
298 | buildSettings = {
299 | ALWAYS_SEARCH_USER_PATHS = NO;
300 | CLANG_ANALYZER_NONNULL = YES;
301 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
302 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
303 | CLANG_CXX_LIBRARY = "libc++";
304 | CLANG_ENABLE_MODULES = YES;
305 | CLANG_ENABLE_OBJC_ARC = YES;
306 | CLANG_ENABLE_OBJC_WEAK = YES;
307 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
308 | CLANG_WARN_BOOL_CONVERSION = YES;
309 | CLANG_WARN_COMMA = YES;
310 | CLANG_WARN_CONSTANT_CONVERSION = YES;
311 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
312 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
313 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
314 | CLANG_WARN_EMPTY_BODY = YES;
315 | CLANG_WARN_ENUM_CONVERSION = YES;
316 | CLANG_WARN_INFINITE_RECURSION = YES;
317 | CLANG_WARN_INT_CONVERSION = YES;
318 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
319 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
320 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
321 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
322 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
323 | CLANG_WARN_STRICT_PROTOTYPES = YES;
324 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
325 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
326 | CLANG_WARN_UNREACHABLE_CODE = YES;
327 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
328 | COPY_PHASE_STRIP = NO;
329 | CURRENT_PROJECT_VERSION = 1;
330 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
331 | ENABLE_NS_ASSERTIONS = NO;
332 | ENABLE_STRICT_OBJC_MSGSEND = YES;
333 | GCC_C_LANGUAGE_STANDARD = gnu11;
334 | GCC_NO_COMMON_BLOCKS = YES;
335 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
336 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
337 | GCC_WARN_UNDECLARED_SELECTOR = YES;
338 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
339 | GCC_WARN_UNUSED_FUNCTION = YES;
340 | GCC_WARN_UNUSED_VARIABLE = YES;
341 | IPHONEOS_DEPLOYMENT_TARGET = 13.0;
342 | MTL_ENABLE_DEBUG_INFO = NO;
343 | MTL_FAST_MATH = YES;
344 | SDKROOT = iphoneos;
345 | SWIFT_COMPILATION_MODE = wholemodule;
346 | SWIFT_OPTIMIZATION_LEVEL = "-O";
347 | VALIDATE_PRODUCT = YES;
348 | VERSIONING_SYSTEM = "apple-generic";
349 | VERSION_INFO_PREFIX = "";
350 | };
351 | name = Release;
352 | };
353 | BF033D7522DDE3C3006C38CC /* Debug */ = {
354 | isa = XCBuildConfiguration;
355 | buildSettings = {
356 | CLANG_ENABLE_MODULES = YES;
357 | CODE_SIGN_STYLE = Automatic;
358 | DEFINES_MODULE = YES;
359 | DEVELOPMENT_TEAM = 2937XWQ9VF;
360 | DYLIB_COMPATIBILITY_VERSION = 1;
361 | DYLIB_CURRENT_VERSION = 1;
362 | DYLIB_INSTALL_NAME_BASE = "@rpath";
363 | INFOPLIST_FILE = AutoMocker/Info.plist;
364 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
365 | LD_RUNPATH_SEARCH_PATHS = (
366 | "$(inherited)",
367 | "@executable_path/Frameworks",
368 | "@loader_path/Frameworks",
369 | );
370 | PRODUCT_BUNDLE_IDENTIFIER = fr.vincentpradeilles.AutoMocker;
371 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
372 | SKIP_INSTALL = YES;
373 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
374 | SWIFT_VERSION = 5.0;
375 | TARGETED_DEVICE_FAMILY = "1,2";
376 | };
377 | name = Debug;
378 | };
379 | BF033D7622DDE3C3006C38CC /* Release */ = {
380 | isa = XCBuildConfiguration;
381 | buildSettings = {
382 | CLANG_ENABLE_MODULES = YES;
383 | CODE_SIGN_STYLE = Automatic;
384 | DEFINES_MODULE = YES;
385 | DEVELOPMENT_TEAM = 2937XWQ9VF;
386 | DYLIB_COMPATIBILITY_VERSION = 1;
387 | DYLIB_CURRENT_VERSION = 1;
388 | DYLIB_INSTALL_NAME_BASE = "@rpath";
389 | INFOPLIST_FILE = AutoMocker/Info.plist;
390 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
391 | LD_RUNPATH_SEARCH_PATHS = (
392 | "$(inherited)",
393 | "@executable_path/Frameworks",
394 | "@loader_path/Frameworks",
395 | );
396 | PRODUCT_BUNDLE_IDENTIFIER = fr.vincentpradeilles.AutoMocker;
397 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
398 | SKIP_INSTALL = YES;
399 | SWIFT_VERSION = 5.0;
400 | TARGETED_DEVICE_FAMILY = "1,2";
401 | };
402 | name = Release;
403 | };
404 | BF033D7822DDE3C3006C38CC /* Debug */ = {
405 | isa = XCBuildConfiguration;
406 | buildSettings = {
407 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
408 | CODE_SIGN_STYLE = Automatic;
409 | DEVELOPMENT_TEAM = 2937XWQ9VF;
410 | INFOPLIST_FILE = AutoMockerTests/Info.plist;
411 | LD_RUNPATH_SEARCH_PATHS = (
412 | "$(inherited)",
413 | "@executable_path/Frameworks",
414 | "@loader_path/Frameworks",
415 | );
416 | PRODUCT_BUNDLE_IDENTIFIER = fr.vincentpradeilles.AutoMockerTests;
417 | PRODUCT_NAME = "$(TARGET_NAME)";
418 | SWIFT_VERSION = 5.0;
419 | TARGETED_DEVICE_FAMILY = "1,2";
420 | };
421 | name = Debug;
422 | };
423 | BF033D7922DDE3C3006C38CC /* Release */ = {
424 | isa = XCBuildConfiguration;
425 | buildSettings = {
426 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
427 | CODE_SIGN_STYLE = Automatic;
428 | DEVELOPMENT_TEAM = 2937XWQ9VF;
429 | INFOPLIST_FILE = AutoMockerTests/Info.plist;
430 | LD_RUNPATH_SEARCH_PATHS = (
431 | "$(inherited)",
432 | "@executable_path/Frameworks",
433 | "@loader_path/Frameworks",
434 | );
435 | PRODUCT_BUNDLE_IDENTIFIER = fr.vincentpradeilles.AutoMockerTests;
436 | PRODUCT_NAME = "$(TARGET_NAME)";
437 | SWIFT_VERSION = 5.0;
438 | TARGETED_DEVICE_FAMILY = "1,2";
439 | };
440 | name = Release;
441 | };
442 | /* End XCBuildConfiguration section */
443 |
444 | /* Begin XCConfigurationList section */
445 | BF033D5A22DDE3C3006C38CC /* Build configuration list for PBXProject "AutoMocker" */ = {
446 | isa = XCConfigurationList;
447 | buildConfigurations = (
448 | BF033D7222DDE3C3006C38CC /* Debug */,
449 | BF033D7322DDE3C3006C38CC /* Release */,
450 | );
451 | defaultConfigurationIsVisible = 0;
452 | defaultConfigurationName = Release;
453 | };
454 | BF033D7422DDE3C3006C38CC /* Build configuration list for PBXNativeTarget "AutoMocker" */ = {
455 | isa = XCConfigurationList;
456 | buildConfigurations = (
457 | BF033D7522DDE3C3006C38CC /* Debug */,
458 | BF033D7622DDE3C3006C38CC /* Release */,
459 | );
460 | defaultConfigurationIsVisible = 0;
461 | defaultConfigurationName = Release;
462 | };
463 | BF033D7722DDE3C3006C38CC /* Build configuration list for PBXNativeTarget "AutoMockerTests" */ = {
464 | isa = XCConfigurationList;
465 | buildConfigurations = (
466 | BF033D7822DDE3C3006C38CC /* Debug */,
467 | BF033D7922DDE3C3006C38CC /* Release */,
468 | );
469 | defaultConfigurationIsVisible = 0;
470 | defaultConfigurationName = Release;
471 | };
472 | /* End XCConfigurationList section */
473 | };
474 | rootObject = BF033D5722DDE3C3006C38CC /* Project object */;
475 | }
476 |
--------------------------------------------------------------------------------
/AutoMocker.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/AutoMocker/AutoMockable.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AutoMockable.swift
3 | // AutoMockable
4 | //
5 | // Created by Vincent on 16/07/2019.
6 | // Copyright © 2019 Vincent. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | public protocol AutoMockable {
12 | static func mocked() -> Self
13 | }
14 |
15 | extension Int: AutoMockable {
16 | public static func mocked() -> Int {
17 | return Int.random(in: 0...Int.max)
18 | }
19 | }
20 |
21 | extension Float: AutoMockable {
22 | public static func mocked() -> Float {
23 | return Float.random(in: Float.leastNormalMagnitude...Float.greatestFiniteMagnitude)
24 | }
25 | }
26 |
27 | extension Double: AutoMockable {
28 | public static func mocked() -> Double {
29 | return Double.random(in: Double.leastNormalMagnitude...Double.greatestFiniteMagnitude)
30 | }
31 | }
32 |
33 | extension Bool: AutoMockable {
34 | public static func mocked() -> Bool {
35 | return Bool.random()
36 | }
37 | }
38 |
39 | extension Character: AutoMockable {
40 | public static func mocked() -> Character {
41 | let letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
42 |
43 | return letters.randomElement()!
44 | }
45 | }
46 |
47 | extension String: AutoMockable {
48 | public static func mocked() -> String {
49 | let characters = (0...Int.random(in: 0...100)).map { _ in Character.mocked() }
50 |
51 | return String(characters)
52 | }
53 | }
54 |
55 | extension Array: AutoMockable where Element: AutoMockable {
56 | public static func mocked() -> Array {
57 | return (0...Int.random(in: 0...100)).map { _ in Element.mocked() }
58 | }
59 | }
60 |
61 | extension Dictionary: AutoMockable where Key: AutoMockable, Value: AutoMockable {
62 | public static func mocked() -> Dictionary {
63 | let pairs = (0...Int.random(in: 0...100)).map { _ in (Key.mocked(), Value.mocked()) }
64 |
65 | return Dictionary(uniqueKeysWithValues: pairs)
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/AutoMocker/AutoMocker.h:
--------------------------------------------------------------------------------
1 | //
2 | // AutoMocker.h
3 | // AutoMocker
4 | //
5 | // Created by Vincent on 16/07/2019.
6 | // Copyright © 2019 Vincent. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | //! Project version number for AutoMocker.
12 | FOUNDATION_EXPORT double AutoMockerVersionNumber;
13 |
14 | //! Project version string for AutoMocker.
15 | FOUNDATION_EXPORT const unsigned char AutoMockerVersionString[];
16 |
17 | // In this header, you should import all the public headers of your framework using statements like #import
18 |
19 |
20 |
--------------------------------------------------------------------------------
/AutoMocker/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | $(CURRENT_PROJECT_VERSION)
21 |
22 |
23 |
--------------------------------------------------------------------------------
/AutoMocker/mock.swift:
--------------------------------------------------------------------------------
1 | //
2 | // mock.swift
3 | // AutoMockable
4 | //
5 | // Created by Vincent on 16/07/2019.
6 | // Copyright © 2019 Vincent. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | public func mock(_ factory: (A) -> B) -> B {
12 | return factory(A.mocked())
13 | }
14 |
15 | public func mock(_ factory: (A, B) -> C) -> C {
16 | return factory(A.mocked(), B.mocked())
17 | }
18 |
19 | public func mock(_ factory: @escaping (A, B, C) -> D) -> D {
20 | return factory(A.mocked(), B.mocked(), C.mocked())
21 | }
22 |
23 | public func mock(_ factory: @escaping (A, B, C, D) -> E) -> E {
24 | return factory(A.mocked(), B.mocked(), C.mocked(), D.mocked())
25 | }
26 |
27 | public func mock(_ factory: @escaping (A, B, C, D, E) -> F) -> F {
28 | return factory(A.mocked(), B.mocked(), C.mocked(), D.mocked(), E.mocked())
29 | }
30 |
31 | public func mock(_ factory: @escaping (A, B, C, D, E, F) -> G) -> G {
32 | return factory(A.mocked(), B.mocked(), C.mocked(), D.mocked(), E.mocked(), F.mocked())
33 | }
34 |
--------------------------------------------------------------------------------
/AutoMocker/mocker.swift:
--------------------------------------------------------------------------------
1 | //
2 | // mocker.swift
3 | // AutoMockable
4 | //
5 | // Created by Vincent on 16/07/2019.
6 | // Copyright © 2019 Vincent. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | public func mocker(_ factory: @escaping (A) -> B) -> () -> B {
12 | return {
13 | return factory(A.mocked())
14 | }
15 | }
16 |
17 | public func mocker(_ factory: @escaping (A, B) -> C) -> () -> C {
18 | return {
19 | return factory(A.mocked(), B.mocked())
20 | }
21 | }
22 |
23 |
24 | public func mocker(_ factory: @escaping (A, B, C) -> D) -> () -> D {
25 | return {
26 | return factory(A.mocked(), B.mocked(), C.mocked())
27 | }
28 | }
29 |
30 | public func mocker(_ factory: @escaping (A, B, C, D) -> E) -> () -> E {
31 | return {
32 | return factory(A.mocked(), B.mocked(), C.mocked(), D.mocked())
33 | }
34 | }
35 |
36 | public func mocker(_ factory: @escaping (A, B, C, D, E) -> F) -> () -> F {
37 | return {
38 | return factory(A.mocked(), B.mocked(), C.mocked(), D.mocked(), E.mocked())
39 | }
40 | }
41 |
42 | public func mocker(_ factory: @escaping (A, B, C, D, E, F) -> G) -> () -> G {
43 | return {
44 | return factory(A.mocked(), B.mocked(), C.mocked(), D.mocked(), E.mocked(), F.mocked())
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/AutoMockerTests/AutoMockerTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AutoMockableTests.swift
3 | // AutoMockableTests
4 | //
5 | // Created by Vincent on 16/07/2019.
6 | // Copyright © 2019 Vincent. All rights reserved.
7 | //
8 |
9 | import XCTest
10 | import AutoMocker
11 |
12 | fileprivate struct MyData {
13 | let bool: Bool
14 | let string: String
15 | let integers: [Int]
16 | }
17 |
18 | class AutoMockableTests: XCTestCase {
19 |
20 | func testMockingBuildsSuccessfully() {
21 | _ = mock(MyData.init)
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/AutoMockerTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 |
22 |
23 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 Vincent Pradeilles
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # AutoMocker
2 |
3 | 
4 | 
5 | [](https://github.com/Carthage/Carthage)
6 |
7 | ## Context
8 |
9 | AutoMocker is a Swift framework that leverages the type system to let you easily create mocked instances of your data types.
10 |
11 | Here's an example of how it can be used:
12 |
13 | ```swift
14 | struct MyData {
15 | let bool: Bool
16 | let string: String
17 | let integers: [Int]
18 | }
19 |
20 | let mocked = mock(MyData.init) // a mocked instance has been created 🎉
21 | ```
22 |
23 | For the moment, AutoMocker supports initializers that take up to 6 arguments.
24 |
25 | ## Requirements
26 |
27 | Xcode 10+ & Swift 5.0
28 |
29 | ## Installation
30 |
31 | ### CocoaPods
32 |
33 | Add the following to your `Podfile`:
34 |
35 | `pod "AutoMocker"`
36 |
37 | ### Carthage
38 |
39 | Add the following to your `Cartfile`:
40 |
41 | `github "vincent-pradeilles/AutoMocker"`
42 |
43 | ## Author
44 |
45 | * Twitter: [@v_pradeilles](https://twitter.com/v_pradeilles)
46 |
--------------------------------------------------------------------------------