require "../../../spec_helper"

def with_foo_context
  yield Backtracer::Backtrace::Frame::Context.new(
    lineno: 10,
    pre: %w[foo bar baz],
    line: "violent offender!",
    post: %w[boo far faz],
  )
end

describe Backtracer::Backtrace::Frame::Context do
  describe ".to_a" do
    it "works with empty #pre and #post" do
      context = Backtracer::Backtrace::Frame::Context.new(
        lineno: 1,
        pre: %w[],
        line: "violent offender!",
        post: %w[],
      )
      context.to_a.should eq(["violent offender!"])
    end

    it "returns array with #pre, #line and #post strings" do
      with_foo_context do |context|
        context.to_a.should eq([
          "foo", "bar", "baz",
          "violent offender!",
          "boo", "far", "faz",
        ])
      end
    end
  end

  describe ".to_h" do
    it "works with empty #pre and #post" do
      context = Backtracer::Backtrace::Frame::Context.new(
        lineno: 1,
        pre: %w[],
        line: "violent offender!",
        post: %w[],
      )
      context.to_h.should eq({1 => "violent offender!"})
    end

    it "returns hash with #pre, #line and #post strings" do
      with_foo_context do |context|
        context.to_h.should eq({
           7 => "foo",
           8 => "bar",
           9 => "baz",
          10 => "violent offender!",
          11 => "boo",
          12 => "far",
          13 => "faz",
        })
      end
    end
  end
end
