xcodebuild-helper 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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