Skip to content

Commit 9d2500d

Browse files
committed
Add some initial tests
1 parent 8aa1f5e commit 9d2500d

File tree

7 files changed

+106
-20
lines changed

7 files changed

+106
-20
lines changed

lib/ripper/parse_tree.rb

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,8 @@ def initialize(error, lineno, column)
9292
# array and attach them to themselves.
9393
attr_accessor :comments
9494

95-
def initialize(source, *args)
96-
super(source, *args)
95+
def initialize(source, *)
96+
super
9797

9898
# We keep the source around so that we can refer back to it when we're
9999
# generating the AST. Sometimes it's easier to just reference the source
@@ -160,13 +160,6 @@ def initialize(source, *args)
160160
end
161161
end
162162

163-
def self.parse(source)
164-
builder = new(source)
165-
166-
response = builder.parse
167-
response unless builder.error?
168-
end
169-
170163
private
171164

172165
# ----------------------------------------------------------------------------

lib/ripper/parse_tree/version.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# frozen_string_literal: true
22

33
class Ripper
4-
class ParseTree
4+
class ParseTree < Ripper
55
VERSION = '0.1.0'
66
end
77
end

test/fixtures/alias.rb

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
alias foo bar
2+
%
3+
alias << push
4+
%
5+
alias in within
6+
%
7+
alias in IN
8+
%
9+
alias :foo :bar
10+
%
11+
alias :"foo" :bar
12+
%
13+
alias :foo :"bar"
14+
%
15+
alias $foo $bar
16+
%
17+
alias foo bar # baz
18+
%
19+
alias foo # baz
20+
bar
21+
%
22+
alias foo # foo
23+
bar # bar

test/parse_tree_test.rb

Lines changed: 0 additions & 9 deletions
This file was deleted.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# frozen_string_literal: true
2+
3+
require 'test_helper'
4+
5+
class Ripper::ParseTree < Ripper
6+
class AliasTest < Minitest::Test
7+
def test_alias
8+
assert_node(Alias, 'alias foo bar')
9+
end
10+
11+
def test_var_alias
12+
assert_node(VarAlias, 'alias $foo $bar')
13+
end
14+
15+
def test_fixtures
16+
assert_fixtures("alias.rb")
17+
end
18+
end
19+
end
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# frozen_string_literal: true
2+
3+
require 'test_helper'
4+
5+
class Ripper::ParseTree
6+
class VersionTest < Minitest::Test
7+
def test_version
8+
refute_nil(VERSION)
9+
end
10+
end
11+
end

test/test_helper.rb

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,56 @@
33
require 'simplecov'
44
SimpleCov.start
55

6-
$LOAD_PATH.unshift File.expand_path('../lib', __dir__)
6+
$LOAD_PATH.unshift(File.expand_path('../lib', __dir__))
77
require 'ripper/parse_tree'
88

99
require 'minitest/autorun'
10+
11+
class Minitest::Test
12+
private
13+
14+
def assert_fixtures(filename)
15+
File
16+
.readlines(File.expand_path("fixtures/#{filename}", __dir__))
17+
.slice_before { |line| line == "%\n" }
18+
.each do |example|
19+
refute_nil(parse_tree(example))
20+
end
21+
end
22+
23+
def assert_metadata(
24+
kind,
25+
node,
26+
start_char:,
27+
end_char:,
28+
start_line: 1,
29+
end_line: 1,
30+
**metadata
31+
)
32+
assert_kind_of(kind, node)
33+
34+
assert_equal(start_line, node.location.start_line)
35+
assert_equal(start_char, node.location.start_char)
36+
assert_equal(end_line, node.location.end_line)
37+
assert_equal(end_char, node.location.end_char)
38+
39+
metadata.each { |key, value| assert_equal(value, node.public_send(key)) }
40+
end
41+
42+
def assert_node(kind, source)
43+
assert_metadata(
44+
kind,
45+
parse_tree(source),
46+
start_line: 1,
47+
start_char: 0,
48+
end_line: [1, source.count("\n")].max,
49+
end_char: source.chomp.size
50+
)
51+
end
52+
53+
def parse_tree(source)
54+
parser = Ripper::ParseTree.new(source)
55+
response = parser.parse
56+
response.statements.body.first unless parser.error?
57+
end
58+
end

0 commit comments

Comments
 (0)