11.5
change uylvopromlnzlxmwxslrrpkqpxmnpkwp
commit f5faf125aec6654001ef8ccb51fb014d1ac6abba
author Alpha Chen <alpha@kejadlen.dev>
date
parent rvruoynx
diff --git a/ruby/test/lox/test_resolver.rb b/ruby/test/lox/test_resolver.rb
index 8d50cae..5509e86 100644
--- a/ruby/test/lox/test_resolver.rb
+++ b/ruby/test/lox/test_resolver.rb
@@ -7,13 +7,6 @@ require "lox/scanner"
 
 class TestResolver < Lox::Test
 
-  def setup
-    @ast_printer = Lox::AstPrinter.new
-    @scanner = Lox::Scanner.new
-    @interpreter = Interpreter.new
-    @resolver = Lox::Resolver.new(@interpreter)
-  end
-
   def test_resolver
     assert_resolved [
       ["(var j)", 0],
@@ -47,17 +40,37 @@ class TestResolver < Lox::Test
     SRC
   end
 
+  def test_same_var_name_in_scope
+    assert_raises Lox::ResolverError do
+      resolve(<<~SRC)
+        fun bad() {
+          var a = "first";
+          var a = "second";
+        }
+      SRC
+    end
+  end
+
   private
 
   def assert_resolved(expected, src)
-    stmts = Lox::Parser.new(@scanner.scan(src)).parse!
-    @resolver.resolve(*stmts);
+    resolves = resolve(src)
 
-    assert_equal expected, @interpreter.resolves.map {|expr, depth|
-      [@ast_printer.print(expr), depth]
+    ast_printer = Lox::AstPrinter.new
+    assert_equal expected, resolves.map {|expr, depth|
+      [ast_printer.print(expr), depth]
     }
   end
 
+  def resolve(src)
+    stmts = Lox::Parser.new(Lox::Scanner.new.scan(src)).parse!
+
+    interpreter = Interpreter.new
+    Lox::Resolver.new(interpreter).resolve(*stmts)
+
+    interpreter.resolves
+  end
+
   class Interpreter
     attr_reader :resolves