xcodebuild-helper 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (202) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +20 -0
  3. data/.gitignore +1 -0
  4. data/.rspec +2 -0
  5. data/.travis.yml +7 -0
  6. data/Gemfile +6 -0
  7. data/Gemfile.lock +110 -0
  8. data/Guardfile +18 -0
  9. data/README.md +7 -0
  10. data/Rakefile +7 -0
  11. data/TODO.md +3 -0
  12. data/bin/oclint +5 -0
  13. data/bin/oclint-0.8 +5 -0
  14. data/bin/oclint-json-compilation-database +5 -0
  15. data/bin/oclint-xcodebuild +5 -0
  16. data/externals/oclint/LICENSE +69 -0
  17. data/externals/oclint/bin/oclint +0 -0
  18. data/externals/oclint/bin/oclint-0.10.2 +0 -0
  19. data/externals/oclint/bin/oclint-json-compilation-database +88 -0
  20. data/externals/oclint/bin/oclint-xcodebuild +218 -0
  21. data/externals/oclint/lib/clang/3.7.0/asan_blacklist.txt +13 -0
  22. data/externals/oclint/lib/clang/3.7.0/include/Intrin.h +958 -0
  23. data/externals/oclint/lib/clang/3.7.0/include/__stddef_max_align_t.h +43 -0
  24. data/externals/oclint/lib/clang/3.7.0/include/__wmmintrin_aes.h +72 -0
  25. data/externals/oclint/lib/clang/3.7.0/include/__wmmintrin_pclmul.h +34 -0
  26. data/externals/oclint/lib/clang/3.7.0/include/adxintrin.h +88 -0
  27. data/externals/oclint/lib/clang/3.7.0/include/altivec.h +13528 -0
  28. data/externals/oclint/lib/clang/3.7.0/include/ammintrin.h +215 -0
  29. data/externals/oclint/lib/clang/3.7.0/include/arm_acle.h +304 -0
  30. data/externals/oclint/lib/clang/3.7.0/include/arm_neon.h +68419 -0
  31. data/externals/oclint/lib/clang/3.7.0/include/avx2intrin.h +1256 -0
  32. data/externals/oclint/lib/clang/3.7.0/include/avx512bwintrin.h +1250 -0
  33. data/externals/oclint/lib/clang/3.7.0/include/avx512cdintrin.h +131 -0
  34. data/externals/oclint/lib/clang/3.7.0/include/avx512dqintrin.h +242 -0
  35. data/externals/oclint/lib/clang/3.7.0/include/avx512erintrin.h +285 -0
  36. data/externals/oclint/lib/clang/3.7.0/include/avx512fintrin.h +2457 -0
  37. data/externals/oclint/lib/clang/3.7.0/include/avx512vlbwintrin.h +1907 -0
  38. data/externals/oclint/lib/clang/3.7.0/include/avx512vldqintrin.h +353 -0
  39. data/externals/oclint/lib/clang/3.7.0/include/avx512vlintrin.h +1982 -0
  40. data/externals/oclint/lib/clang/3.7.0/include/avxintrin.h +1308 -0
  41. data/externals/oclint/lib/clang/3.7.0/include/bmi2intrin.h +99 -0
  42. data/externals/oclint/lib/clang/3.7.0/include/bmiintrin.h +153 -0
  43. data/externals/oclint/lib/clang/3.7.0/include/cpuid.h +209 -0
  44. data/externals/oclint/lib/clang/3.7.0/include/cuda_builtin_vars.h +110 -0
  45. data/externals/oclint/lib/clang/3.7.0/include/emmintrin.h +1480 -0
  46. data/externals/oclint/lib/clang/3.7.0/include/f16cintrin.h +63 -0
  47. data/externals/oclint/lib/clang/3.7.0/include/float.h +124 -0
  48. data/externals/oclint/lib/clang/3.7.0/include/fma4intrin.h +236 -0
  49. data/externals/oclint/lib/clang/3.7.0/include/fmaintrin.h +234 -0
  50. data/externals/oclint/lib/clang/3.7.0/include/fxsrintrin.h +55 -0
  51. data/externals/oclint/lib/clang/3.7.0/include/htmintrin.h +226 -0
  52. data/externals/oclint/lib/clang/3.7.0/include/htmxlintrin.h +363 -0
  53. data/externals/oclint/lib/clang/3.7.0/include/ia32intrin.h +101 -0
  54. data/externals/oclint/lib/clang/3.7.0/include/immintrin.h +203 -0
  55. data/externals/oclint/lib/clang/3.7.0/include/inttypes.h +102 -0
  56. data/externals/oclint/lib/clang/3.7.0/include/iso646.h +43 -0
  57. data/externals/oclint/lib/clang/3.7.0/include/limits.h +118 -0
  58. data/externals/oclint/lib/clang/3.7.0/include/lzcntintrin.h +72 -0
  59. data/externals/oclint/lib/clang/3.7.0/include/mm3dnow.h +167 -0
  60. data/externals/oclint/lib/clang/3.7.0/include/mm_malloc.h +75 -0
  61. data/externals/oclint/lib/clang/3.7.0/include/mmintrin.h +507 -0
  62. data/externals/oclint/lib/clang/3.7.0/include/module.modulemap +196 -0
  63. data/externals/oclint/lib/clang/3.7.0/include/nmmintrin.h +35 -0
  64. data/externals/oclint/lib/clang/3.7.0/include/pmmintrin.h +122 -0
  65. data/externals/oclint/lib/clang/3.7.0/include/popcntintrin.h +50 -0
  66. data/externals/oclint/lib/clang/3.7.0/include/prfchwintrin.h +39 -0
  67. data/externals/oclint/lib/clang/3.7.0/include/rdseedintrin.h +59 -0
  68. data/externals/oclint/lib/clang/3.7.0/include/rtmintrin.h +59 -0
  69. data/externals/oclint/lib/clang/3.7.0/include/s390intrin.h +39 -0
  70. data/externals/oclint/lib/clang/3.7.0/include/sanitizer/allocator_interface.h +66 -0
  71. data/externals/oclint/lib/clang/3.7.0/include/sanitizer/asan_interface.h +155 -0
  72. data/externals/oclint/lib/clang/3.7.0/include/sanitizer/common_interface_defs.h +118 -0
  73. data/externals/oclint/lib/clang/3.7.0/include/sanitizer/coverage_interface.h +63 -0
  74. data/externals/oclint/lib/clang/3.7.0/include/sanitizer/dfsan_interface.h +114 -0
  75. data/externals/oclint/lib/clang/3.7.0/include/sanitizer/linux_syscall_hooks.h +3070 -0
  76. data/externals/oclint/lib/clang/3.7.0/include/sanitizer/lsan_interface.h +84 -0
  77. data/externals/oclint/lib/clang/3.7.0/include/sanitizer/msan_interface.h +107 -0
  78. data/externals/oclint/lib/clang/3.7.0/include/sanitizer/tsan_interface_atomic.h +222 -0
  79. data/externals/oclint/lib/clang/3.7.0/include/shaintrin.h +79 -0
  80. data/externals/oclint/lib/clang/3.7.0/include/smmintrin.h +487 -0
  81. data/externals/oclint/lib/clang/3.7.0/include/stdalign.h +35 -0
  82. data/externals/oclint/lib/clang/3.7.0/include/stdarg.h +52 -0
  83. data/externals/oclint/lib/clang/3.7.0/include/stdatomic.h +190 -0
  84. data/externals/oclint/lib/clang/3.7.0/include/stdbool.h +44 -0
  85. data/externals/oclint/lib/clang/3.7.0/include/stddef.h +137 -0
  86. data/externals/oclint/lib/clang/3.7.0/include/stdint.h +707 -0
  87. data/externals/oclint/lib/clang/3.7.0/include/stdnoreturn.h +30 -0
  88. data/externals/oclint/lib/clang/3.7.0/include/tbmintrin.h +154 -0
  89. data/externals/oclint/lib/clang/3.7.0/include/tgmath.h +1374 -0
  90. data/externals/oclint/lib/clang/3.7.0/include/tmmintrin.h +230 -0
  91. data/externals/oclint/lib/clang/3.7.0/include/unwind.h +282 -0
  92. data/externals/oclint/lib/clang/3.7.0/include/vadefs.h +65 -0
  93. data/externals/oclint/lib/clang/3.7.0/include/varargs.h +26 -0
  94. data/externals/oclint/lib/clang/3.7.0/include/vecintrin.h +8946 -0
  95. data/externals/oclint/lib/clang/3.7.0/include/wmmintrin.h +42 -0
  96. data/externals/oclint/lib/clang/3.7.0/include/x86intrin.h +81 -0
  97. data/externals/oclint/lib/clang/3.7.0/include/xmmintrin.h +1008 -0
  98. data/externals/oclint/lib/clang/3.7.0/include/xopintrin.h +809 -0
  99. data/externals/oclint/lib/clang/3.7.0/include/xtestintrin.h +41 -0
  100. data/externals/oclint/lib/clang/3.7.0/lib/darwin/libclang_rt.asan_iossim_dynamic.dylib +0 -0
  101. data/externals/oclint/lib/clang/3.7.0/lib/darwin/libclang_rt.asan_osx_dynamic.dylib +0 -0
  102. data/externals/oclint/lib/clang/3.7.0/lib/darwin/libclang_rt.builtins-i386.a +0 -0
  103. data/externals/oclint/lib/clang/3.7.0/lib/darwin/libclang_rt.builtins-x86_64.a +0 -0
  104. data/externals/oclint/lib/clang/3.7.0/lib/darwin/libclang_rt.profile_osx.a +0 -0
  105. data/externals/oclint/lib/clang/3.7.0/lib/darwin/libclang_rt.safestack_osx.a +0 -0
  106. data/externals/oclint/lib/clang/3.7.0/lib/darwin/libclang_rt.ubsan_iossim_dynamic.dylib +0 -0
  107. data/externals/oclint/lib/clang/3.7.0/lib/darwin/libclang_rt.ubsan_osx_dynamic.dylib +0 -0
  108. data/externals/oclint/lib/oclint/reporters/libHTMLReporter.dylib +0 -0
  109. data/externals/oclint/lib/oclint/reporters/libJSONReporter.dylib +0 -0
  110. data/externals/oclint/lib/oclint/reporters/libPMDReporter.dylib +0 -0
  111. data/externals/oclint/lib/oclint/reporters/libTextReporter.dylib +0 -0
  112. data/externals/oclint/lib/oclint/reporters/libXMLReporter.dylib +0 -0
  113. data/externals/oclint/lib/oclint/reporters/libXcodeReporter.dylib +0 -0
  114. data/externals/oclint/lib/oclint/rules/libAvoidBranchingStatementAsLastInLoopRule.dylib +0 -0
  115. data/externals/oclint/lib/oclint/rules/libAvoidDefaultArgumentsOnVirtualMethodsRule.dylib +0 -0
  116. data/externals/oclint/lib/oclint/rules/libAvoidPrivateStaticMembersRule.dylib +0 -0
  117. data/externals/oclint/lib/oclint/rules/libBaseClassDestructorShouldBeVirtualOrProtectedRule.dylib +0 -0
  118. data/externals/oclint/lib/oclint/rules/libBitwiseOperatorInConditionalRule.dylib +0 -0
  119. data/externals/oclint/lib/oclint/rules/libBrokenNullCheckRule.dylib +0 -0
  120. data/externals/oclint/lib/oclint/rules/libBrokenOddnessCheckRule.dylib +0 -0
  121. data/externals/oclint/lib/oclint/rules/libCollapsibleIfStatementsRule.dylib +0 -0
  122. data/externals/oclint/lib/oclint/rules/libConstantConditionalOperatorRule.dylib +0 -0
  123. data/externals/oclint/lib/oclint/rules/libConstantIfExpressionRule.dylib +0 -0
  124. data/externals/oclint/lib/oclint/rules/libCoveredSwitchStatementsDontNeedDefaultRule.dylib +0 -0
  125. data/externals/oclint/lib/oclint/rules/libCyclomaticComplexityRule.dylib +0 -0
  126. data/externals/oclint/lib/oclint/rules/libDeadCodeRule.dylib +0 -0
  127. data/externals/oclint/lib/oclint/rules/libDefaultLabelNotLastInSwitchStatementRule.dylib +0 -0
  128. data/externals/oclint/lib/oclint/rules/libDestructorOfVirtualClassRule.dylib +0 -0
  129. data/externals/oclint/lib/oclint/rules/libDoubleNegativeRule.dylib +0 -0
  130. data/externals/oclint/lib/oclint/rules/libEmptyCatchStatementRule.dylib +0 -0
  131. data/externals/oclint/lib/oclint/rules/libEmptyDoWhileStatementRule.dylib +0 -0
  132. data/externals/oclint/lib/oclint/rules/libEmptyElseBlockRule.dylib +0 -0
  133. data/externals/oclint/lib/oclint/rules/libEmptyFinallyStatementRule.dylib +0 -0
  134. data/externals/oclint/lib/oclint/rules/libEmptyForStatementRule.dylib +0 -0
  135. data/externals/oclint/lib/oclint/rules/libEmptyIfStatementRule.dylib +0 -0
  136. data/externals/oclint/lib/oclint/rules/libEmptySwitchStatementRule.dylib +0 -0
  137. data/externals/oclint/lib/oclint/rules/libEmptyTryStatementRule.dylib +0 -0
  138. data/externals/oclint/lib/oclint/rules/libEmptyWhileStatementRule.dylib +0 -0
  139. data/externals/oclint/lib/oclint/rules/libForLoopShouldBeWhileLoopRule.dylib +0 -0
  140. data/externals/oclint/lib/oclint/rules/libGotoStatementRule.dylib +0 -0
  141. data/externals/oclint/lib/oclint/rules/libInvertedLogicRule.dylib +0 -0
  142. data/externals/oclint/lib/oclint/rules/libJumbledIncrementerRule.dylib +0 -0
  143. data/externals/oclint/lib/oclint/rules/libLongClassRule.dylib +0 -0
  144. data/externals/oclint/lib/oclint/rules/libLongLineRule.dylib +0 -0
  145. data/externals/oclint/lib/oclint/rules/libLongMethodRule.dylib +0 -0
  146. data/externals/oclint/lib/oclint/rules/libLongVariableNameRule.dylib +0 -0
  147. data/externals/oclint/lib/oclint/rules/libMisplacedNullCheckRule.dylib +0 -0
  148. data/externals/oclint/lib/oclint/rules/libMissingBreakInSwitchStatementRule.dylib +0 -0
  149. data/externals/oclint/lib/oclint/rules/libMultipleUnaryOperatorRule.dylib +0 -0
  150. data/externals/oclint/lib/oclint/rules/libNPathComplexityRule.dylib +0 -0
  151. data/externals/oclint/lib/oclint/rules/libNcssMethodCountRule.dylib +0 -0
  152. data/externals/oclint/lib/oclint/rules/libNestedBlockDepthRule.dylib +0 -0
  153. data/externals/oclint/lib/oclint/rules/libNonCaseLabelInSwitchStatementRule.dylib +0 -0
  154. data/externals/oclint/lib/oclint/rules/libObjCAssignIvarOutsideAccessorsRule.dylib +0 -0
  155. data/externals/oclint/lib/oclint/rules/libObjCBoxedExpressionsRule.dylib +0 -0
  156. data/externals/oclint/lib/oclint/rules/libObjCContainerLiteralsRule.dylib +0 -0
  157. data/externals/oclint/lib/oclint/rules/libObjCNSNumberLiteralsRule.dylib +0 -0
  158. data/externals/oclint/lib/oclint/rules/libObjCObjectSubscriptingRule.dylib +0 -0
  159. data/externals/oclint/lib/oclint/rules/libObjCVerifyIsEqualHashRule.dylib +0 -0
  160. data/externals/oclint/lib/oclint/rules/libObjCVerifyMustCallSuperRule.dylib +0 -0
  161. data/externals/oclint/lib/oclint/rules/libObjCVerifyProhibitedCallRule.dylib +0 -0
  162. data/externals/oclint/lib/oclint/rules/libObjCVerifyProtectedMethodRule.dylib +0 -0
  163. data/externals/oclint/lib/oclint/rules/libObjCVerifySubclassMustImplementRule.dylib +0 -0
  164. data/externals/oclint/lib/oclint/rules/libParameterReassignmentRule.dylib +0 -0
  165. data/externals/oclint/lib/oclint/rules/libPreferEarlyExitRule.dylib +0 -0
  166. data/externals/oclint/lib/oclint/rules/libRedundantConditionalOperatorRule.dylib +0 -0
  167. data/externals/oclint/lib/oclint/rules/libRedundantIfStatementRule.dylib +0 -0
  168. data/externals/oclint/lib/oclint/rules/libRedundantLocalVariableRule.dylib +0 -0
  169. data/externals/oclint/lib/oclint/rules/libRedundantNilCheckRule.dylib +0 -0
  170. data/externals/oclint/lib/oclint/rules/libReturnFromFinallyBlockRule.dylib +0 -0
  171. data/externals/oclint/lib/oclint/rules/libShortVariableNameRule.dylib +0 -0
  172. data/externals/oclint/lib/oclint/rules/libSwitchStatementsShouldHaveDefaultRule.dylib +0 -0
  173. data/externals/oclint/lib/oclint/rules/libThrowExceptionFromFinallyBlockRule.dylib +0 -0
  174. data/externals/oclint/lib/oclint/rules/libTooFewBranchesInSwitchStatementRule.dylib +0 -0
  175. data/externals/oclint/lib/oclint/rules/libTooManyFieldsRule.dylib +0 -0
  176. data/externals/oclint/lib/oclint/rules/libTooManyMethodsRule.dylib +0 -0
  177. data/externals/oclint/lib/oclint/rules/libTooManyParametersRule.dylib +0 -0
  178. data/externals/oclint/lib/oclint/rules/libUnnecessaryElseStatementRule.dylib +0 -0
  179. data/externals/oclint/lib/oclint/rules/libUnnecessaryNullCheckForCXXDeallocRule.dylib +0 -0
  180. data/externals/oclint/lib/oclint/rules/libUnusedLocalVariableRule.dylib +0 -0
  181. data/externals/oclint/lib/oclint/rules/libUnusedMethodParameterRule.dylib +0 -0
  182. data/externals/oclint/lib/oclint/rules/libUselessParenthesesRule.dylib +0 -0
  183. data/lib/coverage_plan.rb +19 -0
  184. data/lib/device.rb +27 -0
  185. data/lib/execute.rb +7 -0
  186. data/lib/lint_plan.rb +41 -0
  187. data/lib/rules.rb +23 -0
  188. data/lib/test_plan.rb +11 -0
  189. data/lib/version.rb +3 -0
  190. data/lib/xcode.rb +128 -0
  191. data/lib/xcodebuild-helper.rb +110 -0
  192. data/spec/coverage_plan_spec.rb +18 -0
  193. data/spec/device_spec.rb +24 -0
  194. data/spec/lint_plan_spec.rb +35 -0
  195. data/spec/rule_spec.rb +37 -0
  196. data/spec/spec_helper.rb +17 -0
  197. data/spec/test_plan_spec.rb +11 -0
  198. data/spec/xcode_dsl_actions_spec.rb +136 -0
  199. data/spec/xcode_dsl_spec.rb +176 -0
  200. data/spec/xcode_spec.rb +79 -0
  201. data/xcodebuild-helper.gemspec +26 -0
  202. metadata +327 -0
@@ -0,0 +1,110 @@
1
+ require 'xcode'
2
+ require 'execute'
3
+
4
+ module XCodeBuildHelper
5
+ @registry = {}
6
+ def self.[](name)
7
+ @registry[name]
8
+ end
9
+
10
+ def self.define(name, &block)
11
+ xcode = @registry[name]
12
+ if xcode == nil
13
+ xcode = XCodeBuildHelper::XCode.new
14
+ end
15
+ xcode.instance_eval(&block)
16
+ @registry[name] = xcode
17
+ end
18
+
19
+ def self.build(name, device = nil)
20
+ xcode = @registry[name]
21
+
22
+ unless xcode == nil
23
+ cmd = create_base_cmd(xcode)
24
+ if device != nil
25
+ cmd += parse_destination(xcode.get_device(device))
26
+ end
27
+ XCodeBuildHelper::Execute.call(cmd + "clean build | bundle exec xcpretty --color --report json-compilation-database")
28
+ end
29
+ end
30
+
31
+ def self.test_suite(name, plan, device = nil)
32
+ xcode = @registry[name]
33
+
34
+ unless xcode == nil
35
+ cmd = create_base_cmd(xcode)
36
+ if device != nil
37
+ cmd += parse_destination(xcode.get_device(device))
38
+ end
39
+ XCodeBuildHelper::Execute.call(cmd + "test | bundle exec xcpretty --color --report #{xcode.get_test_plan(plan).get_report_type}")
40
+ end
41
+ end
42
+
43
+ def self.create_base_cmd(project)
44
+ "xcodebuild -workspace \"#{project.get_workspace}.xcworkspace\" -scheme #{project.get_scheme} -sdk #{project.get_sdk} -config #{project.get_config} "
45
+ end
46
+
47
+ def self.parse_destination(device)
48
+ if device == nil
49
+ ""
50
+ else
51
+ "-destination 'platform=#{device.get_platform},name=#{device.get_name},OS=#{device.get_os}' "
52
+ end
53
+ end
54
+
55
+ def self.base_app_location(xcode)
56
+ unless xcode == nil
57
+ cmd = create_base_cmd(xcode)
58
+ result = XCodeBuildHelper::Execute.call(cmd + "-showBuildSettings")
59
+ parse_app_settings(result)
60
+ end
61
+ end
62
+
63
+ def self.parse_app_settings(settings)
64
+ result = /OBJROOT = ([a-zA-Z0-9\/ _\-]+)/.match(settings)
65
+ if result != nil
66
+ result[1]
67
+ else
68
+ ""
69
+ end
70
+ end
71
+
72
+ def self.app_binary_location(project)
73
+ Dir.glob(base_app_location(project) + "/CodeCoverage/#{project.get_scheme}/Products/#{project.get_config}-#{project.get_sdk}/#{project.get_workspace.gsub(/\s+/, '\\ ')}.app/#{project.get_workspace.gsub(/\s+/,"\\ ")}").first
74
+ end
75
+
76
+ def self.profdata_location(project)
77
+ Dir.glob(base_app_location(project) + "/CodeCoverage/#{project.get_scheme}/Coverage.profdata").first
78
+ end
79
+
80
+ def self.generate_coverage(name, plan)
81
+ xcode = @registry[name]
82
+ unless xcode == nil
83
+ coverage_plan = xcode.get_coverage_plan(plan)
84
+ result = XCodeBuildHelper::Execute.call("xcrun llvm-cov show -instr-profile \"#{profdata_location(xcode)}\" \"#{app_binary_location(xcode)}\" #{coverage_plan.get_source_files.first}")
85
+ end
86
+ end
87
+
88
+ def self.lint(name, plan)
89
+ xcode = @registry[name]
90
+ lint_plan = xcode.get_lint_plan(plan)
91
+
92
+ cmd = "bundle exec oclint-json-compilation-database"
93
+ if(lint_plan.get_ignore)
94
+ cmd += " -e \"#{lint_plan.get_ignore}\""
95
+ end
96
+ cmd += " --"
97
+ if(lint_plan.get_report_type && lint_plan.get_output)
98
+ cmd += " -report-type #{lint_plan.get_report_type} -o #{lint_plan.get_output}"
99
+ end
100
+
101
+ rules = lint_plan.get_rules
102
+ rules.get_attribute_list.each do |key|
103
+ u_key = rules.send("key_" + key.to_s)
104
+ value = rules.send("get_" + key.to_s)
105
+ cmd += " -rc #{u_key}=#{value}"
106
+ end
107
+
108
+ XCodeBuildHelper::Execute.call(cmd)
109
+ end
110
+ end
@@ -0,0 +1,18 @@
1
+ require 'coverage_plan'
2
+
3
+ RSpec.describe XCodeBuildHelper::CoveragePlan do
4
+ context "Setter methods" do
5
+ before(:each) do
6
+ @coverage_plan = XCodeBuildHelper::CoveragePlan.new
7
+ end
8
+ it "should set the report type" do
9
+ @coverage_plan.report_type "REPORT_TYPE"
10
+ expect(@coverage_plan.get_report_type).to eq "REPORT_TYPE"
11
+ end
12
+
13
+ it "should set the source files" do
14
+ @coverage_plan.source_files ["path/tofiles/*.m"]
15
+ expect(@coverage_plan.get_source_files).to eq ["path/tofiles/*.m"]
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,24 @@
1
+ require 'device'
2
+
3
+ RSpec.describe XCodeBuildHelper::Device do
4
+ context "Setter methods" do
5
+ before(:each) do
6
+ @device = XCodeBuildHelper::Device.new
7
+ end
8
+
9
+ it "should set the platform name" do
10
+ @device.platform "PLATFORM"
11
+ expect(@device.get_platform).to eq "PLATFORM"
12
+ end
13
+
14
+ it "should set the name" do
15
+ @device.name "NAME"
16
+ expect(@device.get_name).to eq "NAME"
17
+ end
18
+
19
+ it "should set the name" do
20
+ @device.os "9.2"
21
+ expect(@device.get_os).to eq "9.2"
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,35 @@
1
+ require 'lint_plan'
2
+ require 'rules'
3
+
4
+ RSpec.describe XCodeBuildHelper::LintPlan do
5
+ before(:each) do
6
+ @lint_plan = XCodeBuildHelper::LintPlan.new
7
+ end
8
+
9
+ context "Setter methods" do
10
+ it "should set the report type" do
11
+ @lint_plan.report_type "REPORT_TYPE"
12
+ expect(@lint_plan.get_report_type).to eq "REPORT_TYPE"
13
+ end
14
+ it "should set the output type" do
15
+ @lint_plan.output "OUTPUT_LOCATION"
16
+ expect(@lint_plan.get_output).to eq "OUTPUT_LOCATION"
17
+ end
18
+ it "should set the ignore type" do
19
+ @lint_plan.ignore "IGNORE"
20
+ expect(@lint_plan.get_ignore).to eq "IGNORE"
21
+ end
22
+ context "setting rules" do
23
+ before(:each) do
24
+ @rules = XCodeBuildHelper::Rules.new
25
+ @rules.long_line 120
26
+ @rules.short_variable_name 3
27
+ end
28
+ it "should set the rule list" do
29
+ @lint_plan.rules @rules
30
+ expect(@lint_plan.get_rules.get_long_line).to eq 120
31
+ expect(@lint_plan.get_rules.get_short_variable_name).to eq 3
32
+ end
33
+ end
34
+ end
35
+ end
data/spec/rule_spec.rb ADDED
@@ -0,0 +1,37 @@
1
+ require 'rules'
2
+
3
+ RSpec.describe XCodeBuildHelper::Rules do
4
+ before(:each) do
5
+ @rules = XCodeBuildHelper::Rules.new
6
+ end
7
+ context "Setter methods" do
8
+ it "should set the long line rule" do
9
+ @rules.long_line 120
10
+ expect(@rules.get_long_line).to eq 120
11
+ end
12
+
13
+ it "should set the shor variable name rule" do
14
+ @rules.short_variable_name 3
15
+ expect(@rules.get_short_variable_name).to eq 3
16
+ end
17
+ end
18
+
19
+ context "key methods" do
20
+ it "should return the uppercase version of the method" do
21
+ @rules.long_line 120
22
+ expect(@rules.key_long_line).to eq "LONG_LINE"
23
+ end
24
+
25
+ it "should return the uppercase version of the method" do
26
+ expect(@rules.key_long_line).to eq nil
27
+ end
28
+ end
29
+
30
+ context "get list of attributes" do
31
+ it "should return a list of attributes" do
32
+ @rules.long_line 120
33
+ @rules.short_variable_name 3
34
+ expect(@rules.get_attribute_list).to eq [:long_line, :short_variable_name]
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,17 @@
1
+ require 'coveralls'
2
+ Coveralls.wear!
3
+
4
+ RSpec.configure do |config|
5
+ config.expect_with :rspec do |expectations|
6
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
7
+ end
8
+
9
+ # rspec-mocks config goes here. You can use an alternate test double
10
+ # library (such as bogus or mocha) by changing the `mock_with` option here.
11
+ config.mock_with :rspec do |mocks|
12
+ # Prevents you from mocking or stubbing a method that does not exist on
13
+ # a real object. This is generally recommended, and will default to
14
+ # `true` in RSpec 4.
15
+ mocks.verify_partial_doubles = true
16
+ end
17
+ end
@@ -0,0 +1,11 @@
1
+ require 'test_plan'
2
+
3
+ RSpec.describe XCodeBuildHelper::TestPlan do
4
+ context "setter methods" do
5
+ it "should set the report type" do
6
+ @test_plan = XCodeBuildHelper::TestPlan.new
7
+ @test_plan.report_type "REPORT_TYPE"
8
+ expect(@test_plan.get_report_type).to eq "REPORT_TYPE"
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,136 @@
1
+ require 'xcodebuild-helper'
2
+
3
+ RSpec.describe "DSL actions" do
4
+ context "build" do
5
+ before(:each) do
6
+ XCodeBuildHelper.define :default do
7
+ workspace "WORK SPACE"
8
+ scheme "SCHEME"
9
+ sdk "SDK"
10
+ config "CONFIG"
11
+ device :ipad do
12
+ platform "PLATFORM"
13
+ name "NAME"
14
+ os "OS"
15
+ end
16
+ end
17
+ end
18
+
19
+ it "should create the proper CLI to build the app" do
20
+ expect(XCodeBuildHelper::Execute).to receive(:call).with("xcodebuild -workspace \"WORK SPACE.xcworkspace\" -scheme SCHEME -sdk SDK -config CONFIG clean build | bundle exec xcpretty --color --report json-compilation-database")
21
+ XCodeBuildHelper.build(:default)
22
+ end
23
+
24
+ it "should create the proper CLI for the ipad" do
25
+ expect(XCodeBuildHelper::Execute).to receive(:call).with("xcodebuild -workspace \"WORK SPACE.xcworkspace\" -scheme SCHEME -sdk SDK -config CONFIG -destination 'platform=PLATFORM,name=NAME,OS=OS' clean build | bundle exec xcpretty --color --report json-compilation-database")
26
+ XCodeBuildHelper.build(:default, :ipad)
27
+ end
28
+ end
29
+
30
+ context "test_suite" do
31
+ before(:each) do
32
+ XCodeBuildHelper.define :default do
33
+ workspace "WORK SPACE"
34
+ scheme "SCHEME"
35
+ sdk "SDK"
36
+ config "CONFIG"
37
+
38
+ device :ipad do
39
+ platform "PLATFORM"
40
+ name "NAME"
41
+ os "OS"
42
+ end
43
+
44
+ test_plan :plan_a do
45
+ report_type 'html'
46
+ end
47
+ end
48
+ end
49
+
50
+ it "should create the proper CLI for testing" do
51
+ expect(XCodeBuildHelper::Execute).to receive(:call).with("xcodebuild -workspace \"WORK SPACE.xcworkspace\" -scheme SCHEME -sdk SDK -config CONFIG test | bundle exec xcpretty --color --report html")
52
+ XCodeBuildHelper.test_suite(:default, :plan_a)
53
+ end
54
+
55
+ it "should create the proper CLI for testing for ipad" do
56
+ expect(XCodeBuildHelper::Execute).to receive(:call).with("xcodebuild -workspace \"WORK SPACE.xcworkspace\" -scheme SCHEME -sdk SDK -config CONFIG -destination 'platform=PLATFORM,name=NAME,OS=OS' test | bundle exec xcpretty --color --report html")
57
+ XCodeBuildHelper.test_suite(:default, :plan_a, :ipad)
58
+ end
59
+ end
60
+
61
+ context "code coverage" do
62
+ before(:each) do
63
+ XCodeBuildHelper.define :default do
64
+ workspace "WORK SPACE"
65
+ scheme "SCHEME"
66
+ sdk "SDK"
67
+ config "CONFIG"
68
+
69
+ device :ipad do
70
+ platform "PLATFORM"
71
+ name "NAME"
72
+ os "OS"
73
+ end
74
+
75
+ coverage_plan :plan_a do
76
+ report_type "xml"
77
+ source_files ["path/to/files/*"]
78
+ end
79
+ end
80
+ end
81
+
82
+ it "will find the base app directory" do
83
+ expect(XCodeBuildHelper::Execute).to receive(:call).with("xcodebuild -workspace \"WORK SPACE.xcworkspace\" -scheme SCHEME -sdk SDK -config CONFIG -showBuildSettings")
84
+ XCodeBuildHelper.base_app_location(XCodeBuildHelper[:default])
85
+ end
86
+
87
+ it "will find the app binary" do
88
+ allow(XCodeBuildHelper).to receive(:base_app_location).and_return("/path/to/app")
89
+ expect(Dir).to receive(:glob).with("/path/to/app/CodeCoverage/SCHEME/Products/CONFIG-SDK/WORK\\ SPACE.app/WORK\\ SPACE").and_return([])
90
+ XCodeBuildHelper.app_binary_location(XCodeBuildHelper[:default])
91
+ end
92
+
93
+ it "will find the app profdata" do
94
+ allow(XCodeBuildHelper).to receive(:base_app_location).and_return("/path/to/app")
95
+ expect(Dir).to receive(:glob).with("/path/to/app/CodeCoverage/SCHEME/Coverage.profdata").and_return([])
96
+ XCodeBuildHelper.profdata_location(XCodeBuildHelper[:default])
97
+ end
98
+
99
+ it "will return the CLI for finding code coverage" do
100
+ allow(XCodeBuildHelper).to receive(:app_binary_location).and_return("/path/to/app/bin")
101
+ allow(XCodeBuildHelper).to receive(:profdata_location).and_return("/path/to/app/prof")
102
+ expect(XCodeBuildHelper::Execute).to receive(:call).with("xcrun llvm-cov show -instr-profile \"/path/to/app/prof\" \"/path/to/app/bin\" path/to/files/*")
103
+ XCodeBuildHelper.generate_coverage(:default, :plan_a)
104
+ end
105
+ end
106
+
107
+ context "lint" do
108
+ before(:each) do
109
+ XCodeBuildHelper.define :default do
110
+ workspace "WORK SPACE"
111
+ scheme "SCHEME"
112
+ sdk "SDK"
113
+ config "CONFIG"
114
+
115
+ device :ipad do
116
+ platform "PLATFORM"
117
+ name "NAME"
118
+ os "OS"
119
+ end
120
+
121
+ lint_plan :plan_a do
122
+ report_type "REPORT_TYPE"
123
+ output "OUTPUT"
124
+ ignore "IGNORE"
125
+ rules do
126
+ long_line 120
127
+ end
128
+ end
129
+ end
130
+ end
131
+ it "should call the correct CLI for the lint" do
132
+ expect(XCodeBuildHelper::Execute).to receive(:call).with("bundle exec oclint-json-compilation-database -e \"IGNORE\" -- -report-type REPORT_TYPE -o OUTPUT -rc LONG_LINE=120")
133
+ XCodeBuildHelper.lint(:default, :plan_a)
134
+ end
135
+ end
136
+ end
@@ -0,0 +1,176 @@
1
+ require 'xcodebuild-helper'
2
+
3
+ RSpec.describe "DSL" do
4
+ context "define" do
5
+ before(:each) do
6
+ XCodeBuildHelper.define :default do
7
+ workspace "WORK SPACE"
8
+ scheme "SCHEME"
9
+ end
10
+ end
11
+
12
+ it "should register the default with a workspace" do
13
+ expect(XCodeBuildHelper[:default].get_workspace).to eq("WORK SPACE")
14
+ end
15
+
16
+ it "should register the default with a scheme" do
17
+ expect(XCodeBuildHelper[:default].get_scheme).to eq("SCHEME")
18
+ end
19
+ end
20
+
21
+ context "registering a device" do
22
+ before(:each) do
23
+ XCodeBuildHelper.define :default do
24
+ workspace "WORK SPACE"
25
+ scheme "SCHEME"
26
+ device :ipad do
27
+ platform "PLATFORM"
28
+ name "NAME"
29
+ os "9.2"
30
+ end
31
+
32
+ device :iphone do
33
+ platform "PLATFORM_2"
34
+ name "NAME_2"
35
+ os "7.0"
36
+ end
37
+ end
38
+ end
39
+ it "should register an ipad on the project" do
40
+ expect(XCodeBuildHelper[:default].get_device(:ipad).get_platform).to eq "PLATFORM"
41
+ end
42
+
43
+ it "should register an iphone on the project" do
44
+ expect(XCodeBuildHelper[:default].get_device(:iphone).get_os).to eq "7.0"
45
+ end
46
+
47
+ it "should not overwrite the device" do
48
+ XCodeBuildHelper.define :default do
49
+ device :ipad do
50
+ name "IPAD"
51
+ end
52
+ end
53
+ expect(XCodeBuildHelper[:default].get_device(:ipad).get_platform).to eq "PLATFORM"
54
+ expect(XCodeBuildHelper[:default].get_device(:ipad).get_name).to eq "IPAD"
55
+ end
56
+ end
57
+
58
+ context "register a test plan" do
59
+ before(:each) do
60
+ XCodeBuildHelper.define :default do
61
+ workspace "WORK SPACE"
62
+ scheme "SCHEME"
63
+ test_plan :plan_a do
64
+ report_type 'junit'
65
+ end
66
+ end
67
+ end
68
+
69
+ it "should register a test plan a on the project" do
70
+ report_type = XCodeBuildHelper[:default].get_test_plan(:plan_a).get_report_type
71
+ expect(report_type).to eq 'junit'
72
+ end
73
+
74
+ it "should not overwrite the test plan" do
75
+ XCodeBuildHelper.define :default do
76
+ test_plan :plan_a do
77
+ end
78
+ end
79
+
80
+ report_type = XCodeBuildHelper[:default].get_test_plan(:plan_a).get_report_type
81
+ expect(report_type).to eq 'junit'
82
+ end
83
+ end
84
+
85
+ context "register a coverage plan" do
86
+ before(:each) do
87
+ XCodeBuildHelper.define :default do
88
+ workspace "WORK SPACE"
89
+ scheme "SCHEME"
90
+ coverage_plan :plan_a do
91
+ source_files ['/path/to/files/*.m']
92
+ report_type "REPORT_TYPE"
93
+ end
94
+ end
95
+ end
96
+ it "should set the source files" do
97
+ expect(XCodeBuildHelper[:default].get_coverage_plan(:plan_a).get_source_files).to eq ['/path/to/files/*.m']
98
+ end
99
+
100
+ it "should not overwrite the coverage plan" do
101
+ XCodeBuildHelper.define :default do
102
+ coverage_plan :plan_a do
103
+ report_type "EXPECTED"
104
+ end
105
+ end
106
+
107
+ expect(XCodeBuildHelper[:default].get_coverage_plan(:plan_a).get_report_type).to eq "EXPECTED"
108
+ expect(XCodeBuildHelper[:default].get_coverage_plan(:plan_a).get_source_files).to eq ['/path/to/files/*.m']
109
+ end
110
+ end
111
+
112
+ context "register a lint plan" do
113
+ before(:each) do
114
+ XCodeBuildHelper.define :default do
115
+ workspace "WORK SPACE"
116
+ lint_plan :plan_a do
117
+ report_type "REPORT_TYPE"
118
+ output "OUTPUT"
119
+ ignore "IGNORE"
120
+ rules do
121
+ long_line 120
122
+ short_variable_name 3
123
+ end
124
+ end
125
+ end
126
+
127
+ end
128
+
129
+ it "should set the lint plan" do
130
+ expect(XCodeBuildHelper[:default].get_lint_plan(:plan_a).get_report_type).to eq "REPORT_TYPE"
131
+ end
132
+
133
+ it "should set the rules" do
134
+ expect(XCodeBuildHelper[:default].get_lint_plan(:plan_a).get_rules.get_long_line).to eq 120
135
+ end
136
+
137
+ it "should not overwrite the lint_plan" do
138
+ XCodeBuildHelper.define :default do
139
+ lint_plan :plan_a do
140
+ report_type "EXPECTED"
141
+ end
142
+ end
143
+
144
+ expect(XCodeBuildHelper[:default].get_lint_plan(:plan_a).get_report_type).to eq "EXPECTED"
145
+ expect(XCodeBuildHelper[:default].get_lint_plan(:plan_a).get_output).to eq "OUTPUT"
146
+ end
147
+
148
+ it "should not overwrite previous rules" do
149
+ XCodeBuildHelper.define :default do
150
+ lint_plan :plan_a do
151
+ rules do
152
+ long_line 100
153
+ end
154
+ end
155
+ end
156
+
157
+ expect(XCodeBuildHelper[:default].get_lint_plan(:plan_a).get_rules.get_long_line).to eq 100
158
+ expect(XCodeBuildHelper[:default].get_lint_plan(:plan_a).get_rules.get_short_variable_name).to eq 3
159
+ end
160
+ end
161
+
162
+ context "edit an existing build plan" do
163
+ it "should overwrite the workspace but not the scheme" do
164
+ XCodeBuildHelper.define :default do
165
+ workspace "WORK SPACE"
166
+ scheme "SCHEME"
167
+ end
168
+
169
+ XCodeBuildHelper.define :default do
170
+ workspace "EXPECTED"
171
+ end
172
+ expect(XCodeBuildHelper[:default].get_workspace).to eq "EXPECTED"
173
+ expect(XCodeBuildHelper[:default].get_scheme).to eq "SCHEME"
174
+ end
175
+ end
176
+ end