summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--parse.y19
-rw-r--r--test/ripper/test_filter.rb41
2 files changed, 54 insertions, 6 deletions
diff --git a/parse.y b/parse.y
index c611f9b538..b8d9b595ee 100644
--- a/parse.y
+++ b/parse.y
@@ -10388,6 +10388,24 @@ ripper_column(VALUE self)
/*
* call-seq:
+ * ripper#filename -> String
+ *
+ * Return current parsing filename.
+ */
+static VALUE
+ripper_filename(VALUE self)
+{
+ struct parser_params *parser;
+
+ TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
+ if (!ripper_initialized_p(parser)) {
+ rb_raise(rb_eArgError, "method called for uninitialized object");
+ }
+ return parser->parser_ruby_sourcefile_string;
+}
+
+/*
+ * call-seq:
* ripper#lineno -> Integer
*
* Return line number of current parsing line.
@@ -10437,6 +10455,7 @@ Init_ripper(void)
rb_define_method(Ripper, "initialize", ripper_initialize, -1);
rb_define_method(Ripper, "parse", ripper_parse, 0);
rb_define_method(Ripper, "column", ripper_column, 0);
+ rb_define_method(Ripper, "filename", ripper_filename, 0);
rb_define_method(Ripper, "lineno", ripper_lineno, 0);
rb_define_method(Ripper, "end_seen?", rb_parser_end_seen_p, 0);
rb_define_method(Ripper, "encoding", rb_parser_encoding, 0);
diff --git a/test/ripper/test_filter.rb b/test/ripper/test_filter.rb
index d7e9ba0dcc..b398ebe5ed 100644
--- a/test/ripper/test_filter.rb
+++ b/test/ripper/test_filter.rb
@@ -23,31 +23,60 @@ class TestRipper_Filter < Test::Unit::TestCase
File.expand_path(__FILE__)
end
- def test_filter_filename
+ def test_filter_filename_unset
data = {}
- Filter.new(File.read(filename)).parse(data)
+ filter = Filter.new(File.read(filename))
+ filter.parse(data)
assert_equal('-', data[:filename], "[ruby-dev:37856]")
+ assert_equal('-', filter.filename)
+ end
+ def test_filter_filename
data = {}
- Filter.new(File.read(filename), filename).parse(data)
+ filter = Filter.new(File.read(filename), filename)
+ assert_equal(filename, filter.filename)
+ filter.parse(data)
assert_equal(filename, data[:filename])
+ assert_equal(filename, filter.filename)
end
def test_filter_lineno
data = {}
- Filter.new(File.read(filename)).parse(data)
+ src = File.read(filename)
+ src_lines = src.count("\n")
+ filter = Filter.new(src)
+ assert_equal(nil, filter.lineno)
+ filter.parse(data)
assert_equal(1, data[:lineno])
+ assert_equal(src_lines, filter.lineno)
+ end
+
+ def test_filter_lineno_set
+ data = {}
+ src = File.read(filename)
+ src_lines = src.count("\n")
+ filter = Filter.new(src, '-', 100)
+ assert_equal(nil, filter.lineno)
+ filter.parse(data)
+ assert_equal(100, data[:lineno])
+ assert_equal(src_lines+100-1, filter.lineno)
end
def test_filter_column
data = {}
- Filter.new(File.read(filename)).parse(data)
+ src = File.read(filename)
+ last_columns = src[/(.*)\Z/].size
+ filter = Filter.new(src)
+ assert_equal(nil, filter.column)
+ filter.parse(data)
assert_equal(0, data[:column])
+ assert_equal(last_columns, filter.column)
end
def test_filter_token
data = {}
- Filter.new(File.read(filename)).parse(data)
+ filter = Filter.new(File.read(filename))
+ filter.parse(data)
assert_equal("begin", data[:token])
end
end if ripper_test