rumld 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,101 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+
3
+ module Rumld
4
+ describe 'Node' do
5
+ before(:each) do
6
+ @node = Rumld::Node.new(stub('tree', :doc_dir => '/chicken/noodle'), 'Rumld::Node')
7
+ end
8
+
9
+ it 'to_dot for belongs_to relation is blank when there association is empty' do
10
+ assoc = stub('Assoc', :options => {})
11
+ @node.send(:to_dot_for_belongs_to, assoc).should be_empty
12
+ end
13
+
14
+ it 'have an empty active record associations if the object does not have associations' do
15
+ @node.send(:active_record_associations).should == []
16
+ end
17
+
18
+ it 'active record associations reflect on all associations when available' do
19
+ @node.send(:constant).expects(:reflect_on_all_associations).returns(['One'])
20
+ @node.send(:active_record_associations).should == ['One']
21
+ end
22
+
23
+ it 'uses constant name to derive the constant' do
24
+ @node.send(:constant).should == Rumld::Node
25
+ end
26
+
27
+ it 'uses the intersect of rdoc_insepctors all included modules and trees constant names to determine included modules' do
28
+ @node.tree.expects(:constant_names).returns(['A', 'C', 'A::D'])
29
+ @node.stubs(:rdoc_inspector).returns(stub('RDocInspector', :all_included_modules => ['A', 'B'] ))
30
+ @node.included_modules.should == ['A']
31
+ end
32
+
33
+ it 'converts included_modules to_dot' do
34
+ @node.expects(:included_modules).returns(['NPR', 'Radio'])
35
+ @node.included_modules_to_dot.should == ['"Rumld::Node" -> "NPR" [style=dotted, arrowhead=empty]', '"Rumld::Node" -> "Radio" [style=dotted, arrowhead=empty]']
36
+ end
37
+
38
+ it 'should use self_to_dot in node_to_dot if there are no children' do
39
+ @node.expects(:self_to_dot).returns('No Children')
40
+ @node.expects(:children?).returns(false)
41
+ @node.node_to_dot.should == 'No Children'
42
+ end
43
+
44
+ it 'should use self_to_dot and children node_to_dot if there are children' do
45
+ child = Rumld::Node.new(@node.tree, "#{@node.constant_name}::Considered")
46
+ @node.expects(:self_to_dot).returns('Children')
47
+ child.expects(:self_to_dot).returns('I am a child')
48
+ @node.children << child
49
+
50
+ @node.node_to_dot.no_whitespace.should match(/#{Regexp.escape(%(subgraphclusterNode{label="Node))}/ )
51
+
52
+ end
53
+
54
+ it 'should have a self_and_descendants' do
55
+ child = Rumld::Node.new(@node.tree, "#{@node.constant_name}::Considered")
56
+ child.expects(:self_and_descendants).returns([child]).at_least(1)
57
+ @node.children << child
58
+ @node.self_and_descendants.should == [@node, child]
59
+ end
60
+
61
+ it 'by default it should have no children' do
62
+ @node.children.should == []
63
+ @node.children?.should == false
64
+ end
65
+
66
+ it 'should not be a parent of a constant at the same level in the module tree' do
67
+ @node = Rumld::Node.new(stub('tree', :doc_dir => '/chicken/noodle'), 'Object')
68
+ @node.should_be_parent_of?('Rumld').should be_false
69
+ end
70
+
71
+ it 'should be a parent of a constant one level deeper in the module tree' do
72
+ @node.should_be_parent_of?("#{@node.constant_name}::Considered").should be_true
73
+ end
74
+
75
+ it 'should not be a parent of itself' do
76
+ @node.should_be_parent_of?("#{@node.constant_name}").should be_false
77
+ end
78
+
79
+ it 'should not be a parent of a constant in the wrong module space' do
80
+ @node.should_be_parent_of?("Piggly::#{@node.constant_name}::Considered").should be_false
81
+ end
82
+
83
+ it 'should not be a parent of a constant two levels deeper than itself' do
84
+ @node.should_be_parent_of?("#{@node.constant_name}::Considered::Modules").should be_false
85
+ end
86
+
87
+ it 'doc_dir is delegated to underlying tree' do
88
+ @node.tree.doc_dir.should == @node.doc_dir
89
+ end
90
+
91
+ it 'constant_is_module is delegated to the underlying rdoc_inspector' do
92
+ @node.expects(:rdoc_inspector).returns(stub('RDocInspector', :doc_is_for_module? => true))
93
+ @node.constant_is_module?.should be_true
94
+ end
95
+
96
+ it 'methods_by_section is delegated to undelrying rdoc_inspector' do
97
+ @node.expects(:rdoc_inspector).returns(stub('RDocInspector', :methods_by_section => {}))
98
+ @node.methods_by_section.should == {}
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,91 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+
3
+ #class Rumld::RDocInspectorTest < Test::Unit::TestCase
4
+ #
5
+ # def setup_rdoc
6
+ # `rdoc #{File.dirname(__FILE__).gsub(' ', '\\ ')}`
7
+ # end
8
+ #
9
+ # def teardown
10
+ # `rm -rf #{File.join(File.dirname(__FILE__), 'doc').gsub(' ', '\\ ')}`
11
+ # end
12
+ #
13
+ # def setup
14
+ # @node = stub('Node', :constant_name => 'Rumld::RDocInspector', :doc_dir => File.join(File.dirname(__FILE__), '..', 'doc'))
15
+ # @constant_name = 'Rumld::RdocInspectorTest'
16
+ # @rdoc_inspector = Rumld::RDocInspector.new(@node, @constant_name)
17
+ # end
18
+ #
19
+ # def test_doc_file_for
20
+ # assert_equal 'hello/world/classes/How/Are/You.html', Rumld::RDocInspector.doc_file_for('hello/world', 'How::Are::You')
21
+ # end
22
+ #
23
+ # def test_all_included_modules
24
+ # string = %(
25
+ # <html><body><div id="includes">
26
+ # <h3 class="section-bar">Included Modules</h3>
27
+ #
28
+ # <div id="includes-list">
29
+ # <span class="include-name">Two::Towers</span>
30
+ # <span class="include-name"><a href="AccountModel/AccountImport.html">AccountModel::AccountImport</a></span>
31
+ # </div>
32
+ # </div></body></html>
33
+ # )
34
+ # @rdoc_inspector.expects(:doc).returns(Hpricot( string ))
35
+ # assert_equal ['Two::Towers', 'AccountModel::AccountImport'], @rdoc_inspector.all_included_modules
36
+ # end
37
+ #
38
+ # def test_all_included_modules_should_be_empty_when_no_matching_elements
39
+ # string = %(
40
+ # <html><body>
41
+ # </body></html>
42
+ # )
43
+ # @rdoc_inspector.expects(:doc).returns(Hpricot( string ))
44
+ # assert_equal [], @rdoc_inspector.all_included_modules
45
+ # end
46
+ #
47
+ # def test_doc_is_for_module_when_given_a_module_that_has_been_rdoced
48
+ # string = '<html><body><div id="classHeader">
49
+ # <table class="header-table">
50
+ # <tr class="top-aligned-row">
51
+ # <td><strong>Module</strong></td>
52
+ # <td class="class-name-in-header">Rumld::Grapher</td>
53
+ # </tr>
54
+ # </table>
55
+ # </div></body></html>'
56
+ # @rdoc_inspector.expects(:doc).returns(Hpricot( string ))
57
+ # assert @rdoc_inspector.doc_is_for_module?
58
+ # end
59
+ #
60
+ # def test_doc_is_for_module_when_given_a_class_that_has_been_rdoced
61
+ # string = '<html><body><div id="classHeader">
62
+ # <table class="header-table">
63
+ # <tr class="top-aligned-row">
64
+ # <td><strong>Class</strong></td>
65
+ # <td class="class-name-in-header">Rumld::Grapher</td>
66
+ # </tr>
67
+ # </table>
68
+ # </div></body></html>'
69
+ # @rdoc_inspector.expects(:doc).returns(Hpricot( string ))
70
+ # assert ! @rdoc_inspector.doc_is_for_module?
71
+ # end
72
+ #
73
+ # def test_doc_should_open_the_doc_for_file_and_yield_to_hpricot
74
+ # setup_rdoc
75
+ # assert_kind_of Hpricot, @rdoc_inspector.doc
76
+ # end
77
+ #
78
+ # def test_doc_file_for_should_delegate_to_class_methods
79
+ # Rumld::RDocInspector.expects(:doc_file_for).returns('hello')
80
+ # assert_equal 'hello', @rdoc_inspector.doc_file_for
81
+ # end
82
+ #
83
+ # def test_methods_by_section_has_public_instance_methods
84
+ # setup_rdoc
85
+ # result = @rdoc_inspector.methods_by_section
86
+ # assert result.has_key?(:public_instance)
87
+ # assert result[:public_instance].include?('test_methods_by_section_has_public_instance_methods()')
88
+ # end
89
+ #
90
+ #end
91
+ #
data/spec/spec.opts ADDED
@@ -0,0 +1,6 @@
1
+ --colour
2
+ --format
3
+ progress
4
+ --loadby
5
+ mtime
6
+ --reverse
@@ -0,0 +1,78 @@
1
+ ## This file is copied to ~/spec when you run 'ruby script/generate rspec'
2
+ ## from the project root directory.
3
+ #ENV["RAILS_ENV"] = "test"
4
+ #require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
5
+ #require 'spec/rails'
6
+ #
7
+ #Spec::Runner.configure do |config|
8
+ # config.use_transactional_fixtures = true
9
+ # config.use_instantiated_fixtures = false
10
+ # config.fixture_path = RAILS_ROOT + '/spec/fixtures'
11
+ #
12
+ # # You can declare fixtures for each behaviour like this:
13
+ # # describe "...." do
14
+ # # fixtures :table_a, :table_b
15
+ # #
16
+ # # Alternatively, if you prefer to declare them only once, you can
17
+ # # do so here, like so ...
18
+ # #
19
+ # # config.global_fixtures = :table_a, :table_b
20
+ # #
21
+ # # If you declare global fixtures, be aware that they will be declared
22
+ # # for all of your examples, even those that don't use them.
23
+ #end
24
+ #
25
+ require 'stringio'
26
+ require 'rbconfig'
27
+
28
+ dir = File.dirname(__FILE__)
29
+ lib_path = File.expand_path("#{dir}/../lib")
30
+ $LOAD_PATH.unshift lib_path unless $LOAD_PATH.include?(lib_path)
31
+ $_spec_spec = true # Prevents Kernel.exit in various places
32
+
33
+ require 'rumld'
34
+ gem 'rspec'
35
+ require 'spec'
36
+
37
+ Spec::Runner.configure do |config|
38
+ config.mock_with :mocha
39
+ end
40
+
41
+ class << ActiveRecord::Base
42
+ def columns
43
+ [:id].collect{|i| ActiveRecord::ConnectionAdapters::Column.new(i, nil)}
44
+ end
45
+ end
46
+
47
+ module Abstract; end
48
+ class FirstAbstractUnit < ActiveRecord::Base
49
+ include Abstract
50
+ has_many :second_abstract_units
51
+ has_one :primary_abstract_unit, :class_name => 'SecondAbstractUnit'
52
+ end
53
+
54
+ class SecondAbstractUnit < ActiveRecord::Base
55
+ include Abstract
56
+
57
+ belongs_to :first_abstract_unit
58
+ end
59
+
60
+ class ThirdAbstractUnit < ActiveRecord::Base
61
+ belongs_to :stuff, :polymorphic => true
62
+ end
63
+
64
+ class FourthAbstractUnit < ActiveRecord::Base
65
+ has_many :third_abstract_units, :as => :stuff
66
+ end
67
+
68
+ class String
69
+ def no_whitespace
70
+ gsub(/(\ |\n|\r)/, '')
71
+ end
72
+ end
73
+
74
+ class Nil
75
+ def no_whitespace
76
+ self
77
+ end
78
+ end
@@ -0,0 +1,44 @@
1
+ require File.join(File.dirname(__FILE__), 'test_helper')
2
+
3
+ class Rumld::GraphTest < Test::Unit::TestCase
4
+
5
+ def test_to_dot_delegates_to_tree
6
+ obj = Rumld::Graph.new('', [],[])
7
+ obj.expects(:tree).returns(stub('Tree', :to_dot => :to_dot))
8
+ assert_equal :to_dot, obj.to_dot
9
+ end
10
+
11
+ def test_collect_possible_constant_names
12
+ assert_equal ["A", "A::B", "A::B::C", "A::B::C::D", "A::B::D", "A::C", "A::C::D", "A::D",
13
+ "B", "B::C", "B::C::D", "B::D",
14
+ "C", "C::D",
15
+ "D"], Rumld::Graph.new(nil, nil, nil).send(:collect_possible_constant_names, ['A', 'B', 'C', 'D'])
16
+ end
17
+
18
+ def test_constants_defined
19
+ file = <<-EOV
20
+ class One
21
+ class Two::Three < One
22
+ include Eight
23
+ extend Nine
24
+ def function(one)
25
+ end
26
+ end
27
+ module Four
28
+ end
29
+ class << self
30
+ end
31
+
32
+ class << Five
33
+ end
34
+ end
35
+ EOV
36
+ assert_equal( ['One', 'Two::Three', 'Four', 'Five'], Rumld::Graph.new(nil, nil, nil).send(:constants_defined, file.split("\n")))
37
+ end
38
+
39
+ def test_files_to_process_should_use_the_files
40
+ grapher = Rumld::Graph.new(nil, [File.dirname(__FILE__),File.dirname(__FILE__)], [File.basename(__FILE__)])
41
+ assert_equal [__FILE__], grapher.send(:files_to_process)
42
+ end
43
+
44
+ end
@@ -0,0 +1,121 @@
1
+ require File.join(File.dirname(__FILE__), 'test_helper')
2
+
3
+ class Rumld::NodeTest < Test::Unit::TestCase
4
+ def setup
5
+ @node = Rumld::Node.new(stub('tree', :doc_dir => '/chicken/noodle'), 'Rumld::NodeTest')
6
+ end
7
+
8
+ def test_to_dot_for_belongs_to_should_blank
9
+ assoc = stub('Assoc', :options => {})
10
+ assert @node.send(:to_dot_for_belongs_to, assoc).empty?
11
+ end
12
+
13
+
14
+ def test_reflect_on_all_associations_without_an_active_record_object
15
+ @node = Rumld::Node.new(stub('tree', :doc_dir => '/chicken/noodle'), 'Rumld::Node')
16
+ assert_equal [], @node.send(:active_record_associations)
17
+ end
18
+
19
+ def test_reflect_on_all_associations_without_an_active_record_object
20
+ @node = Rumld::Node.new(stub('tree', :doc_dir => '/chicken/noodle'), 'Rumld::Node')
21
+ @node.send(:constant).expects(:reflect_on_all_associations).returns(['One'])
22
+ assert_equal ['One'], @node.send(:active_record_associations)
23
+ end
24
+
25
+ def test_constant
26
+ assert_equal Rumld::Node, Rumld::Node.new(stub('tree', :doc_dir => '/chicken/noodle'), 'Rumld::Node').send(:constant)
27
+ end
28
+
29
+ def test_active_record_associations
30
+ assert_equal Rumld::Node, Rumld::Node.new(stub('tree', :doc_dir => '/chicken/noodle'), 'Rumld::Node').send(:constant)
31
+ end
32
+
33
+ def test_included_modules_should_be_the_intersect_of_all_included_modules_and_rdocced_modules
34
+ @node.tree.expects(:constant_names).returns(['A', 'C', 'A::D'])
35
+ @node.stubs(:rdoc_inspector).returns(stub('RDocInspector', :all_included_modules => ['A', 'B'] ))
36
+ assert_equal ['A'], @node.included_modules
37
+ end
38
+
39
+ def test_included_modules_to_dot
40
+ @node.expects(:included_modules).returns(['NPR', 'Radio'])
41
+ assert_equal( ['"Rumld::NodeTest" -> "NPR" [style=dotted, arrowhead=empty]', '"Rumld::NodeTest" -> "Radio" [style=dotted, arrowhead=empty]'], @node.included_modules_to_dot)
42
+ end
43
+
44
+ def test_node_to_dot_without_children
45
+ @node.expects(:self_to_dot).returns('No Children')
46
+ @node.expects(:children?).returns(false)
47
+ assert_equal 'No Children', @node.node_to_dot
48
+ end
49
+
50
+ def test_node_to_dot_with_children
51
+ child = Rumld::Node.new(@node.tree, "#{@node.constant_name}::Considered")
52
+ @node.expects(:self_to_dot).returns('Children')
53
+ child.expects(:self_to_dot).returns('I am a child')
54
+ @node.children << child
55
+
56
+ assert_match( /#{Regexp.escape(%(subgraphclusterNodeTest{label="NodeTest))}/, @node.node_to_dot.no_whitespace)
57
+ end
58
+
59
+ def test_self_and_descendants
60
+ child = Rumld::Node.new(@node.tree, "#{@node.constant_name}::Considered")
61
+ child.expects(:self_and_descendants).returns([child]).at_least(1)
62
+ @node.children << child
63
+ assert_equal [@node, child], @node.self_and_descendants
64
+ end
65
+
66
+ def test_children_should_default_to_an_array
67
+ assert_equal [], @node.children
68
+ end
69
+
70
+ def test_children_empty_means_false_for_children?
71
+ assert ! @node.children?
72
+ end
73
+
74
+ def test_children_not_empty_means_true_for_children?
75
+ @node.children << 'Hello'
76
+ assert @node.children?
77
+ end
78
+
79
+ def test_constants_should_be_parent_of_regression_prevention_1
80
+ @node = Rumld::Node.new(stub('tree', :doc_dir => '/chicken/noodle'), 'Object')
81
+ assert ! @node.should_be_parent_of?('Rumld')
82
+ end
83
+
84
+ def test_constants_one_module_level_deeper_should_be_child_of_node
85
+ assert @node.should_be_parent_of?('Rumld::NodeTest::Considered')
86
+ end
87
+
88
+ def test_constants_should_not_be_parents_of_themselves
89
+ assert ! @node.should_be_parent_of?('Rumld::NodeTest')
90
+ end
91
+
92
+ def test_constants_in_wrong_module_space_should_not_be_child_of_node
93
+ assert ! @node.should_be_parent_of?('This::Is::Rumld::NodeTest')
94
+ end
95
+
96
+ def test_constants_one_module_level_deeper_in_wrong_module_space_should_not_be_child_of_node
97
+ assert ! @node.should_be_parent_of?('This::Is::Rumld::NodeTest::Considered')
98
+ end
99
+
100
+ def test_constants_two_module_level_deeper_should_be_child_of_node
101
+ assert ! @node.should_be_parent_of?('Rumld::NodeTest::Considered::On')
102
+ end
103
+
104
+ def test_doc_dir_is_delegated_to_nodes_tree
105
+ assert_equal @node.tree.doc_dir, @node.doc_dir
106
+ end
107
+
108
+ def test_constant_is_module_is_delegated_to_rdoc_inspector_doc_is_for_module
109
+ @node.expects(:rdoc_inspector).returns(stub('RDocInspector', :doc_is_for_module? => true))
110
+ assert_equal true, @node.constant_is_module?
111
+ end
112
+
113
+ def test_methods_by_section_is_delegated_to_rdoc_inspector
114
+ @node.expects(:rdoc_inspector).returns(stub('RDocInspector', :methods_by_section => {}))
115
+ assert_equal( {}, @node.methods_by_section )
116
+ end
117
+
118
+ def test_format_methods_should_replace_block_bracketes
119
+ assert_equal "function(self = \\{ :page =\\> 1\\}) \\{ \\|self\\| ... \\}\\l", @node.send(:format_methods, ["function(self = { :page => 1}) { |self| ... }"])
120
+ end
121
+ end
@@ -0,0 +1,90 @@
1
+ require File.join(File.dirname(__FILE__), 'test_helper')
2
+
3
+ class Rumld::RDocInspectorTest < Test::Unit::TestCase
4
+
5
+ def setup_rdoc
6
+ `rdoc #{File.dirname(__FILE__).gsub(' ', '\\ ')}`
7
+ end
8
+
9
+ def teardown
10
+ `rm -rf #{File.join(File.dirname(__FILE__), 'doc').gsub(' ', '\\ ')}`
11
+ end
12
+
13
+ def setup
14
+ @node = stub('Node', :constant_name => 'Rumld::RDocInspector', :doc_dir => File.join(File.dirname(__FILE__), '..', 'doc'))
15
+ @constant_name = 'Rumld::RdocInspectorTest'
16
+ @rdoc_inspector = Rumld::RDocInspector.new(@node, @constant_name)
17
+ end
18
+
19
+ def test_doc_file_for
20
+ assert_equal 'hello/world/classes/How/Are/You.html', Rumld::RDocInspector.doc_file_for('hello/world', 'How::Are::You')
21
+ end
22
+
23
+ def test_all_included_modules
24
+ string = %(
25
+ <html><body><div id="includes">
26
+ <h3 class="section-bar">Included Modules</h3>
27
+
28
+ <div id="includes-list">
29
+ <span class="include-name">Two::Towers</span>
30
+ <span class="include-name"><a href="AccountModel/AccountImport.html">AccountModel::AccountImport</a></span>
31
+ </div>
32
+ </div></body></html>
33
+ )
34
+ @rdoc_inspector.expects(:doc).returns(Hpricot( string ))
35
+ assert_equal ['Two::Towers', 'AccountModel::AccountImport'], @rdoc_inspector.all_included_modules
36
+ end
37
+
38
+ def test_all_included_modules_should_be_empty_when_no_matching_elements
39
+ string = %(
40
+ <html><body>
41
+ </body></html>
42
+ )
43
+ @rdoc_inspector.expects(:doc).returns(Hpricot( string ))
44
+ assert_equal [], @rdoc_inspector.all_included_modules
45
+ end
46
+
47
+ def test_doc_is_for_module_when_given_a_module_that_has_been_rdoced
48
+ string = '<html><body><div id="classHeader">
49
+ <table class="header-table">
50
+ <tr class="top-aligned-row">
51
+ <td><strong>Module</strong></td>
52
+ <td class="class-name-in-header">Rumld::Grapher</td>
53
+ </tr>
54
+ </table>
55
+ </div></body></html>'
56
+ @rdoc_inspector.expects(:doc).returns(Hpricot( string ))
57
+ assert @rdoc_inspector.doc_is_for_module?
58
+ end
59
+
60
+ def test_doc_is_for_module_when_given_a_class_that_has_been_rdoced
61
+ string = '<html><body><div id="classHeader">
62
+ <table class="header-table">
63
+ <tr class="top-aligned-row">
64
+ <td><strong>Class</strong></td>
65
+ <td class="class-name-in-header">Rumld::Grapher</td>
66
+ </tr>
67
+ </table>
68
+ </div></body></html>'
69
+ @rdoc_inspector.expects(:doc).returns(Hpricot( string ))
70
+ assert ! @rdoc_inspector.doc_is_for_module?
71
+ end
72
+
73
+ def test_doc_should_open_the_doc_for_file_and_yield_to_hpricot
74
+ setup_rdoc
75
+ assert_kind_of Hpricot, @rdoc_inspector.doc
76
+ end
77
+
78
+ def test_doc_file_for_should_delegate_to_class_methods
79
+ Rumld::RDocInspector.expects(:doc_file_for).returns('hello')
80
+ assert_equal 'hello', @rdoc_inspector.doc_file_for
81
+ end
82
+
83
+ def test_methods_by_section_has_public_instance_methods
84
+ setup_rdoc
85
+ result = @rdoc_inspector.methods_by_section
86
+ assert result.has_key?(:public_instance)
87
+ assert result[:public_instance].include?('test_methods_by_section_has_public_instance_methods()')
88
+ end
89
+
90
+ end
@@ -0,0 +1,59 @@
1
+ require File.join(File.dirname(__FILE__), 'test_helper')
2
+
3
+ class Rumld::TreeTest < Test::Unit::TestCase
4
+ def setup
5
+ @tree = Rumld::Tree.new(nil, [])
6
+ end
7
+
8
+ def test_doc_dir_is_delegated_graph
9
+ @tree.expects(:graph).returns(stub('Graph', :doc_dir => :doc_dir))
10
+ assert_equal :doc_dir, @tree.doc_dir
11
+ end
12
+
13
+ def test_build_nodes_with_multi_level_constant_names
14
+ @tree = Rumld::Tree.new(nil, ['A', 'A::B', 'A::B::C'])
15
+ assert_equal ['A'], @tree.nodes.collect{|n| n.constant_name}
16
+ end
17
+
18
+ def test_build_nodes_with_single_level_constant_names
19
+ @tree = Rumld::Tree.new(nil, ['A', 'A::B'])
20
+ assert_equal ['A'], @tree.nodes.collect{|n| n.constant_name}
21
+ end
22
+
23
+ def test_all_nodes
24
+ @tree = Rumld::Tree.new(nil, ['A', 'A::B'])
25
+ assert_equal ['A', 'A::B'], @tree.all_nodes.collect{|n| n.constant_name}
26
+ end
27
+
28
+ def test_node_for_should_return_a_node_that_matches_the_given_constant
29
+ node = stub("Node", :constant => self.class)
30
+ @tree.expects(:all_nodes).returns([node])
31
+ assert_equal node, @tree.node_for(self.class)
32
+ end
33
+
34
+ def test_node_for_should_return_a_node_that_matches_the_given_constant_name
35
+ node = stub("Node", :constant => self.class, :constant_name => "Awesome")
36
+ @tree.expects(:all_nodes).returns([node])
37
+ assert_equal node, @tree.node_for('Awesome')
38
+ end
39
+
40
+ def test_inheritence_edge_to_dot
41
+ node = stub("Node", :inheritence_edge_to_dot => ['hello world'])
42
+ @tree.expects(:all_nodes).returns([node])
43
+ assert_equal 'hello world', @tree.send(:draw_inheritence_edges)
44
+ end
45
+
46
+ def test_to_dot_calls_draw_nodes_and_draw_included_modules
47
+ @tree.expects(:draw_nodes).returns('Draw Nodes')
48
+ @tree.expects(:draw_included_modules).returns('Draw Included Modules')
49
+ @tree.expects(:draw_associations).returns('Draw Associations')
50
+ @tree.expects(:draw_inheritence_edges).returns('Draw Inheritence Edges')
51
+ assert_equal( %(digraph uml_diagram {
52
+ graph[overlap=false, splines=true]
53
+ Draw Nodes
54
+ Draw Included Modules
55
+ Draw Associations
56
+ Draw Inheritence Edges
57
+ }).no_whitespace, @tree.to_dot.no_whitespace)
58
+ end
59
+ end
@@ -0,0 +1,15 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '../lib'))
2
+ require "test/unit"
3
+ require 'rumld'
4
+
5
+ class String
6
+ def no_whitespace
7
+ gsub(/(\ |\n|\r)/, '')
8
+ end
9
+ end
10
+
11
+ class Nil
12
+ def no_whitespace
13
+ self
14
+ end
15
+ end