pointrb 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. data/.gitignore +16 -0
  2. data/.rspec +1 -0
  3. data/.ruby-version +1 -0
  4. data/Gemfile +2 -1
  5. data/Gemfile.lock +40 -26
  6. data/README.md +1 -86
  7. data/Rakefile +5 -0
  8. data/TODO.md +35 -1
  9. data/bin/pointrb +35 -0
  10. data/cucumber.yml +3 -0
  11. data/features/create_layout.feature +96 -0
  12. data/features/create_new_project.feature +29 -0
  13. data/features/pointrb_setup.feature +22 -0
  14. data/features/step_definitions.rb +96 -0
  15. data/features/support/env.rb +26 -0
  16. data/features/support/helper.rb +62 -0
  17. data/features/test.feature +0 -0
  18. data/gemfiles/Gemfile.default +2 -1
  19. data/lib/bob_the_helper/command/command_result.rb +12 -0
  20. data/lib/bob_the_helper/command.rb +49 -0
  21. data/lib/bob_the_helper/environment.rb +27 -0
  22. data/lib/bob_the_helper/file_system/exceptions.rb +11 -0
  23. data/lib/bob_the_helper/file_system.rb +245 -0
  24. data/lib/bob_the_helper.rb +5 -0
  25. data/lib/pointrb/actions/check_if_pointrb_has_already_been_initialized.rb +15 -0
  26. data/lib/pointrb/actions/check_project_path.rb +15 -0
  27. data/lib/pointrb/actions/create_layout.rb +16 -0
  28. data/lib/pointrb/actions/create_project_wrapper.rb +15 -0
  29. data/lib/pointrb/actions/determine_layout_directory.rb +14 -0
  30. data/lib/pointrb/actions/error_handler_commandline.rb +39 -0
  31. data/lib/pointrb/actions/initialize_pointrb.rb +15 -0
  32. data/lib/pointrb/actions/retrieve_layout_files.rb +16 -0
  33. data/lib/pointrb/actions/retrieve_parsed_layout.rb +17 -0
  34. data/lib/pointrb/actions/set_project_name.rb +15 -0
  35. data/lib/pointrb/actions/show_pointrb_version.rb +14 -0
  36. data/lib/pointrb/api.rb +36 -0
  37. data/lib/pointrb/directory.rb +25 -0
  38. data/lib/pointrb/exceptions.rb +22 -0
  39. data/lib/pointrb/layout.rb +16 -0
  40. data/lib/pointrb/layout_constructor.rb +58 -0
  41. data/lib/pointrb/layout_file.rb +24 -0
  42. data/lib/pointrb/layout_manager.rb +32 -0
  43. data/lib/pointrb/layout_storage_manager.rb +40 -0
  44. data/lib/pointrb/layout_tree.rb +45 -0
  45. data/lib/pointrb/pointrb_file.rb +33 -0
  46. data/lib/pointrb/project.rb +11 -0
  47. data/lib/pointrb/version.rb +1 -1
  48. data/lib/pointrb.rb +32 -0
  49. data/pointrb.gemspec +3 -2
  50. data/script/terminal +1 -0
  51. data/spec/bob_the_helper/command/command_spec.rb +55 -0
  52. data/spec/bob_the_helper/environment/environment_spec.rb +15 -0
  53. data/spec/bob_the_helper/file_system/file_system_spec.rb +279 -0
  54. data/spec/directory/directory_spec.rb +30 -0
  55. data/spec/hooks.rb +5 -0
  56. data/spec/layout/layout_spec.rb +20 -0
  57. data/spec/layout_constructor/layout_constructor_spec.rb +122 -0
  58. data/spec/layout_file/layout_file_spec.rb +49 -0
  59. data/spec/layout_manager/layout_manager_spec.rb +47 -0
  60. data/spec/layout_storage_manager/layout_storage_manager_spec.rb +58 -0
  61. data/spec/layout_tree/layout_tree_spec.rb +70 -0
  62. data/spec/pointrb_file/pointrb_file_spec.rb +34 -0
  63. data/spec/project/project_spec.rb +19 -0
  64. data/spec/spec_helper.rb +9 -13
  65. data/spec/support/capture.rb +19 -0
  66. data/spec/support/env.rb +0 -0
  67. data/spec/support/helper.rb +8 -0
  68. data/spec/support/hooks.rb +5 -0
  69. metadata +104 -5
@@ -0,0 +1,279 @@
1
+ require 'spec_helper'
2
+
3
+ describe BobTheHelper::FileSystem do
4
+
5
+ before(:each) do
6
+ cleanup_working_directory
7
+ end
8
+
9
+ it "returns the root directory for the project" do
10
+ path = File.expand_path('../../../../', __FILE__)
11
+ expect(root_directory).to eq(path)
12
+ end
13
+
14
+ it "returns the tmp directory for tests for the project: <root>/tmp/test'" do
15
+ path = File.expand_path('../../../../tmp/test', __FILE__)
16
+ expect(working_directory).to eq(path)
17
+ end
18
+
19
+ it "switches to the temporary directory" do
20
+ path = ''
21
+ switch_to_working_directory do
22
+ path = Dir.pwd
23
+ end
24
+ expect(path).to eq(working_directory)
25
+ end
26
+
27
+ it "creates a directory in the tmp directory" do
28
+ directory_to_be_created = 'blub'
29
+ path = File.expand_path('../../../../tmp/test/blub', __FILE__)
30
+
31
+ created_directory = create_directory(directory_to_be_created)
32
+
33
+ expect(created_directory).to eq(path)
34
+ end
35
+
36
+ it "supports creating multiple directories" do
37
+ directory_to_be_created = %w[ blub bla test123]
38
+ paths = directory_to_be_created.map { |d| File.expand_path("../../../../tmp/test/#{d}", __FILE__) }
39
+
40
+ created_directories = create_directory(*directory_to_be_created)
41
+
42
+ expect(created_directories).to eq(paths)
43
+ end
44
+
45
+ it "creates a file in the tmp directory" do
46
+ file = 'bla.txt'
47
+ content = 'this is content'
48
+
49
+ created_file = create_file(file, content)
50
+
51
+ file_content = ''
52
+ switch_to_working_directory do
53
+ file_content = File.read(created_file).chomp
54
+ end
55
+
56
+ expect(file_content).to eq(content)
57
+ end
58
+
59
+ it "creates an empty file in the tmp directory" do
60
+ file = 'bla.txt'
61
+ created_file = create_file(file)
62
+
63
+ file_content = ''
64
+ switch_to_working_directory do
65
+ file_content = File.read(created_file).chomp
66
+ end
67
+
68
+ expect(file_content).to eq('')
69
+ end
70
+
71
+ it "creates a file in a subdirectory in the tmp directory" do
72
+ file = 'test_dir/bla.txt'
73
+ content = 'this is content'
74
+
75
+ created_file = create_file(file, content)
76
+
77
+ file_content = ''
78
+ switch_to_working_directory do
79
+ file_content = File.read(created_file).chomp
80
+ end
81
+
82
+ expect(file_content).to eq(content)
83
+ end
84
+
85
+ it "reads files from the tmp directory" do
86
+ file = 'blub123.txt'
87
+ content = "test 12 3"
88
+
89
+ switch_to_working_directory do
90
+ File.open(file, "wb") do |f|
91
+ f.write content
92
+ end
93
+ end
94
+
95
+ file_content = read_file(file)
96
+ expect(file_content).to eq(content)
97
+ end
98
+
99
+ it "checks if a directory/file exists" do
100
+ file = 'blub123.txt'
101
+
102
+ switch_to_working_directory do
103
+ File.open(file, "wb") do |f|
104
+ f.write ''
105
+ end
106
+ end
107
+
108
+ result = path_exists? file
109
+ expect(result).to eq(true)
110
+
111
+ result = path_exists? 'asfdasdfsadf.txt'
112
+ expect(result).to eq(false)
113
+ end
114
+
115
+ it "checks existance for multiple files" do
116
+ files = %w[ blub123.txt asdf.txt asdfe2.txt ]
117
+
118
+ switch_to_working_directory do
119
+ files.each do |file|
120
+ File.open(file, "wb") do |f|
121
+ f.write ''
122
+ end
123
+ end
124
+ end
125
+
126
+ result = path_exists? *files
127
+ expect(result).to eq(true)
128
+ end
129
+
130
+ it "checks absence for multiple files" do
131
+ files = %w[ blub123.txt asdf.txt asdfe2.txt ]
132
+
133
+ result = path_does_not_exist? *files
134
+ expect(result).to eq(true)
135
+ end
136
+
137
+ it "deletes existing directories" do
138
+ directory_to_be_deleted = 'blub'
139
+ path = File.expand_path('../../../../tmp/test/blub', __FILE__)
140
+
141
+ switch_to_working_directory do
142
+ FileUtils.mkdir_p 'blub'
143
+ end
144
+
145
+ deleted_directory = delete_directory(directory_to_be_deleted)
146
+ expect(deleted_directory).to eq(path)
147
+ end
148
+
149
+ it "supports deleting multiple directories" do
150
+ directories_to_be_deleted = %w[ blub bla test123]
151
+ paths = directories_to_be_deleted.map { |d| File.expand_path("../../../../tmp/test/#{d}", __FILE__) }
152
+
153
+ switch_to_working_directory do
154
+ directories_to_be_deleted.each do |d|
155
+ FileUtils.mkdir_p d
156
+ end
157
+ end
158
+
159
+ deleted_directories = delete_directory(*directories_to_be_deleted)
160
+
161
+ expect(deleted_directories).to eq(paths)
162
+ end
163
+
164
+ it "deletes existing single file" do
165
+ file_to_be_deleted = 'blub.txt_123'
166
+ path = File.expand_path('../../../../tmp/test/blub.txt_123', __FILE__)
167
+
168
+ switch_to_working_directory do
169
+ File.open(file_to_be_deleted, "wb") do |f|
170
+ f.write ''
171
+ end
172
+ end
173
+
174
+ deleted_file = delete_file(file_to_be_deleted)
175
+ expect(deleted_file).to eq(path)
176
+ end
177
+
178
+ it "deletes existing multiple files" do
179
+ files = %w[ blub.txt_123 blub.txt_456 ]
180
+
181
+ paths = files.map {|f| File.expand_path("../../../../tmp/test/#{f}", __FILE__) }
182
+
183
+ switch_to_working_directory do
184
+ files.each do |p|
185
+ File.open(p, "wb") do |f|
186
+ f.write ''
187
+ end
188
+ end
189
+ end
190
+
191
+ deleted_files = delete_file files
192
+ expect(deleted_files).to eq(paths)
193
+ end
194
+
195
+ it "let you create the temporary directory" do
196
+ create_working_directory
197
+ expect(File.exists? working_directory).to eq(true)
198
+ end
199
+
200
+ it "let you delete the temporary directory" do
201
+ delete_working_directory
202
+ expect(File.exists? working_directory).to eq(false)
203
+ end
204
+
205
+ it "let you cleanup the temp directory" do
206
+ cleanup_working_directory
207
+
208
+ pattern = File.join(working_directory, '*' )
209
+ entries = Dir.glob(pattern)
210
+
211
+ expect(entries.blank?).to eq(true)
212
+ end
213
+
214
+ it "expand paths to temporary directory" do
215
+ files = %w[ blub.txt_123 blub.txt_456 /path/abc ./path/abc ]
216
+ new_path_via_lib = expand_path(files)
217
+
218
+ files.each do |f|
219
+ this_path = new_path_via_lib.shift
220
+ expect(File.join(working_directory, f)).to eq(this_path)
221
+ end
222
+
223
+ end
224
+
225
+ it "checks forbidden paths during remove operations" do
226
+ good_paths = %w[ blub.txt_123 /path/to/x /home/user/y ]
227
+ bad_paths = [
228
+ '/'
229
+ ]
230
+
231
+ bad_paths.each do |p|
232
+ expect {
233
+ raise_if_forbidden_path_for_delete_operation(p)
234
+ }.to raise_error BobTheHelper::FileSystem::Exceptions::InvalidPath
235
+ end
236
+
237
+ good_paths.each do |p|
238
+ expect {
239
+ raise_if_forbidden_path_for_delete_operation(p)
240
+ }.to_not raise_error
241
+ end
242
+
243
+ expect {
244
+ raise_if_forbidden_path_for_delete_operation(bad_paths)
245
+ }.to raise_error BobTheHelper::FileSystem::Exceptions::InvalidPath
246
+
247
+ expect {
248
+ raise_if_forbidden_path_for_delete_operation(good_paths)
249
+ }.to_not raise_error
250
+
251
+ end
252
+
253
+ it "checks forbidden paths during create operations" do
254
+ good_paths = %w[ blub.txt_123 /path/to/x /home/user/y ]
255
+ bad_paths = [
256
+ '/path/with/../',
257
+ ]
258
+
259
+ bad_paths.each do |p|
260
+ expect {
261
+ raise_if_forbidden_path_for_create_operation(p)
262
+ }.to raise_error BobTheHelper::FileSystem::Exceptions::InvalidPath
263
+ end
264
+
265
+ good_paths.each do |p|
266
+ expect {
267
+ raise_if_forbidden_path_for_create_operation(p)
268
+ }.to_not raise_error
269
+ end
270
+
271
+ expect {
272
+ raise_if_forbidden_path_for_create_operation(bad_paths)
273
+ }.to raise_error BobTheHelper::FileSystem::Exceptions::InvalidPath
274
+
275
+ expect {
276
+ raise_if_forbidden_path_for_create_operation(good_paths)
277
+ }.to_not raise_error
278
+ end
279
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe Directory do
4
+
5
+ it "has a path and a base dir" do
6
+ Directory.new('path', 'basedir')
7
+ end
8
+
9
+ it "can be created" do
10
+ dir = Directory.new('path', working_directory)
11
+ dir.create
12
+
13
+ dir_path = File.join(working_directory, 'path')
14
+ result = File.exists?(dir_path)
15
+
16
+ expect(result).to eq(true)
17
+ end
18
+
19
+ it "returns the full path" do
20
+ dir = Directory.new('path', working_directory)
21
+ check = File.join(working_directory, 'path')
22
+ expect(dir.full_path).to eq(check)
23
+ end
24
+
25
+ it "returns path if it starts with '/'" do
26
+ path = '/path'
27
+ dir = Directory.new(path)
28
+ expect(dir.full_path).to eq(path)
29
+ end
30
+ end
data/spec/hooks.rb ADDED
@@ -0,0 +1,5 @@
1
+ Rspec.configure do |c|
2
+ c.before(:each) do
3
+ cleanup_working_directory
4
+ end
5
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ describe Layout do
4
+ it "creates the directory structure" do
5
+ action = Class.new do
6
+ def create
7
+ puts "hey, create"
8
+ end
9
+ end
10
+
11
+ layout = Layout.new
12
+ layout.actions << action.new
13
+
14
+ result = capture(:stdout) do
15
+ layout.create
16
+ end
17
+
18
+ expect(result.chomp).to eq('hey, create')
19
+ end
20
+ end
@@ -0,0 +1,122 @@
1
+ require 'spec_helper'
2
+
3
+ describe LayoutConstructor do
4
+ let(:project) do
5
+ Class.new do
6
+ def name
7
+ 'new_project'
8
+ end
9
+
10
+ def path
11
+ File.join(working_directory, name)
12
+ end
13
+ end.new
14
+ end
15
+ let(:layout_constructor) { LayoutConstructor.new(project) }
16
+
17
+ it "parses a layout with a name" do
18
+ layout = "layout :name do; end"
19
+ file = 'blub.layout'
20
+ result = layout_constructor.parse_dsl(layout, file)
21
+ expect(result.name).to eq(:name)
22
+ end
23
+
24
+ it "parses a layout with a directory" do
25
+ layout = <<-EOB
26
+ layout :name do
27
+ directory 'path'
28
+ end
29
+ EOB
30
+ file = 'blub.layout'
31
+ result = layout_constructor.parse_dsl(layout, file)
32
+ #root directory + directory 'path'
33
+ expect(result.actions.size).to eq(2)
34
+ end
35
+
36
+ it "parses a layout with a nested directory" do
37
+ layout = <<-EOB
38
+ layout :name do
39
+ directory 'path' do
40
+ directory 'subpath'
41
+ end
42
+ end
43
+ EOB
44
+
45
+ paths = [
46
+ project.path,
47
+ File.join(project.path, 'path'),
48
+ File.join(project.path, 'path', 'subpath'),
49
+ ]
50
+ file = 'blub.layout'
51
+ parsed_layout = layout_constructor.parse_dsl(layout,file)
52
+ result = parsed_layout.actions.all? { |node| node.full_path == paths.shift }
53
+
54
+ expect(result).to eq(true)
55
+ end
56
+
57
+ it "parses a layout with a file" do
58
+ layout = <<-EOB
59
+ layout :name do
60
+ file 'path' do
61
+ 'content'
62
+ end
63
+ end
64
+ EOB
65
+
66
+ paths = [
67
+ project.path,
68
+ File.join(project.path, 'path'),
69
+ ]
70
+ file = 'blub.layout'
71
+ parsed_layout = layout_constructor.parse_dsl(layout, file)
72
+
73
+ result = parsed_layout.actions.all? { |node| node.full_path == paths.shift }
74
+ expect(result).to eq(true)
75
+
76
+ content = [
77
+ 'content'
78
+ ]
79
+
80
+ result = parsed_layout.actions.find_all{ |a| a.kind_of? PointRbFile}.all?{ |node| node.content == content.shift }
81
+ expect(result).to eq(true)
82
+ end
83
+
84
+ it "parses a layout with a file and multiple lines" do
85
+ layout = <<-EOB
86
+ layout :name do
87
+ file 'path' do
88
+ <<-HERE
89
+ content
90
+ content
91
+ content
92
+ content
93
+ content
94
+ content
95
+ HERE
96
+ end
97
+ end
98
+ EOB
99
+
100
+ file = 'blub.layout'
101
+ parsed_layout = layout_constructor.parse_dsl(layout, file)
102
+
103
+ file_content = [
104
+ 'content
105
+ content
106
+ content
107
+ content
108
+ content
109
+ content
110
+ '
111
+ ]
112
+
113
+ result = parsed_layout.actions.find_all{ |a| a.kind_of? PointRbFile}.all?{ |node| node.content == file_content.first}
114
+ expect(result).to eq(true)
115
+ end
116
+
117
+ it "returns the file name of the parsed layout when an error occured" do
118
+ layout = "garbage"
119
+ file = 'blub.layout'
120
+ expect { parsed_layout = layout_constructor.parse_dsl(layout, file) }.to raise_error(Exceptions::SyntaxErrorInLayout, 'Syntax error in layout-file "blub.layout" at line 1')
121
+ end
122
+ end
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+
3
+ describe LayoutFile do
4
+
5
+ before(:all) do
6
+ @file = 'layouts/new_layout1.layout'
7
+
8
+ @content = <<-EOF
9
+ layout :name1 do
10
+ end
11
+ EOF
12
+
13
+ create_file @file, @content
14
+
15
+ @full_path = File.join(working_directory, @file )
16
+ @layout_file = LayoutFile.new(@full_path)
17
+ end
18
+
19
+ it "returns the path of the layout" do
20
+ expect(@layout_file.path).to eq(@full_path)
21
+ end
22
+
23
+ it "returns the content of the layout file" do
24
+ expect(@layout_file.content).to eq(@content)
25
+ end
26
+
27
+ it "raises an Error if an unexisting layout file is given" do
28
+ expect {
29
+ LayoutFile.new('invalid path')
30
+ }.to raise_error Exceptions::FileNotFound
31
+ end
32
+
33
+ it "let you compare instances by path" do
34
+ file1 = 'layouts/layout1.layout'
35
+ file2 = 'layouts/layout2.layout'
36
+
37
+ create_file file1
38
+ create_file file2
39
+
40
+ layout_file1 = LayoutFile.new(File.join(working_directory, file1))
41
+ layout_file2 = LayoutFile.new(File.join(working_directory, file2))
42
+
43
+ result = ( layout_file1 == layout_file1 )
44
+ expect(result).to eq(true)
45
+
46
+ result = ( layout_file1 == layout_file2 )
47
+ expect(result).to eq(false)
48
+ end
49
+ end
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+
3
+ describe LayoutManager do
4
+
5
+ let(:layout_file) do
6
+ Class.new do
7
+ def path
8
+ "file/path/to/source"
9
+ end
10
+
11
+ def content
12
+ <<-EOF
13
+ layout :name do
14
+ directory "path/to/directory"
15
+ end
16
+ EOF
17
+ end
18
+ end.new
19
+ end
20
+
21
+ let(:project) do
22
+ Class.new do
23
+ def name
24
+ 'blub'
25
+ end
26
+
27
+ def path
28
+ File.join(working_directory, name)
29
+ end
30
+ end.new
31
+ end
32
+
33
+ it "retrieves a layout by name" do
34
+
35
+ layout_manager = LayoutManager.new([layout_file], project)
36
+ layout = layout_manager.retrieve(:name)
37
+
38
+ expect(layout.name).to eq(:name)
39
+ end
40
+
41
+ it "raises an exception if requested layout was not found" do
42
+ layout_manager = LayoutManager.new([layout_file], project)
43
+ expect {
44
+ layout_manager.retrieve(:name_abc_def)
45
+ }.to raise_error Exceptions::LayoutNotFound
46
+ end
47
+ end
@@ -0,0 +1,58 @@
1
+ #encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe LayoutStorageManager do
5
+ let(:layout_directory) { File.join(working_directory, 'layouts') }
6
+ let(:layout_file_klass) do
7
+ Class.new do
8
+ attr_reader :path
9
+
10
+ def initialize(p)
11
+ @path = p
12
+ end
13
+
14
+ def content
15
+ File.read(@path)
16
+ end
17
+ end
18
+ end
19
+
20
+ before(:each) do
21
+ create_directory layout_directory
22
+ end
23
+
24
+ it "takes a path to look for layouts" do
25
+ LayoutStorageManager.new(layout_directory)
26
+ end
27
+
28
+ it "finds a specific template" do
29
+ file1 = 'layouts/new_layout1.layout'
30
+ file2 = 'layouts/new_layout2.layout'
31
+
32
+ create_file file1, "I'm content1"
33
+ create_file file2, "I'm content2"
34
+
35
+ mgr = LayoutStorageManager.new(layout_directory, layout_file_klass)
36
+ layout_file = File.join(working_directory, file1)
37
+
38
+ layout = mgr.retrieve(layout_file)
39
+ expect(layout.path).to eq(layout_file)
40
+ end
41
+
42
+ it "finds a specific template" do
43
+ file1 = 'layouts/new_layout1.layout'
44
+ file2 = 'layouts/new_layout2.layout'
45
+ file3 = 'layouts/new_layout3.layout'
46
+
47
+ create_file file1, "I'm content1"
48
+ create_file file2, "I'm content2"
49
+ create_file file3, "I'm content3"
50
+
51
+ mgr = LayoutStorageManager.new(layout_directory, layout_file_klass)
52
+ layout_file = File.join(working_directory, file1)
53
+
54
+ layouts = mgr.retrieve_all
55
+ expect(layouts.first.respond_to?(:content)).to eq(true)
56
+ end
57
+
58
+ end
@@ -0,0 +1,70 @@
1
+ require 'spec_helper'
2
+
3
+ describe Tree do
4
+ before(:each) do
5
+ @tree = LayoutTree.new('root_node')
6
+ end
7
+
8
+ it "takes a root node" do
9
+ LayoutTree.new('root_node')
10
+ end
11
+
12
+ it "adds a child node" do
13
+ @tree.add_node('child_node')
14
+
15
+ expect(@tree.tree.size).to eq(2)
16
+ end
17
+
18
+ it "is possible to serialize the whole tree (default action)" do
19
+ test_node = 'child_node'
20
+
21
+ @tree.add_node(test_node)
22
+ @tree.add_node('child_node')
23
+ @tree.add_node('child_node')
24
+ @tree.add_node('child_node')
25
+
26
+ serialized_tree = @tree.serialize
27
+
28
+ expect(serialized_tree[1]).to eq(test_node)
29
+ end
30
+
31
+ it "is possible to serialize the whole tree (customized action)" do
32
+ test_node = 'child_node'
33
+
34
+ @tree.add_node(test_node)
35
+ @tree.add_node('child_node')
36
+ @tree.add_node('child_node')
37
+ @tree.add_node('child_node')
38
+
39
+ serialized_tree = @tree.serialize do |node|
40
+ node.content
41
+ end
42
+
43
+ expect(serialized_tree[1]).to eq(test_node)
44
+ end
45
+
46
+ it "is possible to set the active node" do
47
+ test_node = 'child_node'
48
+
49
+ @tree.add_node(test_node)
50
+ @tree.up
51
+ @tree.add_node('child_node')
52
+ @tree.up
53
+ @tree.add_node('child_node')
54
+
55
+ check = <<-EOF
56
+ * node0
57
+ |---> node1
58
+ |---> node2
59
+ +---> node3
60
+ EOF
61
+ result = capture(:stdout) do
62
+ @tree.tree.print_tree
63
+ end
64
+ expect(result).to eq(check)
65
+ end
66
+
67
+ it "returns the active node in tree" do
68
+
69
+ end
70
+ end