Sha256: 7abdfb8f5fa5a0dfa94d7de52f52fbf847c4d6c667c967d5ac2237a595241b60

Contents?: true

Size: 1.18 KB

Versions: 3

Compression:

Stored size: 1.18 KB

Contents

require File.join(File.dirname(__FILE__), %w[spec_helper])

describe TireSwing::VisitorDefinition, "when included" do
  before(:each) do
    @nodes = Module.new
    @nodes.class_eval do
      include TireSwing::VisitorDefinition
    end
    Object.const_set("Foo", Class.new)
  end
  after(:each) do
    Object.send(:remove_const, "Foo")
  end

  it "adds a visitor method" do
    @nodes.methods.should include("visitor")
  end

  describe ".visitor" do
    it "defines a class" do
      @nodes.class_eval { visitor :printer }
      @nodes.constants.should include("Printer")
    end

    it "defines a class that inherits from a Visitor" do
      @nodes.class_eval { visitor :printer }
      @nodes.const_get("Printer").ancestors.should include(TireSwing::Visitor)
    end

    it "defines a class with a visits class method" do
      @nodes.class_eval { visitor :printer }
      @nodes.const_get("Printer").methods.should include("visits")
    end

    it "evaluates at a class level to allow for attribute definitions and more" do
      @nodes.class_eval do
        visitor(:printer) { attr_accessor :thingy }
      end
      @nodes.const_get("Printer").new.should respond_to(:thingy=)
    end

  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
aniero-tire_swing-0.0.4 spec/visitor_definition_spec.rb
aniero-tire_swing-0.0.5 spec/visitor_definition_spec.rb
aniero-tire_swing-0.0.6 spec/visitor_definition_spec.rb