rubytree 1.0.2 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/test/test_tree.rb CHANGED
@@ -2,9 +2,7 @@
2
2
 
3
3
  # test_tree.rb - This file is part of the RubyTree package.
4
4
  #
5
- # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2017, 2020, 2020 Anupam Sengupta
6
- #
7
- # All rights reserved.
5
+ # Copyright (c) 2006-2022 Anupam Sengupta. All rights reserved.
8
6
  #
9
7
  # Redistribution and use in source and binary forms, with or without modification,
10
8
  # are permitted provided that the following conditions are met:
@@ -31,9 +29,9 @@
31
29
  # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
32
30
  # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33
31
  #
32
+ # frozen_string_literal: true
34
33
 
35
34
  require 'test/unit'
36
- require 'structured_warnings'
37
35
  require 'json'
38
36
  require_relative '../lib/tree/tree_deps'
39
37
 
@@ -96,9 +94,9 @@ module TestTree
96
94
  assert_not_nil(@root.name, 'Name should not be nil')
97
95
  assert_equal('ROOT', @root.name, "Name should be 'ROOT'")
98
96
  assert_equal('Root Node', @root.content, "Content should be 'Root Node'")
99
- assert(@root.is_root?, 'Should identify as root')
100
- assert(!@root.has_children?, 'Cannot have any children')
101
- assert(@root.has_content?, 'This root should have content')
97
+ assert(@root.root?, 'Should identify as root')
98
+ assert(!@root.children?, 'Cannot have any children')
99
+ assert(@root.content?, 'This root should have content')
102
100
  assert_equal(1, @root.size, 'Number of nodes should be one')
103
101
  assert_equal(0, @root.siblings.length, 'This root does not have any children')
104
102
  assert_equal(0, @root.in_degree, 'Root should have an in-degree of 0')
@@ -110,7 +108,7 @@ module TestTree
110
108
  def test_root
111
109
  setup_test_tree
112
110
 
113
- # TODO: Should probably change this logic. Root's root should
111
+ # @todo: Should probably change this logic. Root's root should
114
112
  # return nil so that the possibility of a recursive error does not exist
115
113
  # at all.
116
114
  assert_same(@root, @root.root, "Root's root is self")
@@ -146,21 +144,21 @@ module TestTree
146
144
 
147
145
  assert_same(Tree::TreeNode, tree.class)
148
146
  assert_same(tree.name, :A)
149
- assert_equal(true, tree.is_root?)
150
- assert_equal(false, tree.is_leaf?)
147
+ assert_equal(true, tree.root?)
148
+ assert_equal(false, tree.leaf?)
151
149
  assert_equal(9, tree.size)
152
150
  assert_equal('Root content', tree.content)
153
151
  assert_equal(3, tree.children.count) # B, C, D
154
152
 
155
153
  leaf_with_content = tree[:B][:F][:I]
156
154
  assert_equal('Leaf content', leaf_with_content.content)
157
- assert_equal(true, leaf_with_content.is_leaf?)
155
+ assert_equal(true, leaf_with_content.leaf?)
158
156
 
159
157
  leaf_without_content = tree[:C]
160
- assert_equal(true, leaf_without_content.is_leaf?)
158
+ assert_equal(true, leaf_without_content.leaf?)
161
159
 
162
160
  interior_node = tree[:B][:F]
163
- assert_equal(false, interior_node.is_leaf?)
161
+ assert_equal(false, interior_node.leaf?)
164
162
  assert_equal(2, interior_node.children.count)
165
163
 
166
164
  # Can't make a node without a name
@@ -196,21 +194,21 @@ module TestTree
196
194
 
197
195
  assert_same(Tree::TreeNode, tree.class)
198
196
  assert_same(:A, tree.name)
199
- assert_equal(true, tree.is_root?)
200
- assert_equal(false, tree.is_leaf?)
197
+ assert_equal(true, tree.root?)
198
+ assert_equal(false, tree.leaf?)
201
199
  assert_equal(9, tree.size)
202
200
  assert_equal('Root content', tree.content)
203
201
  assert_equal(3, tree.children.count) # B, C, D
204
202
 
205
203
  leaf_with_content = tree[:B][:F][:I]
206
204
  assert_equal('Leaf content', leaf_with_content.content)
207
- assert_equal(true, leaf_with_content.is_leaf?)
205
+ assert_equal(true, leaf_with_content.leaf?)
208
206
 
209
207
  leaf_without_content = tree[:C]
210
- assert_equal(true, leaf_without_content.is_leaf?)
208
+ assert_equal(true, leaf_without_content.leaf?)
211
209
 
212
210
  interior_node = tree[:B][:F]
213
- assert_equal(false, interior_node.is_leaf?)
211
+ assert_equal(false, interior_node.leaf?)
214
212
  assert_equal(2, interior_node.children.count)
215
213
  end
216
214
 
@@ -236,7 +234,7 @@ module TestTree
236
234
  assert_equal(2, added_children.count)
237
235
  assert_equal(7, tree.size)
238
236
  assert_equal('G content', tree[:G].content)
239
- assert_equal(true, tree[:G].is_leaf?)
237
+ assert_equal(true, tree[:G].leaf?)
240
238
  assert_equal(5, tree[:B].size)
241
239
  assert_equal(3, tree[:B].children.count)
242
240
 
@@ -291,24 +289,15 @@ module TestTree
291
289
  def test_has_content_eh
292
290
  a_node = Tree::TreeNode.new('A Node')
293
291
  assert_nil(a_node.content, 'The node should not have content')
294
- assert(!a_node.has_content?, 'The node should not have content')
292
+ assert(!a_node.content?, 'The node should not have content')
295
293
 
296
294
  a_node.content = 'Something'
297
295
  assert_not_nil(a_node.content, 'The node should now have content')
298
- assert(a_node.has_content?, 'The node should now have content')
299
- end
300
-
301
- # Test the equivalence of size and length methods.
302
- def test_length_is_size
303
- setup_test_tree
304
- assert_equal(@root.size, @root.length, 'Length and size methods should return the same result')
296
+ assert(a_node.content?, 'The node should now have content')
305
297
  end
306
298
 
307
299
  # Test the <=> operator.
308
300
  def test_spaceship
309
- require 'structured_warnings'
310
- StructuredWarnings::StandardWarning.disable # Disable the warnings for using integers as node names
311
-
312
301
  first_node = Tree::TreeNode.new(1)
313
302
  second_node = Tree::TreeNode.new(2)
314
303
 
@@ -326,8 +315,6 @@ module TestTree
326
315
 
327
316
  second_node = Tree::TreeNode.new('ABC')
328
317
  assert_equal(0, first_node <=> second_node)
329
-
330
- StructuredWarnings::StandardWarning.enable
331
318
  end
332
319
 
333
320
  # Test the inclusion of Comparable
@@ -342,7 +329,7 @@ module TestTree
342
329
  assert(node_b > node_a, "Node B is lexically 'greater than' node A")
343
330
  assert(node_b >= node_a, "Node B is lexically 'greater than' node A")
344
331
 
345
- assert(!(node_a == node_b), 'Node A and Node B are not equal')
332
+ assert(node_a != node_b, 'Node A and Node B are not equal')
346
333
  assert(node_b.between?(node_a, node_c), 'Node B is lexically between node A and node C')
347
334
  end
348
335
 
@@ -382,7 +369,7 @@ module TestTree
382
369
  def test_first_sibling
383
370
  setup_test_tree
384
371
 
385
- # TODO: Need to fix the first_sibling method to return nil for nodes with no siblings.
372
+ # @todo: Need to fix the first_sibling method to return nil for nodes with no siblings.
386
373
  assert_same(@root, @root.first_sibling, "Root's first sibling is itself")
387
374
  assert_same(@child1, @child1.first_sibling, "Child1's first sibling is itself")
388
375
  assert_same(@child1, @child2.first_sibling, "Child2's first sibling should be child1")
@@ -391,26 +378,26 @@ module TestTree
391
378
  assert_not_same(@child1, @child4.first_sibling, "Child4's first sibling is itself")
392
379
  end
393
380
 
394
- # Test the is_first_sibling? method.
381
+ # Test the first_sibling? method.
395
382
  def test_is_first_sibling_eh
396
383
  setup_test_tree
397
384
 
398
- assert(@root.is_first_sibling?, "Root's first sibling is itself")
399
- assert(@child1.is_first_sibling?, "Child1's first sibling is itself")
400
- assert(!@child2.is_first_sibling?, 'Child2 is not the first sibling')
401
- assert(!@child3.is_first_sibling?, 'Child3 is not the first sibling')
402
- assert(@child4.is_first_sibling?, "Child4's first sibling is itself")
385
+ assert(@root.first_sibling?, "Root's first sibling is itself")
386
+ assert(@child1.first_sibling?, "Child1's first sibling is itself")
387
+ assert(!@child2.first_sibling?, 'Child2 is not the first sibling')
388
+ assert(!@child3.first_sibling?, 'Child3 is not the first sibling')
389
+ assert(@child4.first_sibling?, "Child4's first sibling is itself")
403
390
  end
404
391
 
405
- # Test the is_last_sibling? method.
392
+ # Test the last_sibling? method.
406
393
  def test_is_last_sibling_eh
407
394
  setup_test_tree
408
395
 
409
- assert(@root.is_last_sibling?, "Root's last sibling is itself")
410
- assert(!@child1.is_last_sibling?, 'Child1 is not the last sibling')
411
- assert(!@child2.is_last_sibling?, 'Child2 is not the last sibling')
412
- assert(@child3.is_last_sibling?, "Child3's last sibling is itself")
413
- assert(@child4.is_last_sibling?, "Child4's last sibling is itself")
396
+ assert(@root.last_sibling?, "Root's last sibling is itself")
397
+ assert(!@child1.last_sibling?, 'Child1 is not the last sibling')
398
+ assert(!@child2.last_sibling?, 'Child2 is not the last sibling')
399
+ assert(@child3.last_sibling?, "Child3's last sibling is itself")
400
+ assert(@child4.last_sibling?, "Child4's last sibling is itself")
414
401
  end
415
402
 
416
403
  # Test the last_sibling method.
@@ -452,15 +439,15 @@ module TestTree
452
439
  assert_equal(0, siblings.length, 'Root should not have any siblings')
453
440
  end
454
441
 
455
- # Test the is_only_child? method.
442
+ # Test the only_child? method.
456
443
  def test_is_only_child_eh
457
444
  setup_test_tree
458
445
 
459
- assert(@root.is_only_child?, 'Root is an only child')
460
- assert(!@child1.is_only_child?, 'Child1 is not the only child')
461
- assert(!@child2.is_only_child?, 'Child2 is not the only child')
462
- assert(!@child3.is_only_child?, 'Child3 is not the only child')
463
- assert(@child4.is_only_child?, 'Child4 is an only child')
446
+ assert(@root.only_child?, 'Root is an only child')
447
+ assert(!@child1.only_child?, 'Child1 is not the only child')
448
+ assert(!@child2.only_child?, 'Child2 is not the only child')
449
+ assert(!@child3.only_child?, 'Child3 is not the only child')
450
+ assert(@child4.only_child?, 'Child4 is an only child')
464
451
  end
465
452
 
466
453
  # Test the next_sibling method.
@@ -487,14 +474,14 @@ module TestTree
487
474
 
488
475
  # Test the add method.
489
476
  def test_add
490
- assert(!@root.has_children?, 'Should not have any children')
477
+ assert(!@root.children?, 'Should not have any children')
491
478
 
492
479
  assert_equal(1, @root.size, 'Should have 1 node (the root)')
493
480
  @root.add(@child1)
494
481
 
495
482
  @root << @child2
496
483
 
497
- assert(@root.has_children?, 'Should have children')
484
+ assert(@root.children?, 'Should have children')
498
485
  assert_equal(3, @root.size, 'Should have three nodes')
499
486
 
500
487
  @root << @child3 << @child4
@@ -533,7 +520,8 @@ module TestTree
533
520
  begin
534
521
  root << two << deep
535
522
  rescue RuntimeError => e
536
- raise("Error! The RuntimeError #{e} should not have been thrown. The same node can be added to different branches.")
523
+ raise("Error! The RuntimeError #{e} should not have been thrown. " \
524
+ 'The same node can be added to different branches.')
537
525
  end
538
526
 
539
527
  assert_raise(ArgumentError) { root << three << three }
@@ -549,7 +537,7 @@ module TestTree
549
537
 
550
538
  # Test Addition at a specific position
551
539
  def test_add_at_specific_position
552
- assert(!@root.has_children?, 'Should not have any children')
540
+ assert(!@root.children?, 'Should not have any children')
553
541
 
554
542
  assert_equal(1, @root.size, 'Should have 1 node (the root)')
555
543
  @root.add(@child1) # First Child added at position 0
@@ -579,7 +567,9 @@ module TestTree
579
567
 
580
568
  # Now, a negative test. We are preventing addition to a position that does not exist.
581
569
  assert_raise(RuntimeError) do
582
- @root.add(@child5, @root.children.size + 1) # Fifth child inserted beyond the last position that is valid (at 5th pos).
570
+ # Fifth child inserted beyond the last position that is valid (at 5th
571
+ # pos).
572
+ @root.add(@child5, @root.children.size + 1)
583
573
  end
584
574
  # Validate that we still have children = [@child1, @child3, @child2, @child4]
585
575
  assert_equal(@child1, @root[0])
@@ -589,9 +579,12 @@ module TestTree
589
579
  assert_nil(@root[4])
590
580
  assert_equal(4, @root.children.size, 'Should have four child nodes')
591
581
 
592
- # Another negative test. Lets attempt to add from the end at a position that is not available
582
+ # Another negative test. Lets attempt to add from the end at a position
583
+ # that is not available
593
584
  assert_raise(RuntimeError) do
594
- @root.add(@child5, -(@root.children.size + 2)) # Fifth child inserted beyond the first position that is valid; i.e. at -6
585
+ # Fifth child inserted beyond the first position that is valid; i.e. at
586
+ # -6
587
+ @root.add(@child5, -(@root.children.size + 2))
595
588
  end
596
589
  assert_nil(@root[-5])
597
590
  assert_equal(@child1, @root[-4])
@@ -600,8 +593,11 @@ module TestTree
600
593
  assert_equal(@child4, @root[-1])
601
594
  assert_equal(4, @root.children.size, 'Should have four child nodes')
602
595
 
603
- # Lets correctly add the fifth child from the end to effectively prepend the node.
604
- @root.add(@child5, -(@root.children.size + 1)) # Fifth child inserted beyond the first position; i.e. at -5
596
+ # Lets correctly add the fifth child from the end to effectively prepend
597
+ # the node.
598
+
599
+ # Fifth child inserted beyond the first position; i.e. at -5
600
+ @root.add(@child5, -(@root.children.size + 1))
605
601
  assert_nil(@root[-6])
606
602
  assert_equal(@child5, @root[-5])
607
603
  assert_equal(@child1, @root[-4])
@@ -658,40 +654,40 @@ module TestTree
658
654
  @root << @child1
659
655
  @root << @child2
660
656
 
661
- assert(@root.has_children?, 'Should have children')
657
+ assert(@root.children?, 'Should have children')
662
658
  assert_equal(3, @root.size, 'Should have three nodes')
663
659
 
664
660
  @root.remove!(@child1)
665
661
  assert_equal(2, @root.size, 'Should have two nodes')
666
662
  @root.remove!(@child2)
667
663
 
668
- assert(!@root.has_children?, 'Should have no children')
664
+ assert(!@root.children?, 'Should have no children')
669
665
  assert_equal(1, @root.size, 'Should have one node')
670
666
 
671
667
  @root << @child1
672
668
  @root << @child2
673
669
 
674
- assert(@root.has_children?, 'Should have children')
670
+ assert(@root.children?, 'Should have children')
675
671
  assert_equal(3, @root.size, 'Should have three nodes')
676
672
 
677
673
  @root.remove_all!
678
674
 
679
- assert(!@root.has_children?, 'Should have no children')
675
+ assert(!@root.children?, 'Should have no children')
680
676
  assert_equal(1, @root.size, 'Should have one node')
681
677
 
682
678
  # Some negative testing
683
679
  @root.remove!(nil)
684
- assert(!@root.has_children?, 'Should have no children')
680
+ assert(!@root.children?, 'Should have no children')
685
681
  assert_equal(1, @root.size, 'Should have one node')
686
682
  end
687
683
 
688
684
  # Test the remove_all! method.
689
685
  def test_remove_all_bang
690
686
  setup_test_tree
691
- assert(@root.has_children?, 'Should have children')
687
+ assert(@root.children?, 'Should have children')
692
688
  @root.remove_all!
693
689
 
694
- assert(!@root.has_children?, 'Should have no children')
690
+ assert(!@root.children?, 'Should have no children')
695
691
  assert_equal(1, @root.size, 'Should have one node')
696
692
  end
697
693
 
@@ -699,8 +695,8 @@ module TestTree
699
695
  def test_remove_from_parent_bang
700
696
  setup_test_tree
701
697
 
702
- assert(@root.has_children?, 'Should have children')
703
- assert(!@root.is_leaf?, 'Root is not a leaf here')
698
+ assert(@root.children?, 'Should have children')
699
+ assert(!@root.leaf?, 'Root is not a leaf here')
704
700
 
705
701
  child1 = @root[0]
706
702
  assert_not_nil(child1, 'Child 1 should exist')
@@ -718,10 +714,10 @@ module TestTree
718
714
  def test_children
719
715
  setup_test_tree
720
716
 
721
- assert(@root.has_children?, 'Should have children')
717
+ assert(@root.children?, 'Should have children')
722
718
  assert_equal(5, @root.size, 'Should have five nodes')
723
- assert(@child3.has_children?, 'Should have children')
724
- assert(!@child3.is_leaf?, 'Should not be a leaf')
719
+ assert(@child3.children?, 'Should have children')
720
+ assert(!@child3.leaf?, 'Should not be a leaf')
725
721
 
726
722
  assert_equal(1, @child3.node_height, 'The subtree at Child 3 should have a height of 1')
727
723
  [@child1, @child2, @child4].each do |child|
@@ -795,9 +791,9 @@ module TestTree
795
791
  def test_each
796
792
  setup_test_tree
797
793
 
798
- assert(@root.has_children?, 'Should have children')
794
+ assert(@root.children?, 'Should have children')
799
795
  assert_equal(5, @root.size, 'Should have five nodes')
800
- assert(@child3.has_children?, 'Should have children')
796
+ assert(@child3.children?, 'Should have children')
801
797
 
802
798
  nodes = []
803
799
  @root.each { |node| nodes << node }
@@ -882,14 +878,14 @@ module TestTree
882
878
  # Test the root node
883
879
  assert_equal(test_root.name, new_root.name, 'Must identify as ROOT')
884
880
  assert_equal(test_root.content, new_root.content, "Must have root's content")
885
- assert(new_root.is_root?, 'Must be the ROOT node')
886
- assert(new_root.has_children?, 'Must have a child node')
881
+ assert(new_root.root?, 'Must be the ROOT node')
882
+ assert(new_root.children?, 'Must have a child node')
887
883
 
888
884
  # Test the child node
889
885
  new_child = new_root[test_child.name]
890
886
  assert_equal(test_child.name, new_child.name, 'Must have child 1')
891
- assert(new_child.has_content?, 'Child must have content')
892
- assert(new_child.is_only_child?, 'Child must be the only child')
887
+ assert(new_child.content?, 'Child must have content')
888
+ assert(new_child.only_child?, 'Child must be the only child')
893
889
 
894
890
  new_child_content = new_child.content
895
891
  assert_equal(Hash, new_child_content.class, "Class of child's content should be a hash")
@@ -898,8 +894,8 @@ module TestTree
898
894
  # Test the grand-child node
899
895
  new_grand_child = new_child[test_grand_child.name]
900
896
  assert_equal(test_grand_child.name, new_grand_child.name, 'Must have grand child')
901
- assert(new_grand_child.has_content?, 'Grand-child must have content')
902
- assert(new_grand_child.is_only_child?, 'Grand-child must be the only child')
897
+ assert(new_grand_child.content?, 'Grand-child must have content')
898
+ assert(new_grand_child.only_child?, 'Grand-child must be the only child')
903
899
 
904
900
  new_grand_child_content = new_grand_child.content
905
901
  assert_equal(Array, new_grand_child_content.class, "Class of grand-child's content should be an Array")
@@ -948,34 +944,6 @@ module TestTree
948
944
  assert_same(person, @root.content, 'Content should be the same')
949
945
  end
950
946
 
951
- # Test the depth computation algorithm. Note that this is an incorrect computation and actually returns height+1
952
- # instead of depth. This method has been deprecated in this release and may be removed in the future.
953
- def test_depth
954
- require 'structured_warnings'
955
- assert_warn(StructuredWarnings::DeprecatedMethodWarning) { do_deprecated_depth }
956
- rescue LoadError
957
- # Since the structured_warnings package is not present, we revert to good old Kernel#warn behavior.
958
- do_deprecated_depth
959
- end
960
-
961
- # Run the assertions for the deprecated depth method.
962
- def do_deprecated_depth
963
- assert_equal(1, @root.depth, "A single node's depth is 1")
964
-
965
- @root << @child1
966
- assert_equal(2, @root.depth, 'This should be of depth 2')
967
-
968
- @root << @child2
969
- assert_equal(2, @root.depth, 'This should be of depth 2')
970
-
971
- @child2 << @child3
972
- assert_equal(3, @root.depth, 'This should be of depth 3')
973
- assert_equal(2, @child2.depth, 'This should be of depth 2')
974
-
975
- @child3 << @child4
976
- assert_equal(4, @root.depth, 'This should be of depth 4')
977
- end
978
-
979
947
  # Test the height computation algorithm
980
948
  def test_node_height
981
949
  assert_equal(0, @root.node_height, "A single node's height is 0")
@@ -1000,8 +968,7 @@ module TestTree
1000
968
  assert_equal(0, @child4.node_height, 'This should be of height 0')
1001
969
  end
1002
970
 
1003
- # Test the depth computation algorithm. Note that this is the correct depth computation. The original
1004
- # Tree::TreeNode#depth was incorrectly computing the height of the node - instead of its depth.
971
+ # Test the depth computation algorithm.
1005
972
  def test_node_depth
1006
973
  assert_equal(0, @root.node_depth, "A root node's depth is 0")
1007
974
 
@@ -1090,9 +1057,8 @@ module TestTree
1090
1057
  end
1091
1058
 
1092
1059
  assert_equal(Enumerator, j.breadth_each.class) if defined?(Enumerator.class) # Without a block
1093
- if defined?(Enumerable::Enumerator.class)
1094
- assert_equal(Enumerable::Enumerator, j.breadth_each.class)
1095
- end # Without a block
1060
+ # Without a block
1061
+ assert_equal(Enumerable::Enumerator, j.breadth_each.class) if defined?(Enumerable::Enumerator.class)
1096
1062
 
1097
1063
  # Now test without a block
1098
1064
  result_array = j.breadth_each.collect { |node| node }
@@ -1136,10 +1102,11 @@ module TestTree
1136
1102
  assert_equal(expected_array[i].name, result_array[i].name)
1137
1103
  end
1138
1104
 
1139
- assert_equal(Enumerator, j.preordered_each.class) if defined?(Enumerator.class) # Without a block
1140
- if defined?(Enumerable::Enumerator.class)
1141
- assert_equal(Enumerable::Enumerator, j.preordered_each.class)
1142
- end # Without a block
1105
+ assert_equal(Enumerator, j.preordered_each.class) \
1106
+ if defined?(Enumerator.class) # Without a block
1107
+
1108
+ assert_equal(Enumerable::Enumerator, j.preordered_each.class) \
1109
+ if defined?(Enumerable::Enumerator.class)
1143
1110
  end
1144
1111
 
1145
1112
  # Test the postordered_each method.
@@ -1179,9 +1146,9 @@ module TestTree
1179
1146
  end
1180
1147
 
1181
1148
  assert_equal(Enumerator, j.postordered_each.class) if defined?(Enumerator.class) # Without a block
1182
- if defined?(Enumerable::Enumerator.class)
1183
- assert_equal(Enumerable::Enumerator, j.postordered_each.class)
1184
- end # Without a block
1149
+
1150
+ assert_equal(Enumerable::Enumerator, j.postordered_each.class) \
1151
+ if defined?(Enumerable::Enumerator.class)
1185
1152
 
1186
1153
  # Now test without a block
1187
1154
  result_array = j.postordered_each.collect { |node| node }
@@ -1196,75 +1163,75 @@ module TestTree
1196
1163
  def test_detached_copy
1197
1164
  setup_test_tree
1198
1165
 
1199
- assert(@root.has_children?, 'The root should have children')
1166
+ assert(@root.children?, 'The root should have children')
1200
1167
  copy_of_root = @root.detached_copy
1201
- assert(!copy_of_root.has_children?, 'The copy should not have children')
1168
+ assert(!copy_of_root.children?, 'The copy should not have children')
1202
1169
  assert_equal(@root.name, copy_of_root.name, 'The names should be equal')
1203
1170
 
1204
1171
  # Try the same test with a child node
1205
- assert(!@child3.is_root?, 'Child 3 is not a root')
1206
- assert(@child3.has_children?, 'Child 3 has children')
1172
+ assert(!@child3.root?, 'Child 3 is not a root')
1173
+ assert(@child3.children?, 'Child 3 has children')
1207
1174
  copy_of_child3 = @child3.detached_copy
1208
- assert(copy_of_child3.is_root?, "Child 3's copy is a root")
1209
- assert(!copy_of_child3.has_children?, "Child 3's copy does not have children")
1175
+ assert(copy_of_child3.root?, "Child 3's copy is a root")
1176
+ assert(!copy_of_child3.children?, "Child 3's copy does not have children")
1210
1177
  end
1211
1178
 
1212
1179
  # Test the detached_subtree_copy method.
1213
1180
  def test_detached_subtree_copy
1214
1181
  setup_test_tree
1215
1182
 
1216
- assert(@root.has_children?, 'The root should have children.')
1183
+ assert(@root.children?, 'The root should have children.')
1217
1184
  tree_copy = @root.detached_subtree_copy
1218
1185
 
1219
1186
  assert_equal(@root.name, tree_copy.name, 'The names should be equal.')
1220
1187
  assert_not_equal(@root.object_id, tree_copy.object_id, 'Object_ids should differ.')
1221
- assert(tree_copy.is_root?, 'Copied root should be a root node.')
1222
- assert(tree_copy.has_children?, 'Copied tree should have children.')
1188
+ assert(tree_copy.root?, 'Copied root should be a root node.')
1189
+ assert(tree_copy.children?, 'Copied tree should have children.')
1223
1190
  assert_equal(tree_copy.children.count, @root.children.count,
1224
1191
  'Copied tree and the original tree should have same number of children.')
1225
1192
 
1226
1193
  assert_equal(tree_copy[0].name, @child1.name, 'The names of Child1 (original and copy) should be same.')
1227
1194
  assert_not_equal(tree_copy[0].object_id, @child1.object_id,
1228
1195
  'Child1 Object_ids (original and copy) should differ.')
1229
- assert(!tree_copy[0].is_root?, 'Child1 copied should not be root.')
1230
- assert(!tree_copy[0].has_children?, 'Child1 copied should not have children.')
1196
+ assert(!tree_copy[0].root?, 'Child1 copied should not be root.')
1197
+ assert(!tree_copy[0].children?, 'Child1 copied should not have children.')
1231
1198
 
1232
1199
  assert_equal(tree_copy[1].name, @child2.name, 'The names of Child2 (original and copy) should be same.')
1233
1200
  assert_not_equal(tree_copy[1].object_id, @child2.object_id,
1234
1201
  'Child2 Object_ids (original and copy) should differ.')
1235
- assert(!tree_copy[1].is_root?, 'Child2 copied should not be root.')
1236
- assert(!tree_copy[1].has_children?, 'Child2 copied should not have children.')
1202
+ assert(!tree_copy[1].root?, 'Child2 copied should not be root.')
1203
+ assert(!tree_copy[1].children?, 'Child2 copied should not have children.')
1237
1204
 
1238
1205
  assert_equal(tree_copy[2].name, @child3.name, 'The names of Child3 (original and copy) should be same.')
1239
1206
  assert_not_equal(tree_copy[2].object_id, @child3.object_id,
1240
1207
  'Child3 Object_ids (original and copy) should differ.')
1241
- assert(!tree_copy[2].is_root?, 'Child3 copied should not be root.')
1242
- assert(tree_copy[2].has_children?, 'Child3 copied should have children.')
1208
+ assert(!tree_copy[2].root?, 'Child3 copied should not be root.')
1209
+ assert(tree_copy[2].children?, 'Child3 copied should have children.')
1243
1210
 
1244
1211
  assert_equal(tree_copy[2][0].name, @child4.name, 'The names of Child4 (original and copy) should be same.')
1245
1212
  assert_not_equal(tree_copy[2][0].object_id, @child4.object_id,
1246
1213
  'Child4 Object_ids (original and copy) should differ.')
1247
- assert(!tree_copy[2][0].is_root?, 'Child4 copied should not be root.')
1248
- assert(!tree_copy[2][0].has_children?, 'Child4 copied should not have children.')
1214
+ assert(!tree_copy[2][0].root?, 'Child4 copied should not be root.')
1215
+ assert(!tree_copy[2][0].children?, 'Child4 copied should not have children.')
1249
1216
  end
1250
1217
 
1251
- # Test the has_children? method.
1218
+ # Test the children? method.
1252
1219
  def test_has_children_eh
1253
1220
  setup_test_tree
1254
- assert(@root.has_children?, 'The Root node MUST have children')
1221
+ assert(@root.children?, 'The Root node MUST have children')
1255
1222
  end
1256
1223
 
1257
- # test the is_leaf? method.
1224
+ # test the leaf? method.
1258
1225
  def test_is_leaf_eh
1259
1226
  setup_test_tree
1260
- assert(!@child3.is_leaf?, 'Child 3 is not a leaf node')
1261
- assert(@child4.is_leaf?, 'Child 4 is a leaf node')
1227
+ assert(!@child3.leaf?, 'Child 3 is not a leaf node')
1228
+ assert(@child4.leaf?, 'Child 4 is a leaf node')
1262
1229
  end
1263
1230
 
1264
- # Test the is_root? method.
1231
+ # Test the root? method.
1265
1232
  def test_is_root_eh
1266
1233
  setup_test_tree
1267
- assert(@root.is_root?, 'The ROOT node must respond as the root node')
1234
+ assert(@root.root?, 'The ROOT node must respond as the root node')
1268
1235
  end
1269
1236
 
1270
1237
  # Test the content= method.
@@ -1285,7 +1252,7 @@ module TestTree
1285
1252
  end
1286
1253
 
1287
1254
  # Test the << method.
1288
- def test_lt2 # Test the << method
1255
+ def test_lt2
1289
1256
  @root << @child1
1290
1257
  @root << @child2
1291
1258
  @root << @child3 << @child4
@@ -1296,7 +1263,7 @@ module TestTree
1296
1263
  end
1297
1264
 
1298
1265
  # Test the [] method.
1299
- def test_index # Test the [] method
1266
+ def test_index
1300
1267
  assert_raise(ArgumentError) { @root[nil] }
1301
1268
 
1302
1269
  @root << @child1
@@ -1304,7 +1271,8 @@ module TestTree
1304
1271
  assert_equal(@child1.name, @root['Child1'].name, 'Child 1 should be returned')
1305
1272
  assert_equal(@child1.name, @root[0].name, 'Child 1 should be returned')
1306
1273
  assert_equal(@child1.name, @root[-2].name, 'Child 1 should be returned') # Negative access also works
1307
- assert_equal(@child1.name, @root[-@root.children.size].name, 'Child 1 should be returned') # Negative access also works
1274
+ assert_equal(@child1.name,
1275
+ @root[-@root.children.size].name, 'Child 1 should be returned') # Negative access also works
1308
1276
 
1309
1277
  assert_equal(@child2.name, @root['Child2'].name, 'Child 2 should be returned')
1310
1278
  assert_equal(@child2.name, @root[1].name, 'Child 2 should be returned')
@@ -1407,46 +1375,12 @@ module TestTree
1407
1375
  assert_equal(k[1].name, root_node[1].name, 'Child 2 should be returned')
1408
1376
  end
1409
1377
 
1410
- # Test the old CamelCase method names
1411
- def test_old_camel_case_names
1412
- setup_test_tree
1413
-
1414
- meth_names_to_test = %w[isRoot? isLeaf? hasContent?
1415
- hasChildren? firstChild lastChild
1416
- firstSibling isFirstSibling? lastSibling isLastSibling?
1417
- isOnlyChild? nextSibling previousSibling nodeHeight nodeDepth
1418
- removeFromParent! removeAll! freezeTree! ]
1419
-
1420
- require 'structured_warnings'
1421
-
1422
- StructuredWarnings::DeprecatedMethodWarning.disable do
1423
- # noinspection RubyResolve
1424
- assert(@root.isRoot?) # Test if the original method is really called
1425
- end
1426
-
1427
- meth_names_to_test.each do |meth_name|
1428
- assert_warn(StructuredWarnings::DeprecatedMethodWarning) { @root.send(meth_name) }
1429
- end
1430
-
1431
- # Special Case for printTree to avoid putting stuff on the STDOUT during the unit test.
1432
- begin
1433
- require 'stringio'
1434
- $stdout = StringIO.new
1435
- assert_warn(StructuredWarnings::DeprecatedMethodWarning) { @root.send('printTree') }
1436
- ensure
1437
- $stdout = STDOUT
1438
- end
1439
- end
1440
-
1441
1378
  # Test usage of integers as node names
1442
1379
  def test_integer_node_names
1443
- require 'structured_warnings'
1444
- assert_warn(StructuredWarnings::StandardWarning) do
1445
- @n_root = Tree::TreeNode.new(0, 'Root Node')
1446
- @n_child1 = Tree::TreeNode.new(1, 'Child Node 1')
1447
- @n_child2 = Tree::TreeNode.new(2, 'Child Node 2')
1448
- @n_child3 = Tree::TreeNode.new('three', 'Child Node 3')
1449
- end
1380
+ @n_root = Tree::TreeNode.new(0, 'Root Node')
1381
+ @n_child1 = Tree::TreeNode.new(1, 'Child Node 1')
1382
+ @n_child2 = Tree::TreeNode.new(2, 'Child Node 2')
1383
+ @n_child3 = Tree::TreeNode.new('three', 'Child Node 3')
1450
1384
 
1451
1385
  @n_root << @n_child1
1452
1386
  @n_root << @n_child2
@@ -1454,18 +1388,11 @@ module TestTree
1454
1388
 
1455
1389
  # Node[n] is really accessing the nth child with a zero-base
1456
1390
  assert_not_equal(@n_root[1].name, 1) # This is really the second child
1457
- assert_equal(@n_root[0].name, 1) # This will work, as it is the first child
1458
- assert_equal(@n_root[1, true].name, 1) # This will work, as the flag is now enabled
1391
+ assert_equal(@n_root[0].name, '1') # This will work, as it is the first child
1392
+ assert_equal(@n_root[1].name, '2') # This will work, as the flag is now enabled
1459
1393
 
1460
1394
  # Sanity check for the "normal" string name cases. Both cases should work.
1461
- assert_equal(@n_root['three', false].name, 'three')
1462
-
1463
- StructuredWarnings::StandardWarning.disable
1464
- assert_equal(@n_root['three', true].name, 'three')
1465
-
1466
- # Also ensure that the warning is actually being thrown
1467
- StructuredWarnings::StandardWarning.enable
1468
- assert_warn(StructuredWarnings::StandardWarning) { assert_equal(@n_root['three', true].name, 'three') }
1395
+ assert_equal(@n_root['three'].name, 'three')
1469
1396
  end
1470
1397
 
1471
1398
  # Test the addition of a node to itself as a child
@@ -1485,10 +1412,10 @@ module TestTree
1485
1412
  setup_test_tree
1486
1413
 
1487
1414
  leafs = @root.each_leaf
1488
- parents = leafs.collect { |leaf| leaf.parent }
1489
- leafs.each { |leaf| leaf.remove_from_parent! }
1415
+ parents = leafs.collect(&:parent)
1416
+ leafs.each(&:remove_from_parent!)
1490
1417
  parents.each do |parent|
1491
- assert(parent.is_leaf?) unless parent.has_children?
1418
+ assert(parent.leaf?) unless parent.children?
1492
1419
  end
1493
1420
  end
1494
1421