#!/usr/bin/env ruby # # The Subversion bindings use this manually written proxy class approach # to the Ruby bindings. Note that in C the struct svn_fs_t is an # opaque pointer and the Ruby FileSystem proxy class is hand written around it. # This testcase tests this and the C close function and subsequent error # handling. require 'swig_assert' require 'ruby_manual_proxy' module Svn module Fs module_function def create(path) f = Ruby_manual_proxy::svn_fs_create(path) return f end FileSystem = SWIG::TYPE_p_svn_fs_t class FileSystem class << self def create(*args) Fs.create(*args) end end def path Ruby_manual_proxy::svn_fs_path(self) end end end end f = Svn::Fs::FileSystem.create("/tmp/myfile") path = f.path f.close begin # regression in swig-3.0.8 meant ObjectPreviouslyDeleted error was thrown instead path = f.path raise RuntimeError.new("IOError (1) not thrown") rescue IOError end file = nil begin path = Ruby_manual_proxy::svn_fs_path(file) raise RuntimeError.new("IOError (2) not thrown") rescue IOError end