Skip to content

Commit f93fc67

Browse files
committed
Consolidate test fixtures
Introduce shared fixture helpers for Test::Unit and RSpec to reduce repeated tree setup logic. Wire both suites to the shared helpers and add standard file headers.
1 parent 5d01e24 commit f93fc67

5 files changed

Lines changed: 133 additions & 14 deletions

File tree

spec/spec_helper.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
# frozen_string_literal: true
1111

1212
require 'tree'
13+
require_relative 'support/fixtures'
1314

1415
if ENV['COVERAGE']
1516
begin

spec/support/fixtures.rb

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# fixtures.rb - This file is part of the RubyTree package.
2+
#
3+
# Copyright (c) 2026 Anupam Sengupta. All rights reserved.
4+
#
5+
# Redistribution and use in source and binary forms, with or without modification,
6+
# are permitted provided that the following conditions are met:
7+
#
8+
# - Redistributions of source code must retain the above copyright notice, this
9+
# list of conditions and the following disclaimer.
10+
#
11+
# - Redistributions in binary form must reproduce the above copyright notice, this
12+
# list of conditions and the following disclaimer in the documentation and/or
13+
# other materials provided with the distribution.
14+
#
15+
# - Neither the name of the organization nor the names of its contributors may
16+
# be used to endorse or promote products derived from this software without
17+
# specific prior written permission.
18+
#
19+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22+
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
23+
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24+
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25+
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
26+
# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27+
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28+
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29+
#
30+
# frozen_string_literal: true
31+
32+
require_relative '../../test/support/fixtures_shared'
33+
34+
RSpec.configure do |config|
35+
config.include TreeTestFixtures
36+
end

test/support/fixtures_shared.rb

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
# fixtures_shared.rb - This file is part of the RubyTree package.
2+
#
3+
# Copyright (c) 2026 Anupam Sengupta. All rights reserved.
4+
#
5+
# Redistribution and use in source and binary forms, with or without modification,
6+
# are permitted provided that the following conditions are met:
7+
#
8+
# - Redistributions of source code must retain the above copyright notice, this
9+
# list of conditions and the following disclaimer.
10+
#
11+
# - Redistributions in binary form must reproduce the above copyright notice, this
12+
# list of conditions and the following disclaimer in the documentation and/or
13+
# other materials provided with the distribution.
14+
#
15+
# - Neither the name of the organization nor the names of its contributors may
16+
# be used to endorse or promote products derived from this software without
17+
# specific prior written permission.
18+
#
19+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22+
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
23+
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24+
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25+
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
26+
# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27+
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28+
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29+
#
30+
# frozen_string_literal: true
31+
32+
module TreeTestFixtures
33+
def build_basic_tree_nodes
34+
root = Tree::TreeNode.new('ROOT', 'Root Node')
35+
child1 = Tree::TreeNode.new('Child1', 'Child Node 1')
36+
child2 = Tree::TreeNode.new('Child2', 'Child Node 2')
37+
child3 = Tree::TreeNode.new('Child3', 'Child Node 3')
38+
child4 = Tree::TreeNode.new('Child4', 'Grand Child 1')
39+
child5 = Tree::TreeNode.new('Child5', 'Child Node 4')
40+
41+
{
42+
root: root,
43+
child1: child1,
44+
child2: child2,
45+
child3: child3,
46+
child4: child4,
47+
child5: child5
48+
}
49+
end
50+
51+
def attach_basic_tree(nodes)
52+
nodes[:root] << nodes[:child1]
53+
nodes[:root] << nodes[:child2]
54+
nodes[:root] << nodes[:child3] << nodes[:child4]
55+
nodes
56+
end
57+
58+
def build_basic_tree
59+
attach_basic_tree(build_basic_tree_nodes)
60+
end
61+
62+
def build_binary_tree_nodes
63+
root = Tree::BinaryTreeNode.new('ROOT', 'Root Node')
64+
left_child1 = Tree::BinaryTreeNode.new('A Child at Left', 'Child Node @ left')
65+
right_child1 = Tree::BinaryTreeNode.new('B Child at Right', 'Child Node @ right')
66+
67+
{
68+
root: root,
69+
left_child1: left_child1,
70+
right_child1: right_child1
71+
}
72+
end
73+
end

test/test_binarytree.rb

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,18 @@
3636

3737
require 'test/unit'
3838
require_relative '../lib/tree/binarytree'
39+
require_relative 'support/fixtures_shared'
3940

4041
module TestTree
4142
# Test class for the binary tree node.
4243
class TestBinaryTreeNode < Test::Unit::TestCase
44+
include TreeTestFixtures
4345
# Setup the test data scaffolding.
4446
def setup
45-
@root = Tree::BinaryTreeNode.new('ROOT', 'Root Node')
46-
47-
@left_child1 = Tree::BinaryTreeNode.new('A Child at Left', 'Child Node @ left')
48-
@right_child1 = Tree::BinaryTreeNode.new('B Child at Right', 'Child Node @ right')
47+
nodes = build_binary_tree_nodes
48+
@root = nodes[:root]
49+
@left_child1 = nodes[:left_child1]
50+
@right_child1 = nodes[:right_child1]
4951
end
5052

5153
# Tear down the test data scaffolding.

test/test_tree.rb

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,13 @@
3434
require 'test/unit'
3535
require 'json'
3636
require_relative '../lib/tree/tree_deps'
37+
require_relative 'support/fixtures_shared'
3738

3839
module TestTree
3940
# Test class for the Tree node.
4041
# noinspection RubyTooManyInstanceVariablesInspection
4142
class TestTreeNode < Test::Unit::TestCase
43+
include TreeTestFixtures
4244
Person = Struct.new(:First, :last) # A simple structure to use as the content for the nodes.
4345

4446
# Create this structure for the tests
@@ -61,20 +63,25 @@ class TestTreeNode < Test::Unit::TestCase
6163
#
6264
# Some basic setup to create the nodes for the test tree.
6365
def setup
64-
@root = Tree::TreeNode.new('ROOT', 'Root Node')
65-
66-
@child1 = Tree::TreeNode.new('Child1', 'Child Node 1')
67-
@child2 = Tree::TreeNode.new('Child2', 'Child Node 2')
68-
@child3 = Tree::TreeNode.new('Child3', 'Child Node 3')
69-
@child4 = Tree::TreeNode.new('Child4', 'Grand Child 1')
70-
@child5 = Tree::TreeNode.new('Child5', 'Child Node 4')
66+
nodes = build_basic_tree_nodes
67+
@root = nodes[:root]
68+
@child1 = nodes[:child1]
69+
@child2 = nodes[:child2]
70+
@child3 = nodes[:child3]
71+
@child4 = nodes[:child4]
72+
@child5 = nodes[:child5]
7173
end
7274

7375
# Create the actual test tree.
7476
def setup_test_tree
75-
@root << @child1
76-
@root << @child2
77-
@root << @child3 << @child4
77+
attach_basic_tree(
78+
root: @root,
79+
child1: @child1,
80+
child2: @child2,
81+
child3: @child3,
82+
child4: @child4,
83+
child5: @child5
84+
)
7885
end
7986

8087
# Tear down the entire structure

0 commit comments

Comments
 (0)