class TestCaseGenerator::GeneratorJava
Public Instance Methods
can_handle?(source_fn)
click to toggle source
# File lib/test_case_generator/generator_java.rb, line 6 def can_handle?(source_fn) File.extname(source_fn).eql? '.java' end
make_class_name(filename)
click to toggle source
# File lib/test_case_generator/generator_java.rb, line 16 def make_class_name(filename) # File.join(File.dirname(source_fn), File.basename(source_fn, File.extname(source_fn)) File.basename filename, '.*' end
make_interface_name(filename)
click to toggle source
# File lib/test_case_generator/generator_java.rb, line 21 def make_interface_name(filename) make_class_name(filename) + 'Generated' end
make_package_name(filename)
click to toggle source
# File lib/test_case_generator/generator_java.rb, line 25 def make_package_name(filename) parts = [] java_seen = false File.absolute_path(File.dirname(filename)).split('/').each do |x| parts << x if java_seen java_seen = true if x == 'java' end if parts.empty? 'com.example' else parts.join '.' end end
write(ctx, source_fn)
click to toggle source
# File lib/test_case_generator/generator_java.rb, line 10 def write(ctx, source_fn) write_skeleton source_fn unless File.exist? source_fn write_interface ctx, File.join(File.dirname(source_fn), make_interface_name(source_fn)) + '.java', make_package_name(source_fn) write_source ctx, source_fn end
write_interface(dsl_context, header_fn, package_name)
click to toggle source
# File lib/test_case_generator/generator_java.rb, line 107 def write_interface(dsl_context, header_fn, package_name) interface_name = File.basename(header_fn, File.extname(header_fn)) tmp_fn = header_fn + '.tmp' File.open(tmp_fn, 'w') do |f| writer = IndentedWriter.new f writer.puts <<EOS package #{package_name}; public interface #{interface_name} { EOS writer.block_indent ' ' do dsl_context.labels.each do |label| method_name = label writer.puts "void #{method_name}();" end end writer.puts <<EOS } EOS end FileUtils.move tmp_fn, header_fn end
write_skeleton(source_fn)
click to toggle source
# File lib/test_case_generator/generator_java.rb, line 40 def write_skeleton(source_fn) class_name = make_class_name(source_fn) File.open(source_fn, 'w') do |f| writer = IndentedWriter.new f writer.puts <<EOS package #{make_package_name source_fn}; import android.content.Context; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.Robolectric; import org.robolectric.RobolectricGradleTestRunner; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import java.util.ArrayList; import static org.junit.Assert.*; import static org.mockito.Mockito.*; @RunWith(RobolectricGradleTestRunner.class) @Config(constants = BuildConfig.class, sdk = 18) public class #{class_name} implements #{make_interface_name source_fn} { @Before public void setUp() { Robolectric.getForegroundThreadScheduler().reset(); Robolectric.getForegroundThreadScheduler().pause(); Robolectric.getBackgroundThreadScheduler().reset(); Robolectric.getBackgroundThreadScheduler().pause(); // Auto import 機能でimport文が削除されないようにするためのダミー assertEquals("dummy", "dummy"); mock(String.class); } @After public void tearDown() { Robolectric.getForegroundThreadScheduler().reset(); Robolectric.getForegroundThreadScheduler().unPause(); Robolectric.getBackgroundThreadScheduler().reset(); Robolectric.getBackgroundThreadScheduler().unPause(); } // TODO: Please implement custom actions here. private void printPatterns(String patterns) { System.err.println("<<TEST>> " + patterns); } private void runPendingTasks() { Robolectric.getForegroundThreadScheduler().advanceBy(1); } private void runTimerTasks() { Robolectric.getForegroundThreadScheduler().advanceBy(30 * 1000); } // %% } EOS end end
write_source(dsl_context, source_fn)
click to toggle source
# File lib/test_case_generator/generator_java.rb, line 132 def write_source(dsl_context, source_fn) tmp_fn = source_fn + '.tmp' source = File.open(source_fn).read File.open(tmp_fn, 'w') do |f| source.each_line do |line| f.puts line break if line =~ /^\s*\/\/\s*%%\s*$/ end writer = IndentedWriter.new f writer.blank writer.block_indent ' ' do writer.puts '//' writer.puts '// 以下の行は自動生成されているので直接編集しないでください。' writer.puts '//' writer.puts '// Generated by Test Case Generator' writer.puts '// https://rubygems.org/gems/test_case_generator' writer.puts '//' end dsl_context.each do |pattern| method_name = pattern.join '_' writer.block_indent ' ' do writer.blank writer.puts '@Test' writer.puts "public void test_#{method_name}() {" writer.block_indent ' ' do writer.puts "printPatterns(\"#{pattern.map{|p| "#{p}"}.join(', ')}\");" pattern.each do |ptn| writer.puts "#{ptn}();" end end writer.puts '}' end end writer.blank writer.puts '}' end FileUtils.move tmp_fn, source_fn end