class TestCaseGenerator::GeneratorPHP
Public Instance Methods
can_handle?(source_fn)
click to toggle source
# File lib/test_case_generator/generator_php.rb, line 6 def can_handle?(source_fn) File.extname(source_fn).eql? '.php' end
make_class_name(filename)
click to toggle source
# File lib/test_case_generator/generator_php.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_php.rb, line 21 def make_interface_name(filename) make_class_name(filename) + 'Generated' end
write(ctx, source_fn)
click to toggle source
# File lib/test_case_generator/generator_php.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), File.basename(source_fn, File.extname(source_fn)) + 'Generated.php') write_source ctx, source_fn end
write_interface(dsl_context, header_fn)
click to toggle source
# File lib/test_case_generator/generator_php.rb, line 41 def write_interface(dsl_context, header_fn) 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 '<?php' writer.blank writer.puts "interface #{interface_name} {" writer.block_indent ' ' do dsl_context.labels.each do |label| method_name = label writer.puts "function #{method_name}();" end end writer.puts '}' end FileUtils.move tmp_fn, header_fn end
write_skeleton(source_fn)
click to toggle source
# File lib/test_case_generator/generator_php.rb, line 25 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 <?php require_once '#{make_interface_name source_fn}.php'; class #{class_name} extends PHPUnit_Framework_TestCase implements #{make_interface_name source_fn} { // %% } EOS end end
write_source(dsl_context, source_fn)
click to toggle source
# File lib/test_case_generator/generator_php.rb, line 64 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 "public function test_#{method_name}() {" pattern.each do |ptn| writer.block_indent ' ' do writer.puts "$this->#{ptn}();" end end writer.puts '}' end end writer.blank writer.puts '}' end FileUtils.move tmp_fn, source_fn end