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