# test_lib_sec_file.rb require 'minitest/autorun' require 'fileutils' require_relative "../lib/lib_src_file.rb" module Prepare_test def files src_text = <<~'EOS' This is a source file. EOS sample_c = <<~'EOS' #include int main (int argc, char **argv) { printf ("Hello world.\n"); } EOS sec1_text = <<~'EOS' This is a test file. The sorce of `sample.c` is: @@@include sample.c main @@@ It is the simplest C program. EOS sec2_text = <<~'EOS' To compile the C source file `sample.c`, type: ~~~ $ gcc sample.c ~~~ Then executable file `a.out` is generated. @@@shell ls @@@ To execute it, type: ~~~ $ ./a.out ~~~ The source code is in [Section 1](sec1.src.md) EOS sec05_text = <<~'EOS' Prerequisite - Linux OS like Ubuntu or Debian. - gcc EOS [ ["srcfile.src.md", src_text], ["sample.c", sample_c], ["sec1.src.md", sec1_text], ["sec2.src.md", sec2_text], ["sec0.5.src.md", sec05_text] ] end end class Test_lib_src_file < Minitest::Test include FileUtils include Prepare_test def setup # Create sample file @temp = get_temp_name() Dir.mkdir @temp unless Dir.exist? @temp files().each do |f| File.write "#{@temp}/#{f[0]}", f[1] end end def teardown remove_entry_secure(@temp) end def test_src_file src = Src_file.new "#{@temp}/srcfile.src.md" test_items = [ ["path", "\"#{@temp}/srcfile.src.md\""], ["basename", "\"srcfile.src.md\""], ["dirname", "\"#{@temp}\""], ["to_md", "\"srcfile.md\""], ["to_html", "\"srcfile.html\""], ["to_tex", "\"srcfile.tex\""], ] test_items.each do |item| assert item[1], eval("src.#{item[0]}") end end def test_sec_file src = Src_file.new "#{@temp}/srcfile.src.md" src_sec05 = Sec_file.new "#{@temp}/sec0.5.src.md" src_sec1 = Sec_file.new "#{@temp}/sec1.src.md" src_sec2 = Sec_file.new "#{@temp}/sec2.src.md" test_items = [ ["path", "\"#{@temp}/sec1.src.md\""], ["basename", "\"sec1.src.md\""], ["dirname", "\"#{@temp}\""], ["c_files", "[ \"#{@temp}/sample.c\" ]"], ["to_md", "\"sec1.md\""], ["to_html", "\"sec1.html\""], ["to_tex", "\"sec1.tex\""], ["num", "\"1\""], ["to_f", "1.0"], ["<=> src_sec05", "1"], ["<=> src_sec1", "0"], ["<=> src_sec2", "-1"], ["is_i?", "true"] ] test_items.each do |item| assert item[1], eval("src_sec1.#{item[0]}") end refute src_sec05.is_i? end def test_sec_files temp_renum = "temp_renum"+get_temp_name() unless Dir.exist? temp_renum Dir.mkdir temp_renum end files.each do |f| File.write "#{temp_renum}/#{f[0]}", f[1] end src_sec05 = Sec_file.new "#{temp_renum}/sec0.5.src.md" src_sec1 = Sec_file.new "#{temp_renum}/sec1.src.md" src_sec2 = Sec_file.new "#{temp_renum}/sec2.src.md" sec_files = Sec_files.new [src_sec05, src_sec1, src_sec2] sec_files.renum! line_actual = File.read(src_sec2).match(/The source code is in \[Section \d\]\(sec\d.src.md\)\n/).to_a[0] remove_entry_secure(temp_renum) assert_equal ["#{temp_renum}/sec1.src.md", "#{temp_renum}/sec2.src.md", "#{temp_renum}/sec3.src.md"], sec_files assert_equal "The source code is in [Section 2](sec2.src.md)\n", line_actual end private def get_temp_name "temp_"+Time.now.to_f.to_s.gsub(/\./,'') end end