class CMDTEST_master_batch < Cmdtest::Testcase
  def setup
    import_file "test/file2str.h", "./"
  end

  def test_converter
    source = "convert"

    import_file "test/#{source}.tbsp", "./"
    import_file "test/input.md", "./"

    cmd "tbsp -o #{source}.tb.c #{source}.tbsp" do
      created_files ["#{source}.tb.c"]
    end
    cmd "gcc -w -o #{source}.out #{source}.tb.c $(pkg-config --cflags --libs tree-sitter) -ltree-sitter-markdown" do
      created_files ["#{source}.out"]
    end
    cmd "./#{source}.out input.md" do
      stdout_equal /.+/
    end
  end

  def test_function_collector
    source = "function_collector"

    import_file "test/#{source}.tbsp", "./"

    cmd "tbsp -o #{source}.tb.cpp #{source}.tbsp" do
      created_files ["#{source}.tb.cpp"]
    end
    cmd "g++ -w -o #{source}.out #{source}.tb.cpp $(pkg-config --cflags --libs tree-sitter tree-sitter-cpp)" do
      created_files ["#{source}.out"]
    end
    cmd "./#{source}.out #{source}.tb.cpp" do
      stdout_equal /.+/
    end
  end

  def test_double_selector
    source = "double_selector"

    import_file "test/#{source}.tbsp", "./"

    cmd "tbsp #{source}.tbsp" do
      created_files ["#{source}.tb.c"]
    end
    cmd "g++ -w -o #{source}.out #{source}.tb.c $(pkg-config --cflags --libs tree-sitter tree-sitter-c)" do
      created_files ["#{source}.out"]
    end
    cmd "./#{source}.out #{source}.tb.c" do
      stdout_equal /.+/
    end
  end
end

class CMDTEST_error_batch < Cmdtest::Testcase
  def test_double_top
    import_file "test/double_top.tbsp", "./"

    cmd "tbsp double_top.tbsp" do
      stderr_equal /.*top.*/
      exit_nonzero
    end
  end

  def test_no_language
    import_file "test/no_language.tbsp", "./"

    cmd "tbsp no_language.tbsp" do
      stderr_equal /.*language.*/
      exit_nonzero
    end
  end
end