#!/usr/bin/env ruby

# begin require 'rubygems' rescue LoadError end
# require 'ruby-debug' ; Debugger.start

require 'test/unit'
SRC_DIR = File.join(Dir.pwd, File.dirname(__FILE__)) unless
  defined?(SRC_DIR)
%w(ext lib cli).each do |dir|
  $: <<  File.join(SRC_DIR, '..', dir)
end
require 'ruby_debug'
require File.join(SRC_DIR, '..', 'cli', 'ruby-debug')

# Test Local Control Interface
class TestCtrl < Test::Unit::TestCase

  def cheap_diff(got_lines, correct_lines, outfile)
    if correct_lines.size != got_lines.size
      puts "Size difference #{correct_lines.size} vs. #{got_lines.size}"
      File.open(outfile, 'w') {|f| f.puts got_lines}
      return false
    end
    correct_lines.each_with_index do |line, i|
      correct_lines[i].chomp!
      if got_lines[i] != correct_lines[i]
        puts "difference found at line #{i+1}"
        puts "got : #{got_lines[i]}"
        puts "need: #{correct_lines[i]}"
        File.open(outfile, 'w') {|f| f.puts got_lines}
        return false
      end
    end
  end

  require 'stringio'

  # Test initial variables and setting/getting state.
  def test_ctrl
    ENV['COLUMNS'] = '80'
    ENV['EMACS'] = nil
    testbase = 'ctrl'
    out = StringIO.new('', 'w')
    Dir.chdir(SRC_DIR) do
      script = File.join('data', "#{testbase}.cmd")
      interface = Debugger::ScriptInterface.new(script, out)
      processor = Debugger::ControlCommandProcessor.new(interface)
      processor.process_commands
      got_lines = out.string.split("\n")
      right_file = File.join('data', "#{testbase}.right")
      correct_lines = File.readlines(right_file)
      assert cheap_diff(got_lines, correct_lines, "#{testbase}.out")
    end
  end
end
