arduino_ci 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 63c7d8aea63187c680fcac08e18a72469421596e1c4888e4c89bf011b93ef7ab
4
- data.tar.gz: 4400ad0218b36e4d0721632674de6dc2cef88126890ca1095b195433e825af74
3
+ metadata.gz: a38212612227d3adec2b30ed2303de39f506f12a31c06b2205ee1e703dccfbb6
4
+ data.tar.gz: '033169c0b7531d90c089296cf3cd5b708995bb2e89db068813fa515ab0022b17'
5
5
  SHA512:
6
- metadata.gz: c720975cb84375e4a10d3781db680a589af77d8af89f4704994180bbe24e2838fe922b13cad50eceb2063403b908c0cc77c7241f6f2692eb9d96443c7cfa7624
7
- data.tar.gz: 4bc2267fe4be0b0790bbb31ff4cc339c3e231e723519a428bdf12fdd615f441097dbdd230ce95a47e627b195c0a8afd393a9ac88de04deccef0c73b86fd2b3b0
6
+ metadata.gz: 7def94f0fe1d00fc32ccac118766da3cc8272f69b19123eaca24b78592e171b99687cead667c7506acb4e62f7b0445f141ed6ca716053b9d78061d66b5fafd19
7
+ data.tar.gz: af306adce91faa99e433a8006de72aa0a04a0d5f06e47187672f7d6db07254e6850c374684753e45708ce3e53cee7dd51dfffa17e63c4f58d15a20ee1e72513c
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  [![Gem Version](https://badge.fury.io/rb/arduino_ci.svg)](https://rubygems.org/gems/arduino_ci)
2
2
  [![Build Status](https://travis-ci.org/ifreecarve/arduino_ci.svg)](https://travis-ci.org/ifreecarve/arduino_ci)
3
- [![Documentation](http://img.shields.io/badge/docs-rdoc.info-blue.svg)](http://www.rubydoc.info/gems/arduino_ci/0.1.2)
3
+ [![Documentation](http://img.shields.io/badge/docs-rdoc.info-blue.svg)](http://www.rubydoc.info/gems/arduino_ci/0.1.3)
4
4
 
5
5
  # ArduinoCI Ruby gem (`arduino_ci`)
6
6
 
@@ -43,12 +43,10 @@ unittest(your_test_name)
43
43
  assertEqual(4, doSomething());
44
44
  }
45
45
 
46
- int main(int argc, char *argv[]) {
47
- return Test::run_and_report(argc, argv);
48
- }
46
+ unittest_main()
49
47
  ```
50
48
 
51
- This test defines one `unittest` (a macro provided by `ArduionUnitTests.h`), called `your_test_name`, which makes some assertions on the target library. The `int main` section is boilerplate.
49
+ This test defines one `unittest` (a macro provided by `ArduionUnitTests.h`), called `your_test_name`, which makes some assertions on the target library. The `unittest_main()` is a macro for the `int main()` boilerplate required for unit testing.
52
50
 
53
51
 
54
52
  ## More Documentation
@@ -130,14 +130,16 @@ class Test
130
130
  Results results = {0, 0, 0};
131
131
 
132
132
  for (Test *p = sRoot; p; p = p->mNext) {
133
- TestData td = {p->name(), p->result()};
133
+ p->prepare();
134
134
  p->mReporter = reporter;
135
- if (reporter) reporter->onTestStart(td);
135
+ TestData t1 = {p->name(), p->result()};
136
+ if (reporter) reporter->onTestStart(t1);
136
137
  p->test();
137
138
  if (p->mResult == RESULT_PASS) ++results.passed;
138
139
  if (p->mResult == RESULT_FAIL) ++results.failed;
139
140
  if (p->mResult == RESULT_SKIP) ++results.skipped;
140
- if (reporter) reporter->onTestEnd(td);
141
+ TestData t2 = {p->name(), p->result()};
142
+ if (reporter) reporter->onTestEnd(t2);
141
143
  }
142
144
 
143
145
  return results;
@@ -154,8 +156,12 @@ class Test
154
156
  return results.failed + results.skipped;
155
157
  }
156
158
 
159
+ void prepare() {
160
+ mResult = RESULT_PASS; // not None, and not fail unless we hear otherwise
161
+ }
162
+
157
163
  void test() {
158
- mResult = RESULT_PASS; // not None, and not fail unless we hear otherwise
164
+ // thin wrapper. nothing to do here for now
159
165
  task();
160
166
  }
161
167
 
@@ -210,3 +216,9 @@ class Test
210
216
  void task(); \
211
217
  } test_##name##_instance; \
212
218
  void test_##name ::task()
219
+
220
+
221
+ #define unittest_main() \
222
+ int main(int argc, char *argv[]) { \
223
+ return Test::run_and_report(argc, argv); \
224
+ }
@@ -1,21 +1,30 @@
1
1
  #pragma once
2
2
  #include "Compare.h"
3
3
 
4
- // helper define for the operators below
5
- #define assertOp(desc, relevance1, arg1, op, op_name, relevance2, arg2) \
6
- do \
7
- { \
8
- if (!assertion<typeof(arg1), typeof(arg2)>(__FILE__, __LINE__, \
9
- desc, \
10
- relevance1, #arg1, (arg1), \
11
- op_name, op, \
12
- relevance2, #arg2, (arg2))) \
13
- { \
14
- return; \
15
- } \
4
+ #define testBehaviorOp(die, desc, rel1, arg1, op, op_name, rel2, arg2) \
5
+ do \
6
+ { \
7
+ if (!assertion<typeof(arg1), typeof(arg2)>(__FILE__, __LINE__, \
8
+ desc, \
9
+ rel1, #arg1, (arg1), \
10
+ op_name, op, \
11
+ rel2, #arg2, (arg2))) \
12
+ { \
13
+ if (die) return; \
14
+ } \
16
15
  } while (0)
17
16
 
18
- /** macro generates optional output and calls fail() followed by a return if false. */
17
+
18
+
19
+ // helper define for the operators below
20
+ #define assertOp(desc, rel1, arg1, op, op_name, rel2, arg2) \
21
+ testBehaviorOp(false, desc, rel1, arg1, op, op_name, rel2, arg2)
22
+
23
+ #define assureOp(desc, rel1, arg1, op, op_name, rel2, arg2) \
24
+ testBehaviorOp(true, desc, rel1, arg1, op, op_name, rel2, arg2)
25
+
26
+
27
+ /** macro generates optional output and calls fail() but does not return if false. */
19
28
  #define assertEqual(arg1,arg2) assertOp("assertEqual","expected",arg1,compareEqual,"==","actual",arg2)
20
29
  #define assertNotEqual(arg1,arg2) assertOp("assertNotEqual","unwanted",arg1,compareNotEqual,"!=","actual",arg2)
21
30
  #define assertLess(arg1,arg2) assertOp("assertLess","lowerBound",arg1,compareLess,"<","upperBound",arg2)
@@ -25,3 +34,13 @@
25
34
  #define assertTrue(arg) assertEqual(arg,true)
26
35
  #define assertFalse(arg) assertEqual(arg,false)
27
36
 
37
+ /** macro generates optional output and calls fail() followed by a return if false. */
38
+ #define assureEqual(arg1,arg2) assureOp("assureEqual","expected",arg1,compareEqual,"==","actual",arg2)
39
+ #define assureNotEqual(arg1,arg2) assureOp("assureNotEqual","unwanted",arg1,compareNotEqual,"!=","actual",arg2)
40
+ #define assureLess(arg1,arg2) assureOp("assureLess","lowerBound",arg1,compareLess,"<","upperBound",arg2)
41
+ #define assureMore(arg1,arg2) assureOp("assureMore","upperBound",arg1,compareMore,">","lowerBound",arg2)
42
+ #define assureLessOrEqual(arg1,arg2) assureOp("assureLessOrEqual","lowerBound",arg1,compareLessOrEqual,"<=","upperBound",arg2)
43
+ #define assureMoreOrEqual(arg1,arg2) assureOp("assureMoreOrEqual","upperBound",arg1,compareMoreOrEqual,">=","lowerBound",arg2)
44
+ #define assureTrue(arg) assertEqual(arg,true)
45
+ #define assureFalse(arg) assertEqual(arg,false)
46
+
@@ -72,8 +72,10 @@ end
72
72
  # do that, set the URLs, and download the packages
73
73
  all_packages = all_platforms.values.map { |v| v[:package] }.uniq.reject(&:nil?)
74
74
  all_urls = all_packages.map { |p| config.package_url(p) }.uniq.reject(&:nil?)
75
- assure("Setting board manager URLs") do
76
- @arduino_cmd.set_pref("boardsmanager.additional.urls", all_urls.join(","))
75
+ unless all_urls.empty?
76
+ assure("Setting board manager URLs") do
77
+ @arduino_cmd.set_pref("boardsmanager.additional.urls", all_urls.join(","))
78
+ end
77
79
  end
78
80
 
79
81
  all_packages.each do |p|
@@ -86,26 +88,6 @@ aux_libraries.each do |l|
86
88
  assure("Installing aux library '#{l}'") { @arduino_cmd.install_library(l) }
87
89
  end
88
90
 
89
- attempt("Setting compiler warning level") { @arduino_cmd.set_pref("compiler.warning_level", "all") }
90
-
91
- library_examples.each do |example_path|
92
- ovr_config = config.from_example(example_path)
93
- ovr_config.platforms_to_build.each do |p|
94
- board = all_platforms[p][:board]
95
- assure("Switching to board for #{p} (#{board})") { @arduino_cmd.use_board(board) }
96
- example_name = File.basename(example_path)
97
- attempt("Verifying #{example_name}") do
98
- ret = @arduino_cmd.verify_sketch(example_path)
99
- unless ret
100
- puts
101
- puts "Last command: #{@arduino_cmd.last_msg}"
102
- puts @arduino_cmd.last_err
103
- end
104
- ret
105
- end
106
- end
107
- end
108
-
109
91
  config.platforms_to_unittest.each do |p|
110
92
  board = all_platforms[p][:board]
111
93
  assure("Switching to board for #{p} (#{board})") { @arduino_cmd.use_board(board) }
@@ -129,4 +111,24 @@ config.platforms_to_unittest.each do |p|
129
111
  end
130
112
  end
131
113
 
114
+ attempt("Setting compiler warning level") { @arduino_cmd.set_pref("compiler.warning_level", "all") }
115
+
116
+ library_examples.each do |example_path|
117
+ ovr_config = config.from_example(example_path)
118
+ ovr_config.platforms_to_build.each do |p|
119
+ board = all_platforms[p][:board]
120
+ assure("Switching to board for #{p} (#{board})") { @arduino_cmd.use_board(board) }
121
+ example_name = File.basename(example_path)
122
+ attempt("Verifying #{example_name}") do
123
+ ret = @arduino_cmd.verify_sketch(example_path)
124
+ unless ret
125
+ puts
126
+ puts "Last command: #{@arduino_cmd.last_msg}"
127
+ puts @arduino_cmd.last_err
128
+ end
129
+ ret
130
+ end
131
+ end
132
+ end
133
+
132
134
  terminate(true)
@@ -243,10 +243,6 @@ module ArduinoCI
243
243
  return false
244
244
  end
245
245
  ret = run_and_capture(flag_verify, path)
246
- puts "=============="
247
- puts ret[:out]
248
- puts "--------------"
249
- puts ret[:err]
250
246
  ret[:success]
251
247
  end
252
248
 
@@ -35,12 +35,28 @@ module ArduinoCI
35
35
  @last_msg = ""
36
36
  end
37
37
 
38
+ # Guess whether a file is part of the vendor bundle (indicating we should ignore it).
39
+ #
40
+ # This assumes the vendor bundle will be at `vendor/bundle` and not some other location
41
+ # @param path [String] The path to check
42
+ # @return [Array<String>] The paths of the found files
43
+ def vendor_bundle?(path)
44
+ # TODO: look for Gemfile, look for .bundle/config and get BUNDLE_PATH from there?
45
+ base = File.join(@base_dir, "vendor")
46
+ real = File.join(File.realpath(@base_dir), "vendor")
47
+ return true if path.start_with?(base)
48
+ return true if path.start_with?(real)
49
+ false
50
+ end
51
+
38
52
  # Get a list of all CPP source files in a directory and its subdirectories
39
53
  # @param some_dir [String] The directory in which to begin the search
40
54
  # @return [Array<String>] The paths of the found files
41
55
  def cpp_files_in(some_dir)
42
56
  real = File.realpath(some_dir)
43
- Find.find(real).select { |path| CPP_EXTENSIONS.include?(File.extname(path)) }
57
+ files = Find.find(real).reject { |path| File.directory?(path) }
58
+ ret = files.select { |path| CPP_EXTENSIONS.include?(File.extname(path)) }
59
+ ret
44
60
  end
45
61
 
46
62
  # CPP files that are part of the project library under test
@@ -50,6 +66,7 @@ module ArduinoCI
50
66
  cpp_files_in(@base_dir).reject do |p|
51
67
  next true if File.dirname(p).include?(tests_dir)
52
68
  next true if File.dirname(p).include?(real_tests_dir)
69
+ next true if vendor_bundle?(p)
53
70
  end
54
71
  end
55
72
 
@@ -80,8 +97,12 @@ module ArduinoCI
80
97
  # Find all directories in the project library that include C++ header files
81
98
  # @return [Array<String>]
82
99
  def header_dirs
83
- files = Find.find(@base_dir).select { |path| HPP_EXTENSIONS.include?(File.extname(path)) }
84
- files.map { |path| File.dirname(path) }.uniq
100
+ real = File.realpath(@base_dir)
101
+ all_files = Find.find(real).reject { |path| File.directory?(path) }
102
+ unbundled = all_files.reject { |path| vendor_bundle?(path) }
103
+ files = unbundled.select { |path| HPP_EXTENSIONS.include?(File.extname(path)) }
104
+ ret = files.map { |path| File.dirname(path) }.uniq
105
+ ret
85
106
  end
86
107
 
87
108
  # wrapper for the GCC command
@@ -1,3 +1,3 @@
1
1
  module ArduinoCI
2
- VERSION = "0.1.2".freeze
2
+ VERSION = "0.1.3".freeze
3
3
  end
data/misc/default.yaml CHANGED
@@ -1,3 +1,5 @@
1
+ # Note that ci_config_spec.rb has tests for this file's contents
2
+
1
3
  packages:
2
4
  esp8266:esp8266:
3
5
  url: http://arduino.esp8266.com/stable/package_esp8266com_index.json
@@ -22,7 +24,7 @@ platforms:
22
24
  warnings:
23
25
  flags:
24
26
  zero:
25
- board: arduino:samd:zero
27
+ board: arduino:samd:arduino_zero_native
26
28
  package: arduino:samd
27
29
  gcc:
28
30
  features:
@@ -30,7 +32,7 @@ platforms:
30
32
  warnings:
31
33
  flags:
32
34
  esp8266:
33
- board: esp8266:esp8266:huzzah
35
+ board: esp8266:esp8266:huzzah:FlashSize=4M3M,CpuFrequency=80
34
36
  package: esp8266:esp8266
35
37
  gcc:
36
38
  features:
@@ -67,6 +69,7 @@ compile:
67
69
  platforms:
68
70
  - uno
69
71
  - due
72
+ - zero
70
73
  - leonardo
71
74
 
72
75
  unittest:
@@ -74,4 +77,5 @@ unittest:
74
77
  platforms:
75
78
  - uno
76
79
  - due
80
+ - zero
77
81
  - leonardo
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arduino_ci
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ian Katz