mrubyc-test 0.1.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.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/.rspec +3 -0
- data/.travis.yml +7 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +52 -0
- data/LICENSE.txt +21 -0
- data/README.md +154 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/exe/mrubyc-test +6 -0
- data/lib/mrubyc-ext/hash.rb +10 -0
- data/lib/mrubyc-ext/mock.rb +8 -0
- data/lib/mrubyc-ext/mrubyc_test_case.rb +72 -0
- data/lib/mrubyc-ext/object.rb +54 -0
- data/lib/mrubyc-test.rb +81 -0
- data/lib/mrubyc/test/config.rb +29 -0
- data/lib/mrubyc/test/generator/attribute.rb +49 -0
- data/lib/mrubyc/test/generator/double.rb +34 -0
- data/lib/mrubyc/test/generator/script.rb +21 -0
- data/lib/mrubyc/test/generator/test_case.rb +58 -0
- data/lib/mrubyc/test/init.rb +56 -0
- data/lib/mrubyc/test/version.rb +5 -0
- data/lib/mrubyc_test_case/mrubyc_test_case.rb +79 -0
- data/lib/templates/main.c.erb +39 -0
- data/lib/templates/sample_test.rb.erb +55 -0
- data/lib/templates/test.rb.erb +111 -0
- data/mrubyc-test.gemspec +33 -0
- metadata +158 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
#include "mrubyc.h"
|
|
2
|
+
#include <stdio.h>
|
|
3
|
+
#include <stdlib.h>
|
|
4
|
+
#include "test.c"
|
|
5
|
+
|
|
6
|
+
#define MEMORY_SIZE (1024*63)
|
|
7
|
+
static uint8_t my_memory_pool[MEMORY_SIZE];
|
|
8
|
+
|
|
9
|
+
int exit_code;
|
|
10
|
+
|
|
11
|
+
static void c_exit(mrb_vm *vm, mrb_value *v, int argc){
|
|
12
|
+
exit_code = GET_INT_ARG(1);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
//================================================================
|
|
16
|
+
/*! DEBUG PRINT
|
|
17
|
+
*/
|
|
18
|
+
static void c_debugprint(mrb_vm *vm, mrb_value *v, int argc){
|
|
19
|
+
console_putchar('\n');
|
|
20
|
+
for( int i = 0; i < 79; i++ ) { console_putchar('='); }
|
|
21
|
+
console_putchar('\n');
|
|
22
|
+
unsigned char *message = GET_STRING_ARG(1);
|
|
23
|
+
console_printf("%s\n", message);
|
|
24
|
+
int total, used, free, fragment;
|
|
25
|
+
mrbc_alloc_statistics( &total, &used, &free, &fragment );
|
|
26
|
+
console_printf("Memory total:%d, used:%d, free:%d, fragment:%d\n", total, used, free, fragment );
|
|
27
|
+
for( int i = 0; i < 79; i++ ) { console_putchar('='); }
|
|
28
|
+
console_putchar('\n');
|
|
29
|
+
console_putchar('\n');
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
int main(void) {
|
|
33
|
+
mrbc_init(my_memory_pool, MEMORY_SIZE);
|
|
34
|
+
mrbc_define_method(0, mrbc_class_object, "debugprint", c_debugprint);
|
|
35
|
+
mrbc_define_method(0, mrbc_class_object, "exit", c_exit);
|
|
36
|
+
mrbc_create_task( test, 0 );
|
|
37
|
+
mrbc_run();
|
|
38
|
+
return exit_code;
|
|
39
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# This is an example of test script
|
|
4
|
+
|
|
5
|
+
# The name of test class should correspond to its `filename.camelize`
|
|
6
|
+
# WhateverTest class have to inherit some requirements from MrubycTestCase class
|
|
7
|
+
class SampleTest < MrubycTestCase
|
|
8
|
+
|
|
9
|
+
# setup() will be invoked before each test case
|
|
10
|
+
def setup
|
|
11
|
+
@string = 'Ruby is nice'
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# teardown() will be invoked before each test case
|
|
15
|
+
def teardown
|
|
16
|
+
# for some technical reasons, it is recommended to reset instance variables by your self
|
|
17
|
+
@string = nil
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# you can and should write some description at just before test case
|
|
21
|
+
description 'replacememt method of String class'
|
|
22
|
+
def string_tr_case
|
|
23
|
+
@string.tr!('i', 'a')
|
|
24
|
+
assert_equal 'Ruby as nace', @string
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# # in order to make the cases below success, you should locate `mrblib/models/sample.rb` as this:
|
|
28
|
+
# #
|
|
29
|
+
# # class Sample
|
|
30
|
+
# # attr_accessor :result
|
|
31
|
+
# # def do_something(arg)
|
|
32
|
+
# # @result = arg + still_not_defined_method
|
|
33
|
+
# # end
|
|
34
|
+
# # def do_other_thing
|
|
35
|
+
# # is_to_be_hit()
|
|
36
|
+
# # end
|
|
37
|
+
# # end
|
|
38
|
+
#
|
|
39
|
+
# # desc is an alias of description
|
|
40
|
+
# desc 'stub test sample'
|
|
41
|
+
# def stub_case
|
|
42
|
+
# sample_obj = Sample.new
|
|
43
|
+
# stub(sample_obj).still_not_defined_method { ", so we are nice" }
|
|
44
|
+
# sample_obj.do_something(@string)
|
|
45
|
+
# assert_equal 'Ruby is nice, so we are nice', sample_obj.result
|
|
46
|
+
# end
|
|
47
|
+
#
|
|
48
|
+
# desc 'mock test sample'
|
|
49
|
+
# def mock_case
|
|
50
|
+
# sample_obj = Sample.new
|
|
51
|
+
# mock(sample_obj).is_to_be_hit
|
|
52
|
+
# sample_obj.do_other_thing
|
|
53
|
+
# end
|
|
54
|
+
|
|
55
|
+
end
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Generated by gem 'mrubyc_test' version: <%= Mrubyc::Test::VERSION %>
|
|
3
|
+
#
|
|
4
|
+
# Genarated at: <%= Time.now %>
|
|
5
|
+
# Your RUBY_DESCRIPTION: <%= RUBY_DESCRIPTION %>
|
|
6
|
+
#
|
|
7
|
+
# For more information, see <%= Gem.loaded_specs['mrubyc_test']&.homepage %>
|
|
8
|
+
#
|
|
9
|
+
|
|
10
|
+
if RUBY_VERSION == '1.9' && MRUBYC_VERSION
|
|
11
|
+
class Math
|
|
12
|
+
end
|
|
13
|
+
class Numeric
|
|
14
|
+
end
|
|
15
|
+
RUBY_DESCRIPTION = 'mruby/c ' + MRUBYC_VERSION
|
|
16
|
+
else
|
|
17
|
+
require 'objspace'
|
|
18
|
+
def debugprint(message)
|
|
19
|
+
puts
|
|
20
|
+
puts '==============================================================================='
|
|
21
|
+
puts message
|
|
22
|
+
puts "Object Space Memory used:#{ObjectSpace.memsize_of_all}"
|
|
23
|
+
puts '==============================================================================='
|
|
24
|
+
puts
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
debugprint(RUBY_DESCRIPTION)
|
|
28
|
+
$success_count = 0
|
|
29
|
+
$failure_count = 0
|
|
30
|
+
$colors = {
|
|
31
|
+
normal: "\e[37m",
|
|
32
|
+
success: "\e[32m",
|
|
33
|
+
failure: "\e[31m"
|
|
34
|
+
}
|
|
35
|
+
def summerize
|
|
36
|
+
puts 'Finished'
|
|
37
|
+
print ($failure_count > 0) ? $colors[:failure] : $colors[:success]
|
|
38
|
+
print ($success_count + $failure_count).to_s + ' examples, '
|
|
39
|
+
print $failure_count.to_s + ' failures'
|
|
40
|
+
print $colors[:normal]
|
|
41
|
+
puts
|
|
42
|
+
($failure_count > 0) ? 1 : 0
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
<% %w(object hash mock mrubyc_test_case).each do |basename| -%>
|
|
46
|
+
<%= File.read(File.join(mrubyc_class_dir, basename + '.rb')) %>
|
|
47
|
+
<% end -%>
|
|
48
|
+
|
|
49
|
+
<% model_files.each do |file_name| -%>
|
|
50
|
+
<%= File.read(file_name) %>
|
|
51
|
+
<% end -%>
|
|
52
|
+
|
|
53
|
+
<% test_files.each do |file_name| -%>
|
|
54
|
+
<%= File.read(file_name) %>
|
|
55
|
+
<% end -%>
|
|
56
|
+
|
|
57
|
+
<% test_cases.each do |test_case| -%>
|
|
58
|
+
<% test_case[:stubs].each do |stub| -%>
|
|
59
|
+
class <%= stub[:class_name] %>
|
|
60
|
+
attr_accessor <%= stub[:instance_variables] %>
|
|
61
|
+
def <%= stub[:method_name] %>
|
|
62
|
+
<% if stub[:return_value].is_a?(String) -%>
|
|
63
|
+
"<%= stub[:return_value] %>"
|
|
64
|
+
<% else -%>
|
|
65
|
+
<%= stub[:return_value] %>
|
|
66
|
+
<% end -%>
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
<% end -%>
|
|
70
|
+
<% test_case[:mocks].each do |mock| -%>
|
|
71
|
+
class <%= mock[:class_name] %>
|
|
72
|
+
def <%= mock[:method_name] %>
|
|
73
|
+
$mock.actual.add_by_key :<%= mock[:method_name] %>
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
<% end -%>
|
|
77
|
+
<% if test_case[:mocks].size > 0 -%>
|
|
78
|
+
<% mrblib_classes = test_case[:mocks].map{ |item| item[:class_name] } -%>
|
|
79
|
+
class MrubycTestCase
|
|
80
|
+
def mock(object)
|
|
81
|
+
<% mrblib_classes.each do |mrblib_class| -%>
|
|
82
|
+
if object.to_s.include?('#<<%= mrblib_class %>:')
|
|
83
|
+
<%= mrblib_class %>Double.new
|
|
84
|
+
end
|
|
85
|
+
<% end -%>
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
<% test_case[:mocks].each do |mock| -%>
|
|
89
|
+
class <%= mock[:class_name] %>Double
|
|
90
|
+
def <%= mock[:method_name] %>
|
|
91
|
+
$mock.expected.add_by_key :<%= mock[:method_name] %>
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
<% end -%>
|
|
95
|
+
<% end -%>
|
|
96
|
+
information = <%= test_case[:information].to_s %>
|
|
97
|
+
my_case = <%= test_case[:information][:test_class_name] %>.new(information)
|
|
98
|
+
my_case.setup
|
|
99
|
+
my_case.<%= test_case[:information][:method_name] %>
|
|
100
|
+
<% if test_case[:mocks] -%>
|
|
101
|
+
my_case.check_mock
|
|
102
|
+
<% end -%>
|
|
103
|
+
my_case.teardown
|
|
104
|
+
|
|
105
|
+
<% end -%>
|
|
106
|
+
|
|
107
|
+
debugprint('finish test')
|
|
108
|
+
|
|
109
|
+
exit_code = summerize
|
|
110
|
+
exit(exit_code)
|
|
111
|
+
|
data/mrubyc-test.gemspec
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
|
|
2
|
+
lib = File.expand_path("../lib", __FILE__)
|
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
+
require "mrubyc/test/version"
|
|
5
|
+
|
|
6
|
+
Gem::Specification.new do |spec|
|
|
7
|
+
spec.name = "mrubyc-test"
|
|
8
|
+
spec.version = Mrubyc::Test::VERSION
|
|
9
|
+
spec.authors = ["HASUMI Hitoshi"]
|
|
10
|
+
spec.email = ["hasumikin@gmail.com"]
|
|
11
|
+
|
|
12
|
+
spec.summary = %q{Test Framework for mruby/c}
|
|
13
|
+
spec.description = %q{mrubyc-test is an unit test framework for mruby/c, supporting basic assertions, stub and mock.}
|
|
14
|
+
spec.homepage = "https://github.com/hasumikin/mrubyc-test"
|
|
15
|
+
spec.license = "MIT"
|
|
16
|
+
|
|
17
|
+
# Specify which files should be added to the gem when it is released.
|
|
18
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
|
19
|
+
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
|
20
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
|
21
|
+
end
|
|
22
|
+
spec.bindir = "exe"
|
|
23
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
24
|
+
spec.require_paths = ["lib"]
|
|
25
|
+
|
|
26
|
+
spec.add_development_dependency "bundler", "~> 2.0"
|
|
27
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
|
28
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
|
29
|
+
|
|
30
|
+
spec.add_dependency "thor", "~> 0.20"
|
|
31
|
+
spec.add_dependency "activesupport", "~> 5.2"
|
|
32
|
+
spec.add_dependency "rufo", "~> 0.4"
|
|
33
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: mrubyc-test
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- HASUMI Hitoshi
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: exe
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2019-01-14 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: bundler
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '2.0'
|
|
20
|
+
type: :development
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '2.0'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: rake
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '10.0'
|
|
34
|
+
type: :development
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '10.0'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: rspec
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - "~>"
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '3.0'
|
|
48
|
+
type: :development
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - "~>"
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '3.0'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: thor
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - "~>"
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '0.20'
|
|
62
|
+
type: :runtime
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - "~>"
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '0.20'
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: activesupport
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - "~>"
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: '5.2'
|
|
76
|
+
type: :runtime
|
|
77
|
+
prerelease: false
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - "~>"
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: '5.2'
|
|
83
|
+
- !ruby/object:Gem::Dependency
|
|
84
|
+
name: rufo
|
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
|
86
|
+
requirements:
|
|
87
|
+
- - "~>"
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: '0.4'
|
|
90
|
+
type: :runtime
|
|
91
|
+
prerelease: false
|
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
+
requirements:
|
|
94
|
+
- - "~>"
|
|
95
|
+
- !ruby/object:Gem::Version
|
|
96
|
+
version: '0.4'
|
|
97
|
+
description: mrubyc-test is an unit test framework for mruby/c, supporting basic assertions,
|
|
98
|
+
stub and mock.
|
|
99
|
+
email:
|
|
100
|
+
- hasumikin@gmail.com
|
|
101
|
+
executables:
|
|
102
|
+
- mrubyc-test
|
|
103
|
+
extensions: []
|
|
104
|
+
extra_rdoc_files: []
|
|
105
|
+
files:
|
|
106
|
+
- ".gitignore"
|
|
107
|
+
- ".rspec"
|
|
108
|
+
- ".travis.yml"
|
|
109
|
+
- CODE_OF_CONDUCT.md
|
|
110
|
+
- Gemfile
|
|
111
|
+
- Gemfile.lock
|
|
112
|
+
- LICENSE.txt
|
|
113
|
+
- README.md
|
|
114
|
+
- Rakefile
|
|
115
|
+
- bin/console
|
|
116
|
+
- bin/setup
|
|
117
|
+
- exe/mrubyc-test
|
|
118
|
+
- lib/mrubyc-ext/hash.rb
|
|
119
|
+
- lib/mrubyc-ext/mock.rb
|
|
120
|
+
- lib/mrubyc-ext/mrubyc_test_case.rb
|
|
121
|
+
- lib/mrubyc-ext/object.rb
|
|
122
|
+
- lib/mrubyc-test.rb
|
|
123
|
+
- lib/mrubyc/test/config.rb
|
|
124
|
+
- lib/mrubyc/test/generator/attribute.rb
|
|
125
|
+
- lib/mrubyc/test/generator/double.rb
|
|
126
|
+
- lib/mrubyc/test/generator/script.rb
|
|
127
|
+
- lib/mrubyc/test/generator/test_case.rb
|
|
128
|
+
- lib/mrubyc/test/init.rb
|
|
129
|
+
- lib/mrubyc/test/version.rb
|
|
130
|
+
- lib/mrubyc_test_case/mrubyc_test_case.rb
|
|
131
|
+
- lib/templates/main.c.erb
|
|
132
|
+
- lib/templates/sample_test.rb.erb
|
|
133
|
+
- lib/templates/test.rb.erb
|
|
134
|
+
- mrubyc-test.gemspec
|
|
135
|
+
homepage: https://github.com/hasumikin/mrubyc-test
|
|
136
|
+
licenses:
|
|
137
|
+
- MIT
|
|
138
|
+
metadata: {}
|
|
139
|
+
post_install_message:
|
|
140
|
+
rdoc_options: []
|
|
141
|
+
require_paths:
|
|
142
|
+
- lib
|
|
143
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
144
|
+
requirements:
|
|
145
|
+
- - ">="
|
|
146
|
+
- !ruby/object:Gem::Version
|
|
147
|
+
version: '0'
|
|
148
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
149
|
+
requirements:
|
|
150
|
+
- - ">="
|
|
151
|
+
- !ruby/object:Gem::Version
|
|
152
|
+
version: '0'
|
|
153
|
+
requirements: []
|
|
154
|
+
rubygems_version: 3.0.1
|
|
155
|
+
signing_key:
|
|
156
|
+
specification_version: 4
|
|
157
|
+
summary: Test Framework for mruby/c
|
|
158
|
+
test_files: []
|