class TestCaseGenerator::GeneratorJavaScript

Public Instance Methods

can_handle?(source_fn) click to toggle source
# File lib/test_case_generator/generator_javascript.rb, line 6
def can_handle?(source_fn)
  File.extname(source_fn).eql? '.js'
end
make_class_name(filename) click to toggle source
# File lib/test_case_generator/generator_javascript.rb, line 17
def make_class_name(filename)
  File.basename filename, '.*'
end
write(ctx, source_fn) click to toggle source
# File lib/test_case_generator/generator_javascript.rb, line 10
def write(ctx, source_fn)
  html_fn = File.join(File.dirname(source_fn), make_class_name(source_fn)) + '.html'
  write_html html_fn unless File.exist? html_fn
  write_skeleton source_fn unless File.exist? source_fn
  write_source ctx, source_fn
end
write_html(html_fn) click to toggle source
# File lib/test_case_generator/generator_javascript.rb, line 21
    def write_html(html_fn)
      class_name = make_class_name(html_fn)
      File.open(html_fn, 'w') do |f|
        writer = IndentedWriter.new f
        writer.puts <<EOS
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />

    <script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.4/jasmine.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.4/jasmine-html.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.4/boot.js"></script>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.4/jasmine.css" />

    <script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine-ajax/3.2.0/mock-ajax.js"></script>

    <script src="#{class_name}.js"></script>
  </head>
  <body>
  </body>
</html>
EOS
      end
    end
write_skeleton(source_fn) click to toggle source
# File lib/test_case_generator/generator_javascript.rb, line 47
    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
describe('#{class_name}', function() {

    beforeEach(function() {
        this.testTarget = null; // TODO
    });

    afterEach(function() {
    });

    // %%

});
EOS
      end
    end
write_source(dsl_context, source_fn) click to toggle source
# File lib/test_case_generator/generator_javascript.rb, line 68
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|
      writer.block_indent '    ' do
        writer.blank
        writer.puts "it('#{pattern.join ', '}', function() {"

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

        writer.puts '});'
      end
    end

    writer.blank
    writer.puts '});'
  end

  FileUtils.move tmp_fn, source_fn
end