class TestCaseGenerator::GeneratorCplusplus

Public Instance Methods

can_handle?(source_fn) click to toggle source
# File lib/test_case_generator/generator_cplusplus.rb, line 6
def can_handle?(source_fn)
  File.extname(source_fn).eql? '.cpp'
end
make_class_name(filename) click to toggle source
# File lib/test_case_generator/generator_cplusplus.rb, line 15
def make_class_name(filename)
  File.basename filename, '.*'
end
write(ctx, source_fn) click to toggle source
# File lib/test_case_generator/generator_cplusplus.rb, line 10
def write(ctx, source_fn)
  write_skeleton source_fn unless File.exist? source_fn
  write_source ctx, source_fn
end
write_skeleton(source_fn) click to toggle source
# File lib/test_case_generator/generator_cplusplus.rb, line 19
    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
#include <gtest/gtest.h>

class #{class_name} : public testing::Test
{
protected:
    // TODO: Declares the variables your tests want to use.

protected:
    virtual void SetUp() {
    }

    virtual void TearDown() {
    }

protected:
    // TODO: ここにアクションを書いてください
};

// %%
EOS
      end
    end
write_source(dsl_context, source_fn) click to toggle source
# File lib/test_case_generator/generator_cplusplus.rb, line 47
def write_source(dsl_context, source_fn)
  class_name = make_class_name(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.puts '//'
    writer.puts '// 以下の行は自動生成されているので直接編集しないでください。'
    writer.puts '//'
    writer.puts '// Generated by Test Case Generator'
    writer.puts '// https://rubygems.org/gems/test_case_generator'
    writer.puts '//'

    dsl_context.each do |pattern|
      method_name = pattern.join '_'
      writer.blank
      writer.puts "TEST_F(#{class_name}, #{method_name}) {"

      pattern.each do |ptn|
        writer.block_indent '    ' do
          writer.puts "#{ptn}();"
        end
      end

      writer.puts '}'
    end

    # writer.blank
  end

  FileUtils.move tmp_fn, source_fn
end