aboutsummaryrefslogtreecommitdiffstats
path: root/test/prism/parse_serialize_test.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/prism/parse_serialize_test.rb')
-rw-r--r--test/prism/parse_serialize_test.rb38
1 files changed, 38 insertions, 0 deletions
diff --git a/test/prism/parse_serialize_test.rb b/test/prism/parse_serialize_test.rb
new file mode 100644
index 0000000000..18ff0c4319
--- /dev/null
+++ b/test/prism/parse_serialize_test.rb
@@ -0,0 +1,38 @@
+# frozen_string_literal: true
+
+require_relative "test_helper"
+
+return if YARP::BACKEND == :FFI
+
+module YARP
+ class ParseSerializeTest < TestCase
+ def test_parse_serialize
+ dumped = Debug.parse_serialize_file(__FILE__)
+ result = YARP.load(File.read(__FILE__), dumped)
+
+ assert_kind_of ParseResult, result, "Expected the return value to be a ParseResult"
+ assert_equal __FILE__, find_file_node(result)&.filepath, "Expected the filepath to be set correctly"
+ end
+
+ def test_parse_serialize_with_locals
+ filepath = __FILE__
+ metadata = [filepath.bytesize, filepath.b, 1, 1, 1, "foo".b].pack("LA*LLLA*")
+
+ dumped = Debug.parse_serialize_file_metadata(filepath, metadata)
+ result = YARP.load(File.read(__FILE__), dumped)
+
+ assert_kind_of ParseResult, result, "Expected the return value to be a ParseResult"
+ end
+
+ private
+
+ def find_file_node(result)
+ queue = [result.value]
+
+ while (node = queue.shift)
+ return node if node.is_a?(SourceFileNode)
+ queue.concat(node.compact_child_nodes)
+ end
+ end
+ end
+end