test_case_generator 0.2.1 → 0.2.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b2fd026581bd0bc429eb04313a282515db6824cd
4
- data.tar.gz: c6e958fa78801959f64789ca205f3d8d9f48a756
3
+ metadata.gz: 656a3c2e29e60d4eab8d44b0c4d43c33ed8ae08c
4
+ data.tar.gz: 4468e1db4ea928e417869e4ae9666cee4e83ec68
5
5
  SHA512:
6
- metadata.gz: 933be1201506bfba53a7ce57482cb216de6df96739125138095ee370e625e59a0ca90e09094c87595f754c7701debb2b0cf18d769d244b35849eeae2d4b39f38
7
- data.tar.gz: ecb54cdc5bed936199a889d691e0a149335bbc18e4e1753da2f7423b8849e51404a8487f6e20529a864e6bdadd7a59319df8bb7863817165a97d4aa1176baeab
6
+ metadata.gz: d6df9fd3d3dde363eb7a3159585f7287fa08f810bd4374042bf154bf167082f94a73b334e27f780cc4ac0a249fd47bfd442e1082beea86db930b6cda2432f848
7
+ data.tar.gz: 6f66ed720bdf352e70aa3253d1996a620eaf07972b3da778b6dc08705b19231788f504eff4fe0336c74de263441519dbcfc8e2238d7f7bbf75a457f1cd8c5ba9
@@ -0,0 +1,22 @@
1
+ before { |items|
2
+ items << :on_create
3
+ items << :on_start
4
+ }
5
+
6
+ parallel {
7
+ choice { |items|
8
+ items << []
9
+ items << [:on_resume, :on_pause]
10
+ }
11
+
12
+ choice { |items|
13
+ items << :data_changed
14
+ items << :network_error
15
+ items << :time_out
16
+ }
17
+ }
18
+
19
+ after { |items|
20
+ items << :on_stop
21
+ items << :on_destroy
22
+ }
@@ -7,6 +7,7 @@ require 'test_case_generator/generator_objective_c'
7
7
  require 'test_case_generator/generator_java'
8
8
  require 'test_case_generator/generator_php'
9
9
  require 'test_case_generator/generator_python'
10
+ require 'test_case_generator/generator_javascript'
10
11
 
11
12
  module TestCaseGenerator
12
13
  class CLI < Thor
@@ -22,6 +23,7 @@ module TestCaseGenerator
22
23
  factory.register TestCaseGenerator::GeneratorJava.new
23
24
  factory.register TestCaseGenerator::GeneratorPHP.new
24
25
  factory.register TestCaseGenerator::GeneratorPython.new
26
+ factory.register TestCaseGenerator::GeneratorJavaScript.new
25
27
 
26
28
  gen = factory.query source_fn
27
29
  gen.write ctx, source_fn
@@ -82,6 +82,51 @@ module TestCaseGenerator
82
82
  end
83
83
  alias_method :seq, :concat
84
84
 
85
+ def parallel(&block)
86
+ child_context = DSLContext.new
87
+ child_context.instance_eval &block
88
+
89
+ first = true
90
+ tmp = []
91
+ child_context.children.each do |ctx|
92
+ tmp2 = []
93
+ ctx.raw_each do |ptn|
94
+ if first
95
+ tmp2 << ptn
96
+ else
97
+ tmp.each do |x|
98
+ (0..x.length + ptn.length - 1).to_a.combination(x.length) do |index_arr|
99
+ x_index = 0
100
+ ptn_index = 0
101
+ tmp2 << (0..x.length + ptn.length - 1).map do |i|
102
+ if index_arr.include?(i)
103
+ ret = x[x_index]
104
+ x_index += 1
105
+ else
106
+ ret = ptn[ptn_index]
107
+ ptn_index += 1
108
+ end
109
+
110
+ ret
111
+ end
112
+ end
113
+ end
114
+ end
115
+ end
116
+
117
+ tmp = tmp2
118
+ first = false
119
+ end
120
+
121
+ tmp.each do |x|
122
+ @patterns << x
123
+ x.each do |label|
124
+ @labels << label unless @labels.include? label
125
+ end
126
+ end
127
+ end
128
+ alias_method :para, :parallel
129
+
85
130
  def raw_each
86
131
  @patterns.each { |ptn| yield @before + ptn + @after }
87
132
  end
@@ -8,15 +8,14 @@ module TestCaseGenerator
8
8
  end
9
9
 
10
10
  def write(ctx, source_fn)
11
- write_skeleton source_fn unless File.exists? source_fn
11
+ write_skeleton source_fn unless File.exist? source_fn
12
12
  write_interface ctx, File.join(File.dirname(source_fn), make_interface_name(source_fn)) + '.java'
13
13
  write_source ctx, source_fn
14
14
  end
15
15
 
16
-
17
16
  def make_class_name(filename)
18
17
  # File.join(File.dirname(source_fn), File.basename(source_fn, File.extname(source_fn))
19
- File.basename filename, ".*"
18
+ File.basename filename, '.*'
20
19
  end
21
20
 
22
21
  def make_interface_name(filename)
@@ -27,12 +26,8 @@ module TestCaseGenerator
27
26
  parts = []
28
27
  java_seen = false
29
28
  File.absolute_path(File.dirname(filename)).split('/').each do |x|
30
- if java_seen
31
- parts << x
32
- end
33
- if x == 'java'
34
- java_seen = true
35
- end
29
+ parts << x if java_seen
30
+ java_seen = true if x == 'java'
36
31
  end
37
32
 
38
33
  if parts.empty?
@@ -0,0 +1,110 @@
1
+ require 'test_case_generator/dsl_context'
2
+ require 'test_case_generator/indented_writer'
3
+
4
+ module TestCaseGenerator
5
+ class GeneratorJavaScript
6
+ def can_handle?(source_fn)
7
+ File.extname(source_fn).eql? '.js'
8
+ end
9
+
10
+ def write(ctx, source_fn)
11
+ html_fn = File.join(File.dirname(source_fn), make_class_name(source_fn)) + '.html'
12
+ write_html html_fn unless File.exist? html_fn
13
+ write_skeleton source_fn unless File.exist? source_fn
14
+ write_source ctx, source_fn
15
+ end
16
+
17
+ def make_class_name(filename)
18
+ File.basename filename, '.*'
19
+ end
20
+
21
+ def write_html(html_fn)
22
+ class_name = make_class_name(html_fn)
23
+ File.open(html_fn, 'w') do |f|
24
+ writer = IndentedWriter.new f
25
+ writer.puts <<EOS
26
+ <!DOCTYPE html>
27
+ <html>
28
+ <head>
29
+ <meta charset="UTF-8" />
30
+
31
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.4/jasmine.js"></script>
32
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.4/jasmine-html.js"></script>
33
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.4/boot.js"></script>
34
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.4/jasmine.css" />
35
+
36
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine-ajax/3.2.0/mock-ajax.js"></script>
37
+
38
+ <script src="#{class_name}.js"></script>
39
+ </head>
40
+ <body>
41
+ </body>
42
+ </html>
43
+ EOS
44
+ end
45
+ end
46
+
47
+ def write_skeleton(source_fn)
48
+ class_name = make_class_name(source_fn)
49
+ File.open(source_fn, 'w') do |f|
50
+ writer = IndentedWriter.new f
51
+ writer.puts <<EOS
52
+ describe('#{class_name}', function() {
53
+
54
+ beforeEach(function() {
55
+ this.testTarget = null; // TODO
56
+ });
57
+
58
+ afterEach(function() {
59
+ });
60
+
61
+ // %%
62
+
63
+ });
64
+ EOS
65
+ end
66
+ end
67
+
68
+ def write_source(dsl_context, source_fn)
69
+ tmp_fn = source_fn + '.tmp'
70
+ source = File.open(source_fn).read
71
+ File.open(tmp_fn, 'w') do |f|
72
+ source.each_line do |line|
73
+ f.puts line
74
+ break if line =~ /^\s*\/\/\s*%%\s*$/
75
+ end
76
+
77
+ writer = IndentedWriter.new f
78
+ writer.blank
79
+ writer.block_indent ' ' do
80
+ writer.puts '//'
81
+ writer.puts '// 以下の行は自動生成されているので直接編集しないでください。'
82
+ writer.puts '//'
83
+ writer.puts '// Generated by Test Case Generator'
84
+ writer.puts '// https://rubygems.org/gems/test_case_generator'
85
+ writer.puts '//'
86
+ end
87
+
88
+ dsl_context.each do |pattern|
89
+ writer.block_indent ' ' do
90
+ writer.blank
91
+ writer.puts "it('#{pattern.join ', '}', function() {"
92
+
93
+ pattern.each do |ptn|
94
+ writer.block_indent ' ' do
95
+ writer.puts "#{ptn}(this);"
96
+ end
97
+ end
98
+
99
+ writer.puts '});'
100
+ end
101
+ end
102
+
103
+ writer.blank
104
+ writer.puts '});'
105
+ end
106
+
107
+ FileUtils.move tmp_fn, source_fn
108
+ end
109
+ end
110
+ end
@@ -8,13 +8,13 @@ module TestCaseGenerator
8
8
  end
9
9
 
10
10
  def write(ctx, source_fn)
11
- write_skeleton source_fn unless File.exists? source_fn
11
+ write_skeleton source_fn unless File.exist? source_fn
12
12
  write_header ctx, File.join(File.dirname(source_fn), File.basename(source_fn, File.extname(source_fn)) + 'Generated.h')
13
13
  write_source ctx, source_fn
14
14
  end
15
15
 
16
16
  def make_class_name(filename)
17
- File.basename filename, ".*"
17
+ File.basename filename, '.*'
18
18
  end
19
19
 
20
20
  def write_skeleton(source_fn)
@@ -8,12 +8,12 @@ module TestCaseGenerator
8
8
  end
9
9
 
10
10
  def write(ctx, source_fn)
11
- write_skeleton source_fn unless File.exists? source_fn
11
+ write_skeleton source_fn unless File.exist? source_fn
12
12
  write_source ctx, source_fn
13
13
  end
14
14
 
15
15
  def make_class_name(filename)
16
- File.basename filename, ".*"
16
+ File.basename filename, '.*'
17
17
  end
18
18
 
19
19
  def write_skeleton(source_fn)
@@ -1,3 +1,3 @@
1
1
  module TestCaseGenerator
2
- VERSION = '0.2.1'
2
+ VERSION = '0.2.2'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: test_case_generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kaoru Yanase
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-08-28 00:00:00.000000000 Z
11
+ date: 2015-08-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -99,12 +99,14 @@ files:
99
99
  - bin/setup
100
100
  - bin/test_case_generator
101
101
  - example/demo.testcase
102
+ - example/parallel.testcase
102
103
  - exe/test_case_generator
103
104
  - lib/test_case_generator.rb
104
105
  - lib/test_case_generator/cli.rb
105
106
  - lib/test_case_generator/dsl_context.rb
106
107
  - lib/test_case_generator/generator_factory.rb
107
108
  - lib/test_case_generator/generator_java.rb
109
+ - lib/test_case_generator/generator_javascript.rb
108
110
  - lib/test_case_generator/generator_objective_c.rb
109
111
  - lib/test_case_generator/generator_php.rb
110
112
  - lib/test_case_generator/generator_python.rb