mrubyc-test 0.7.3 → 0.8.1
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.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/Gemfile.lock +4 -4
- data/lib/mrubyc/test/generator/attribute.rb +3 -4
- data/lib/mrubyc/test/init.rb +8 -2
- data/lib/mrubyc/test/version.rb +1 -1
- data/lib/mrubyc-ext/mrubyc_test_case.rb +24 -4
- data/lib/mrubyc-ext/object.rb +2 -0
- data/lib/mrubyc-test.rb +8 -6
- data/lib/templates/main.c.erb +45 -6
- data/lib/templates/models.rb.erb +2 -0
- data/lib/templates/test.rb.erb +19 -12
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c0b7fb6ef6a6220b2a6036c4ba3425c3f723ebf5354d9b8683b400d40215e07d
|
4
|
+
data.tar.gz: 81222c6532836e95f7b605a146136cfebc6f127f85554a121e7c9ac2b33689eb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: df96b7eccca91fdbf41c01ee891d3b0399226ad72d81219d5241ed3efb77c51230d9530849dd648d2ac820cab3a010e2bd1af510b29906cbeffc7c57a45c373b
|
7
|
+
data.tar.gz: 77448b29e6bb4186c2f427c2159b0cb19e1cba3035d88ed711b2c16feb60a77906b31a17c65747179f781f5e816351f3ad83f88dde7e2cbc0cd6d56e680e4fbd
|
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
mrubyc-test (0.7.
|
4
|
+
mrubyc-test (0.7.4)
|
5
5
|
activesupport (~> 7.0)
|
6
6
|
rufo (~> 0.12)
|
7
7
|
thor (~> 1.2)
|
@@ -9,16 +9,16 @@ PATH
|
|
9
9
|
GEM
|
10
10
|
remote: https://rubygems.org/
|
11
11
|
specs:
|
12
|
-
activesupport (7.0.3)
|
12
|
+
activesupport (7.0.3.1)
|
13
13
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
14
14
|
i18n (>= 1.6, < 2)
|
15
15
|
minitest (>= 5.1)
|
16
16
|
tzinfo (~> 2.0)
|
17
17
|
concurrent-ruby (1.1.10)
|
18
18
|
diff-lcs (1.5.0)
|
19
|
-
i18n (1.
|
19
|
+
i18n (1.12.0)
|
20
20
|
concurrent-ruby (~> 1.0)
|
21
|
-
minitest (5.
|
21
|
+
minitest (5.16.2)
|
22
22
|
rake (13.0.6)
|
23
23
|
rspec (3.11.0)
|
24
24
|
rspec-core (~> 3.11.0)
|
@@ -19,16 +19,15 @@ module Mrubyc
|
|
19
19
|
Module.const_get(class_name.upcase)
|
20
20
|
end
|
21
21
|
unless model_class
|
22
|
-
# Deprecate 2022-06-01
|
23
|
-
#print "\e[33m"
|
24
|
-
#puts "[WARN] #{model_file} doesn't have corresponding class `#{class_name}`."
|
25
|
-
#print "\e[m"
|
26
22
|
next
|
27
23
|
end
|
28
24
|
model_class.class_eval do
|
29
25
|
def method_missing(_method_name, *_args)
|
30
26
|
# do nothing
|
31
27
|
end
|
28
|
+
def respond_to_missing?(_sym, _include_private)
|
29
|
+
super
|
30
|
+
end
|
32
31
|
end
|
33
32
|
end
|
34
33
|
# get information from test files
|
data/lib/mrubyc/test/init.rb
CHANGED
@@ -54,12 +54,18 @@ module Mrubyc
|
|
54
54
|
erb = ERB.new(File.read(File.expand_path('../../../templates/sample_test.rb.erb', __FILE__)), nil, '-')
|
55
55
|
File.write(File.join(config['test_dir'], 'sample_test.rb'), erb.result(binding))
|
56
56
|
|
57
|
+
init_main_c
|
58
|
+
|
59
|
+
puts
|
60
|
+
puts "\e[32mWelcome to mrubyc-test, the world\'s first TDD tool for mruby/c microcontroller development.\e[0m"
|
61
|
+
end
|
62
|
+
|
63
|
+
def init_main_c
|
64
|
+
config = Mrubyc::Test::Config.read(check: false)
|
57
65
|
puts ' cp test/tmp/main.c'
|
58
66
|
erb = ERB.new(File.read(File.expand_path('../../../templates/main.c.erb', __FILE__)), nil, '-')
|
59
67
|
File.write(File.join(config['test_tmp_dir'], 'main.c'), erb.result(binding))
|
60
68
|
|
61
|
-
puts
|
62
|
-
puts "\e[32mWelcome to mrubyc-test, the world\'s first TDD tool for mruby/c microcontroller development.\e[0m"
|
63
69
|
end
|
64
70
|
end
|
65
71
|
end
|
data/lib/mrubyc/test/version.rb
CHANGED
@@ -14,7 +14,7 @@ class MrubycTestCase
|
|
14
14
|
print $colors[:success] + '.' + $colors[:reset]
|
15
15
|
end
|
16
16
|
end
|
17
|
-
def failure(assertion, expected, actual, message)
|
17
|
+
def failure(assertion, expected, actual, message, error = nil)
|
18
18
|
$failures << {
|
19
19
|
class_and_method: $current_class_and_method,
|
20
20
|
path: @information[:path].to_s,
|
@@ -23,7 +23,8 @@ class MrubycTestCase
|
|
23
23
|
message: message,
|
24
24
|
assertion: assertion.to_s,
|
25
25
|
expected: expected.to_s,
|
26
|
-
actual: actual.to_ss
|
26
|
+
actual: actual.to_ss,
|
27
|
+
error: error
|
27
28
|
}
|
28
29
|
if @puts_failure_message
|
29
30
|
puts $colors[:failure] + ' ' + actual.to_ss + " (:" + assertion.to_s + ")" + $colors[:reset]
|
@@ -41,6 +42,25 @@ class MrubycTestCase
|
|
41
42
|
print $colors[:pending] + '.' + $colors[:reset]
|
42
43
|
end
|
43
44
|
|
45
|
+
def assert_raise(*errors, &block)
|
46
|
+
assertion = :assert_raise
|
47
|
+
e = nil
|
48
|
+
begin
|
49
|
+
block.call
|
50
|
+
rescue => e
|
51
|
+
errors.each do |error|
|
52
|
+
if error == e.class || (error.class == e.class && error.message == e.message)
|
53
|
+
success(assertion, errors, error)
|
54
|
+
return
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
expected = errors.map {|error|
|
59
|
+
error.message.length > 0 ? "#<#{error.class}: #{error.message}>" : "#{error.class}"
|
60
|
+
}.join(" || ")
|
61
|
+
failure(assertion, expected, (e || "[No error]"), "")
|
62
|
+
end
|
63
|
+
|
44
64
|
def assert_equal(expected, actual, message = nil)
|
45
65
|
assertion = :assert_equal
|
46
66
|
actual == expected ? success(assertion, expected, actual) : failure(assertion, expected, actual, message)
|
@@ -86,9 +106,9 @@ class MrubycTestCase
|
|
86
106
|
end
|
87
107
|
end
|
88
108
|
|
89
|
-
def description(text)
|
109
|
+
def self.description(text)
|
90
110
|
end
|
91
|
-
def desc(text)
|
111
|
+
def self.desc(text)
|
92
112
|
end
|
93
113
|
def setup
|
94
114
|
end
|
data/lib/mrubyc-ext/object.rb
CHANGED
data/lib/mrubyc-test.rb
CHANGED
@@ -50,9 +50,10 @@ module Mrubyc::Test
|
|
50
50
|
pwd = Dir.pwd
|
51
51
|
hal_path = "#{pwd}/#{config['mrubyc_src_dir']}/hal"
|
52
52
|
hal_bak_path = "#{pwd}/#{config['mrubyc_src_dir']}/~hal"
|
53
|
+
FileUtils.rm_rf hal_bak_path
|
53
54
|
FileUtils.mv(hal_path, hal_bak_path) if FileTest.exist?(hal_path)
|
54
55
|
exit_code = 0
|
55
|
-
cc = ENV['CC'].length > 0 ? ENV['CC'] : "gcc"
|
56
|
+
cc = ENV['CC'].to_s.length > 0 ? ENV['CC'] : "gcc"
|
56
57
|
qemu = ENV['QEMU']
|
57
58
|
begin
|
58
59
|
FileUtils.ln_sf "#{pwd}/#{config['test_tmp_dir']}/hal", "#{pwd}/#{config['mrubyc_src_dir']}/hal"
|
@@ -60,12 +61,12 @@ module Mrubyc::Test
|
|
60
61
|
[
|
61
62
|
"#{mrbc_path} -B test test.rb",
|
62
63
|
"#{mrbc_path} -B models models.rb",
|
63
|
-
"#{cc} -O0 -g3 -Wall -I #{pwd}/#{config['mrubyc_src_dir']} -static -o test main.c #{pwd}/#{config['mrubyc_src_dir']}/*.c #{pwd}/#{config['mrubyc_src_dir']}/hal/*.c -DMRBC_USE_MATH=1 -DMRBC_USE_HAL_POSIX #{ENV["CFLAGS"]} #{ENV["LDFLAGS"]}",
|
64
|
+
"#{cc} -O0 -g3 -Wall -I #{pwd}/#{config['mrubyc_src_dir']} -static -o test main.c #{pwd}/#{config['mrubyc_src_dir']}/*.c #{pwd}/#{config['mrubyc_src_dir']}/hal/*.c -DMRBC_INT64 -DMAX_SYMBOLS_COUNT=1000 -DMRBC_USE_MATH=1 -DMRBC_USE_HAL_POSIX #{ENV["CFLAGS"]} #{ENV["LDFLAGS"]}",
|
64
65
|
"#{qemu} ./test"
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
66
|
+
].each do |cmd|
|
67
|
+
puts cmd
|
68
|
+
puts
|
69
|
+
exit_code = 1 unless Kernel.system(cmd)
|
69
70
|
end
|
70
71
|
end
|
71
72
|
ensure
|
@@ -112,6 +113,7 @@ module Mrubyc::Test
|
|
112
113
|
RBENV_VERSION will be ignored if you specify this option.
|
113
114
|
DESC
|
114
115
|
def test(testfilepath = "test/*.rb")
|
116
|
+
Mrubyc::Test::Init.init_main_c
|
115
117
|
init_env
|
116
118
|
config = Mrubyc::Test::Config.read
|
117
119
|
method_name_pattern = (%r{\A/(.*)/\Z} =~ options[:name] ? Regexp.new($1) : options[:name])
|
data/lib/templates/main.c.erb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
#include "mrubyc.h"
|
2
2
|
#include <stdio.h>
|
3
3
|
#include <stdlib.h>
|
4
|
+
#include <stdbool.h>
|
4
5
|
#include "models.c"
|
5
6
|
#include "test.c"
|
6
7
|
|
@@ -9,15 +10,28 @@ static uint8_t my_memory_pool[MEMORY_SIZE];
|
|
9
10
|
|
10
11
|
int exit_code = 0;
|
11
12
|
|
12
|
-
static void
|
13
|
+
static void
|
14
|
+
c_exit(struct VM *vm, mrbc_value v[], int argc)
|
13
15
|
{
|
14
16
|
exit_code = GET_INT_ARG(1);
|
15
17
|
}
|
16
18
|
|
19
|
+
//================================================================
|
20
|
+
/*! Object#require
|
21
|
+
* (for PRK Firmware)
|
22
|
+
*/
|
23
|
+
static void
|
24
|
+
c_require(struct VM *vm, mrbc_value v[], int argc)
|
25
|
+
{
|
26
|
+
/* Nothing to do */
|
27
|
+
SET_NIL_RETURN();
|
28
|
+
}
|
29
|
+
|
17
30
|
//================================================================
|
18
31
|
/*! Object#instance_variable_get
|
19
32
|
*/
|
20
|
-
static void
|
33
|
+
static void
|
34
|
+
c_instance_variable_get(struct VM *vm, mrbc_value v[], int argc)
|
21
35
|
{
|
22
36
|
mrbc_kv_handle *kvh = &v[0].instance->ivar;
|
23
37
|
const char *name = (const char *)GET_STRING_ARG(1);
|
@@ -34,7 +48,8 @@ static void c_instance_variable_get(struct VM *vm, mrbc_value v[], int argc)
|
|
34
48
|
//================================================================
|
35
49
|
/*! DEBUG PRINT
|
36
50
|
*/
|
37
|
-
static void
|
51
|
+
static void
|
52
|
+
c_debugprint(struct VM *vm, mrbc_value v[], int argc)
|
38
53
|
{
|
39
54
|
console_putchar('\n');
|
40
55
|
for( int i = 0; i < 79; i++ ) { console_putchar('='); }
|
@@ -50,13 +65,37 @@ static void c_debugprint(struct VM *vm, mrbc_value v[], int argc)
|
|
50
65
|
console_putchar('\n');
|
51
66
|
}
|
52
67
|
|
53
|
-
|
68
|
+
bool
|
69
|
+
mrbc_load_model(const uint8_t *mrb)
|
70
|
+
{
|
71
|
+
mrbc_vm *vm = mrbc_vm_open(NULL);
|
72
|
+
if( vm == 0 ) {
|
73
|
+
console_printf("Error: Can't open VM.\n");
|
74
|
+
exit_code++;
|
75
|
+
return false;
|
76
|
+
}
|
77
|
+
if( mrbc_load_mrb(vm, mrb) != 0 ) {
|
78
|
+
mrbc_print_exception(&vm->exception);
|
79
|
+
exit_code++;
|
80
|
+
return false;
|
81
|
+
}
|
82
|
+
mrbc_vm_begin(vm);
|
83
|
+
mrbc_vm_run(vm);
|
84
|
+
mrbc_raw_free(vm);
|
85
|
+
return true;
|
86
|
+
}
|
87
|
+
|
88
|
+
int
|
89
|
+
main(void) {
|
54
90
|
mrbc_init(my_memory_pool, MEMORY_SIZE);
|
91
|
+
mrbc_define_method(0, mrbc_class_object, "require", c_require);
|
55
92
|
mrbc_define_method(0, mrbc_class_object, "debugprint", c_debugprint);
|
56
93
|
mrbc_define_method(0, mrbc_class_object, "exit", c_exit);
|
57
94
|
mrbc_define_method(0, mrbc_class_object, "instance_variable_get", c_instance_variable_get);
|
58
|
-
|
59
|
-
|
95
|
+
mrbc_load_model(models);
|
96
|
+
mrbc_load_model(test);
|
97
|
+
/* test should be a task so that methods like sleep work */
|
98
|
+
mrbc_create_task(test, 0);
|
60
99
|
mrbc_run();
|
61
100
|
return exit_code;
|
62
101
|
}
|
data/lib/templates/models.rb.erb
CHANGED
data/lib/templates/test.rb.erb
CHANGED
@@ -43,7 +43,8 @@ def summerize
|
|
43
43
|
puts "Pendings:\n"
|
44
44
|
$pendings.each_with_index do |pending, index|
|
45
45
|
puts $colors[:pending]
|
46
|
-
|
46
|
+
print index # FIXME: picorbc's bug :thinking_face:
|
47
|
+
puts ") " + pending[:class_and_method]
|
47
48
|
print $colors[:info]
|
48
49
|
puts " # " + pending[:path] + ":" + pending[:line]
|
49
50
|
puts $colors[:reset]
|
@@ -53,12 +54,14 @@ def summerize
|
|
53
54
|
puts "Failures:\n"
|
54
55
|
$failures.each_with_index do |failure, index|
|
55
56
|
puts
|
56
|
-
|
57
|
+
print index # FIXME: picorbc's bug :thinking_face:
|
58
|
+
puts ") " + failure[:class_and_method] + " (:" + failure[:assertion] + ")"
|
57
59
|
print $colors[:failure]
|
58
60
|
puts " description : " + failure[:description]
|
59
|
-
puts " " + failure[:
|
60
|
-
puts "
|
61
|
-
puts "
|
61
|
+
puts " expected : " + failure[:expected] if failure[:expected].length > 0
|
62
|
+
puts " actual : " + failure[:actual] if failure[:actual]
|
63
|
+
puts " error : " + failure[:error] if failure[:error]
|
64
|
+
puts " message : " + failure[:message] if failure[:message]
|
62
65
|
print $colors[:info]
|
63
66
|
puts " # " + failure[:path] + ":" + failure[:line]
|
64
67
|
print $colors[:reset]
|
@@ -136,13 +139,17 @@ end
|
|
136
139
|
puts
|
137
140
|
$current_class_and_method = "<%= test_case[:information][:test_class_name] %>#<%= test_case[:information][:method_name] %>"
|
138
141
|
puts $current_class_and_method
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
142
|
+
begin
|
143
|
+
my_case = <%= test_case[:information][:test_class_name] %>.new(information, <%= verbose.to_s %>)
|
144
|
+
my_case.setup
|
145
|
+
my_case.<%= test_case[:information][:method_name] %>
|
146
|
+
<% if test_case[:mocks] -%>
|
147
|
+
my_case.check_mock
|
148
|
+
<% end -%>
|
149
|
+
my_case.teardown
|
150
|
+
rescue => e
|
151
|
+
my_case.failure(nil, nil, "", e.message, e.class.to_s)
|
152
|
+
end
|
146
153
|
puts
|
147
154
|
|
148
155
|
<% end -%>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mrubyc-test
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- HASUMI Hitoshi
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-07-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -137,7 +137,7 @@ homepage: https://github.com/mrubyc/mrubyc-test
|
|
137
137
|
licenses:
|
138
138
|
- BSD-3-Clause
|
139
139
|
metadata: {}
|
140
|
-
post_install_message:
|
140
|
+
post_install_message:
|
141
141
|
rdoc_options: []
|
142
142
|
require_paths:
|
143
143
|
- lib
|
@@ -152,8 +152,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
152
152
|
- !ruby/object:Gem::Version
|
153
153
|
version: '0'
|
154
154
|
requirements: []
|
155
|
-
rubygems_version: 3.3.
|
156
|
-
signing_key:
|
155
|
+
rubygems_version: 3.3.7
|
156
|
+
signing_key:
|
157
157
|
specification_version: 4
|
158
158
|
summary: Test Framework for mruby/c
|
159
159
|
test_files: []
|