Commit bde3898a authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Replaced class unit test with rspec test.

Eventually I would like to move all unit tests to rspec.
parent d6391660
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
require 'rubygems'
require 'rake'

$LOAD_PATH.unshift File.expand_path("../lib", __FILE__)

require 'rake/testtask'
Rake::TestTask.new(:test) do |test|
  test.libs << 'lib' << 'test'
  test.pattern = 'test/**/tc_*.rb'
  test.verbose = true
end

require 'spec'
require 'spec/rake/spectask'
Spec::Rake::SpecTask.new(:spec) do |spec|
  spec.spec_opts = ["--color"]
  spec.spec_files = FileList["spec/**/*_spec.rb"]
end

task :default => :test

spec/class_spec.rb

0 → 100644
+85 −0
Original line number Diff line number Diff line
require "jsduck/class"

describe Class do

  describe "#members_hash" do

    before do
      @classes = {}
      @parent = JsDuck::Class.new({
          :name => "ParentClass",
          :method => [
            {:name => "baz"},
            {:name => "foo"},
            {:name => "frank", :private => true},
          ]
        }, @classes);
      @classes["ParentClass"] = @parent
      @child = JsDuck::Class.new({
          :name => "ChildClass",
          :extends => "ParentClass",
          :method => [
            {:name => "foo"},
            {:name => "bar"},
            {:name => "zappa", :private => true},
          ]
        }, @classes);
      @classes["ChildClass"] = @child
    end

    it "returns all public members in current class" do
      ms = @parent.members_hash(:method)
      ms.values.length.should == 2
      ms["foo"][:member].should == "ParentClass"
      ms["baz"][:member].should == "ParentClass"
    end

    it "also returns all public members in parent class" do
      ms = @child.members_hash(:method)
      ms.values.length.should == 3
      ms["foo"][:member].should == "ChildClass"
      ms["bar"][:member].should == "ChildClass"
      ms["baz"][:member].should == "ParentClass"
    end
  end

  describe "#inherits_from" do

    before do
      @classes = {}
      @parent = JsDuck::Class.new({
        :name => "Parent",
      }, @classes);
      @classes["Parent"] = @parent

      @child = JsDuck::Class.new({
        :name => "Child",
        :extends => "Parent",
      }, @classes);
      @classes["Child"] = @child

      @grandchild = JsDuck::Class.new({
        :name => "GrandChild",
        :extends => "Child",
      }, @classes);
      @classes["GrandChild"] = @grandchild
    end

    it "true when asked about itself" do
      @parent.inherits_from?("Parent").should == true
    end

    it "false when asked about class it's not inheriting from" do
      @parent.inherits_from?("Child").should == false
    end

    it "true when asked about direct parent" do
      @child.inherits_from?("Parent").should == true
    end

    it "true when asked about grandparent" do
      @grandchild.inherits_from?("Parent").should == true
    end
  end

end

test/tc_class.rb

deleted100644 → 0
+0 −94
Original line number Diff line number Diff line
require "jsduck/class"
require "test/unit"

class TestClass < Test::Unit::TestCase

  def test_local_members
    cls = JsDuck::Class.new({
      :name => "MyClass",
      :method => [
        {:name => "foo"},
        {:name => "bar"},
      ]
    });

    ms = cls.members_hash(:method)
    assert_equal(2, ms.values.length)
    assert_equal("MyClass", ms["foo"][:member])
    assert_equal("MyClass", ms["bar"][:member])
  end

  def test_parent_members
    classes = {}
    parent = JsDuck::Class.new({
      :name => "ParentClass",
      :method => [
        {:name => "baz"},
        {:name => "foo"},
      ]
    }, classes);
    classes["ParentClass"] = parent
    child = JsDuck::Class.new({
      :name => "MyClass",
      :extends => "ParentClass",
      :method => [
        {:name => "foo"},
        {:name => "bar"},
      ]
    }, classes);
    classes["MyClass"] = child

    ms = child.members_hash(:method)
    assert_equal(3, ms.values.length)
    assert_equal("MyClass", ms["foo"][:member], "foo should be overridden in child class")
    assert_equal("MyClass", ms["bar"][:member], "bar is only in child class")
    assert_equal("ParentClass", ms["baz"][:member], "baz is only in parent class")
  end

  def test_private_members_are_excluded
    cls = JsDuck::Class.new({
      :name => "MyClass",
      :method => [
        {:name => "foo"},
        {:name => "bar", :private => true},
        {:name => "baz"},
        {:name => "zed", :private => true},
      ]
    });

    ms = cls.members_hash(:method)
    assert_equal(2, ms.values.length)
    assert(ms["foo"])
    assert(ms["baz"])
  end

  def test_inherits_from
    classes = {}
    parent = JsDuck::Class.new({
      :name => "Parent",
    }, classes);
    classes["Parent"] = parent

    child = JsDuck::Class.new({
      :name => "Child",
      :extends => "Parent",
    }, classes);
    classes["Child"] = child

    grandchild = JsDuck::Class.new({
      :name => "GrandChild",
      :extends => "Child",
    }, classes);
    classes["GrandChild"] = grandchild

    assert_equal(true, parent.inherits_from?("Parent"), "Parent inherits from Parent")
    assert_equal(false, parent.inherits_from?("Child"), "Parent does not inherit from Child")

    assert_equal(true, child.inherits_from?("Parent"), "Child inherits from Parent")

    assert_equal(true, grandchild.inherits_from?("Parent"), "GrandChild inherits from Parent")
    assert_equal(true, grandchild.inherits_from?("Child"), "GrandChild inherits from Child")
  end

end