Sha256: ee1e209bb1e7ea1dcab1a608d22ba622c8032d2eaf44014c9e4a7bc53ce16e4c

Contents?: true

Size: 1.8 KB

Versions: 2

Compression:

Stored size: 1.8 KB

Contents

require "test_belt"

require "stringio"
require "undies/element_stack"
require "undies/node"

class Undies::ElementStack

  class BasicTest < Test::Unit::TestCase
    include TestBelt

    context 'an element stack'
    before { @es = Undies::ElementStack.new }
    subject { @es }

    should have_instance_method :push, :pop
    should have_reader :io

    should "be an Array" do
      assert_kind_of Array, subject
    end

    should "empty by default" do
      assert subject.empty?
    end

    should "compain when trying to push non-elements" do
      assert_raises ArgumentError do
        subject.push Undies::Node.new
      end

      assert_nothing_raised do
        subject << 1
      end
    end

    should "initialize with a first item if one is given" do
      stack = Undies::ElementStack.new(12)
      assert_equal [12], stack
    end

  end

  class StreamingTest < BasicTest
    context "when streaming"
    before do
      @output = ""
      @outstream = StringIO.new(@output)
      @es = Undies::ElementStack.new(nil, @outstream)
    end

    should "know its stream" do
      assert_same @outstream, subject.io
    end

    should "stream an elements start tag when that element is pushed" do
      subject.push(Undies::Element.new(Undies::ElementStack.new, "div") {})
      assert_equal "<div>", @output
    end

    should "stream an elements end tag when that element is popped" do
      elem = Undies::Element.new(Undies::ElementStack.new, "div") {}
      subject.push(elem)
      popped_elem = subject.pop
      assert_equal "<div></div>", @output
      assert_same elem, popped_elem
    end

    should "stream an element with no content when pushed/popped" do
      subject.push(Undies::Element.new(Undies::ElementStack.new, "span"))
      subject.pop
      assert_equal "<span />", @output
    end

  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
undies-1.2.0 test/element_stack_test.rb
undies-1.1.0 test/element_stack_test.rb