Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

singleton can't be dumped (TypeError) #17

Closed
masterkain opened this issue Nov 10, 2013 · 8 comments
Closed

singleton can't be dumped (TypeError) #17

masterkain opened this issue Nov 10, 2013 · 8 comments
Labels

Comments

@masterkain
Copy link

Hello,
after the spec suite passes I get this exception and no file is written on filesystem.

ruby-2.0.0-p247, rails 4.0.1, rspec 2.99.0.beta1

transpec -m  --negative-form to_not --boolean-matcher true,false
...
/Users/kain/.rvm/gems/ruby-2.0.0-p247@myapp/gems/rspec-mocks-2.99.0.beta1/lib/rspec/mocks/extensions/marshal.rb:7:in `dump': singleton can't be dumped (TypeError)
  from /Users/kain/.rvm/gems/ruby-2.0.0-p247@myapp/gems/rspec-mocks-2.99.0.beta1/lib/rspec/mocks/extensions/marshal.rb:7:in `dump_with_mocks'
  from /private/var/folders/8s/rwhy29dx0s17jb7l615z465w0000gn/T/d20131110-82722-5bbfzw/rails/transpec_analysis_helper.rb:24:in `block (2 levels) in <module:TranspecAnalysis>'
  from /private/var/folders/8s/rwhy29dx0s17jb7l615z465w0000gn/T/d20131110-82722-5bbfzw/rails/transpec_analysis_helper.rb:23:in `open'
  from /private/var/folders/8s/rwhy29dx0s17jb7l615z465w0000gn/T/d20131110-82722-5bbfzw/rails/transpec_analysis_helper.rb:23:in `block in <module:TranspecAnalysis>'
/Users/kain/.rvm/gems/ruby-2.0.0-p247@myapp/gems/transpec-1.2.1/lib/transpec/dynamic_analyzer.rb:155:in `block in run_rspec': Dynamic analysis failed! (RuntimeError)
  from /Users/kain/.rvm/gems/ruby-2.0.0-p247@myapp/gems/transpec-1.2.1/lib/transpec/project.rb:42:in `block in with_bundler_clean_env'
  from /Users/kain/.rvm/gems/ruby-2.0.0-p247@myapp/gems/bundler-1.5.0.rc.1/lib/bundler.rb:229:in `block in with_clean_env'
  from /Users/kain/.rvm/gems/ruby-2.0.0-p247@myapp/gems/bundler-1.5.0.rc.1/lib/bundler.rb:216:in `with_original_env'
  from /Users/kain/.rvm/gems/ruby-2.0.0-p247@myapp/gems/bundler-1.5.0.rc.1/lib/bundler.rb:222:in `with_clean_env'
  from /Users/kain/.rvm/gems/ruby-2.0.0-p247@myapp/gems/transpec-1.2.1/lib/transpec/project.rb:39:in `with_bundler_clean_env'
  from /Users/kain/.rvm/gems/ruby-2.0.0-p247@myapp/gems/transpec-1.2.1/lib/transpec/dynamic_analyzer.rb:138:in `run_rspec'
  from /Users/kain/.rvm/gems/ruby-2.0.0-p247@myapp/gems/transpec-1.2.1/lib/transpec/dynamic_analyzer.rb:112:in `block in analyze'
  from /Users/kain/.rvm/gems/ruby-2.0.0-p247@myapp/gems/transpec-1.2.1/lib/transpec/dynamic_analyzer.rb:122:in `in_copied_project'
  from /Users/kain/.rvm/gems/ruby-2.0.0-p247@myapp/gems/transpec-1.2.1/lib/transpec/dynamic_analyzer.rb:99:in `analyze'
  from /Users/kain/.rvm/gems/ruby-2.0.0-p247@myapp/gems/transpec-1.2.1/lib/transpec/cli.rb:52:in `block in process'
  from /Users/kain/.rvm/gems/ruby-2.0.0-p247@myapp/gems/transpec-1.2.1/lib/transpec/dynamic_analyzer.rb:85:in `block in initialize'
  from /Users/kain/.rvm/gems/ruby-2.0.0-p247@myapp/gems/transpec-1.2.1/lib/transpec/dynamic_analyzer.rb:130:in `block (2 levels) in in_copied_project'
  from /Users/kain/.rvm/gems/ruby-2.0.0-p247@myapp/gems/transpec-1.2.1/lib/transpec/dynamic_analyzer.rb:129:in `chdir'
  from /Users/kain/.rvm/gems/ruby-2.0.0-p247@myapp/gems/transpec-1.2.1/lib/transpec/dynamic_analyzer.rb:129:in `block in in_copied_project'
  from /Users/kain/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/tmpdir.rb:88:in `mktmpdir'
  from /Users/kain/.rvm/gems/ruby-2.0.0-p247@myapp/gems/transpec-1.2.1/lib/transpec/dynamic_analyzer.rb:126:in `in_copied_project'
  from /Users/kain/.rvm/gems/ruby-2.0.0-p247@myapp/gems/transpec-1.2.1/lib/transpec/dynamic_analyzer.rb:84:in `initialize'
  from /Users/kain/.rvm/gems/ruby-2.0.0-p247@myapp/gems/transpec-1.2.1/lib/transpec/cli.rb:50:in `new'
  from /Users/kain/.rvm/gems/ruby-2.0.0-p247@myapp/gems/transpec-1.2.1/lib/transpec/cli.rb:50:in `process'
  from /Users/kain/.rvm/gems/ruby-2.0.0-p247@myapp/gems/transpec-1.2.1/lib/transpec/cli.rb:36:in `run'
  from /Users/kain/.rvm/gems/ruby-2.0.0-p247@myapp/gems/transpec-1.2.1/lib/transpec/cli.rb:18:in `run'
  from /Users/kain/.rvm/gems/ruby-2.0.0-p247@myapp/gems/transpec-1.2.1/bin/transpec:7:in `<top (required)>'
  from /Users/kain/.rvm/gems/ruby-2.0.0-p247@myapp/bin/transpec:23:in `load'
  from /Users/kain/.rvm/gems/ruby-2.0.0-p247@myapp/bin/transpec:23:in `<main>'
  from /Users/kain/.rvm/gems/ruby-2.0.0-p247@myapp/bin/ruby_executable_hooks:14:in `eval'
  from /Users/kain/.rvm/gems/ruby-2.0.0-p247@myapp/bin/ruby_executable_hooks:14:in `<main>'
@yujinakayama
Copy link
Owner

Thanks for the report. I'll take a look.

yujinakayama added a commit that referenced this issue Nov 10, 2013
Use JSON rather than Marshal to serialize dynamic analysis data.

This fixes #17.
@yujinakayama
Copy link
Owner

I think I've fixed the error on fix-type-error-on-dynamic-analysis branch, but I'm not sure if it really works on your project. So, please retry with the following steps:

$ git clone https://github.com/yujinakayama/transpec.git
$ cd transpec
$ git checkout fix-type-error-on-dynamic-analysis
$ cd /path/to/your/project
$ /path/to/cloned/transpec/bin/transpec -m  --negative-form to_not --boolean-matcher true,false

yujinakayama added a commit that referenced this issue Nov 10, 2013
Use JSON rather than Marshal to serialize dynamic analysis data.

This fixes #17.
@masterkain
Copy link
Author

I did try with the fix-type-error-on-dynamic-analysis branch, but I get another odd error:

Copying project for dynamic analysis...
/Users/kain/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/fileutils.rb:1360:in `copy': cannot handle socket (RuntimeError)
    from /Users/kain/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/fileutils.rb:463:in `block in copy_entry'
    from /Users/kain/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/fileutils.rb:1478:in `call'
    from /Users/kain/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/fileutils.rb:1478:in `wrap_traverse'
    from /Users/kain/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/fileutils.rb:1481:in `block in wrap_traverse'
    from /Users/kain/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/fileutils.rb:1480:in `each'
    from /Users/kain/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/fileutils.rb:1480:in `wrap_traverse'
    from /Users/kain/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/fileutils.rb:1481:in `block in wrap_traverse'
    from /Users/kain/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/fileutils.rb:1480:in `each'
    from /Users/kain/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/fileutils.rb:1480:in `wrap_traverse'
    from /Users/kain/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/fileutils.rb:1481:in `block in wrap_traverse'
    from /Users/kain/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/fileutils.rb:1480:in `each'
    from /Users/kain/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/fileutils.rb:1480:in `wrap_traverse'
    from /Users/kain/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/fileutils.rb:460:in `copy_entry'
    from /Users/kain/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/fileutils.rb:435:in `block in cp_r'
    from /Users/kain/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/fileutils.rb:1551:in `block in fu_each_src_dest'
    from /Users/kain/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/fileutils.rb:1565:in `fu_each_src_dest0'
    from /Users/kain/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/fileutils.rb:1549:in `fu_each_src_dest'
    from /Users/kain/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/fileutils.rb:434:in `cp_r'
    from /Users/kain/src/transpec/lib/transpec/dynamic_analyzer.rb:130:in `block in in_copied_project'
    from /Users/kain/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/tmpdir.rb:88:in `mktmpdir'
    from /Users/kain/src/transpec/lib/transpec/dynamic_analyzer.rb:129:in `in_copied_project'
    from /Users/kain/src/transpec/lib/transpec/dynamic_analyzer.rb:88:in `initialize'
    from /Users/kain/src/transpec/lib/transpec/cli.rb:50:in `new'
    from /Users/kain/src/transpec/lib/transpec/cli.rb:50:in `process'
    from /Users/kain/src/transpec/lib/transpec/cli.rb:36:in `run'
    from /Users/kain/src/transpec/lib/transpec/cli.rb:18:in `run'
    from /Users/kain/src/transpec/bin/transpec:7:in `<main>'

@yujinakayama
Copy link
Owner

Please try again with the latest commit of fix-type-error-on-dynamic-analysis branch :).

@masterkain
Copy link
Author

Thanks, we have some progress.

When a test fails, an exception is raised (which can be expected)

/Users/kain/src/transpec/lib/transpec/dynamic_analyzer.rb:160:in `block in run_rspec': Dynamic analysis failed! (RuntimeError)
    from /Users/kain/src/transpec/lib/transpec/project.rb:45:in `with_bundler_clean_env'
    from /Users/kain/src/transpec/lib/transpec/dynamic_analyzer.rb:143:in `run_rspec'
    from /Users/kain/src/transpec/lib/transpec/dynamic_analyzer.rb:118:in `block in analyze'
    from /Users/kain/src/transpec/lib/transpec/dynamic_analyzer.rb:127:in `in_copied_project'
    from /Users/kain/src/transpec/lib/transpec/dynamic_analyzer.rb:105:in `analyze'
    from /Users/kain/src/transpec/lib/transpec/cli.rb:52:in `block in process'
    from /Users/kain/src/transpec/lib/transpec/dynamic_analyzer.rb:91:in `block in initialize'
    from /Users/kain/src/transpec/lib/transpec/dynamic_analyzer.rb:135:in `block (2 levels) in in_copied_project'
    from /Users/kain/src/transpec/lib/transpec/dynamic_analyzer.rb:134:in `chdir'
    from /Users/kain/src/transpec/lib/transpec/dynamic_analyzer.rb:134:in `block in in_copied_project'
    from /Users/kain/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/tmpdir.rb:88:in `mktmpdir'
    from /Users/kain/src/transpec/lib/transpec/dynamic_analyzer.rb:131:in `in_copied_project'
    from /Users/kain/src/transpec/lib/transpec/dynamic_analyzer.rb:90:in `initialize'
    from /Users/kain/src/transpec/lib/transpec/cli.rb:50:in `new'
    from /Users/kain/src/transpec/lib/transpec/cli.rb:50:in `process'
    from /Users/kain/src/transpec/lib/transpec/cli.rb:36:in `run'
    from /Users/kain/src/transpec/lib/transpec/cli.rb:18:in `run'
    from /Users/kain/src/transpec/bin/transpec:7:in `<main>'

But when the spec suite is done, it writes out some file and then:

...
Converting spec/controllers/api/v1/users/media_files_controller_spec.rb
/Users/kain/src/transpec/lib/transpec/converter.rb:99:in `process_method_stub': undefined method `receive_messages_available?' for #<Gem::Version "2.99.0.beta1"> (NoMethodError)
    from /Users/kain/src/transpec/lib/transpec/converter.rb:48:in `block in dispatch_node'
    from /Users/kain/src/transpec/lib/transpec/converter.rb:42:in `each'
    from /Users/kain/src/transpec/lib/transpec/converter.rb:42:in `dispatch_node'
    from /Users/kain/src/transpec/lib/transpec/converter.rb:37:in `block in process'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:62:in `block in each_descendent_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:48:in `block in each_child_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:46:in `each'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:46:in `each_child_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:61:in `each_descendent_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:63:in `block in each_descendent_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:48:in `block in each_child_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:46:in `each'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:46:in `each_child_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:61:in `each_descendent_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:63:in `block in each_descendent_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:48:in `block in each_child_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:46:in `each'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:46:in `each_child_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:61:in `each_descendent_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:63:in `block in each_descendent_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:48:in `block in each_child_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:46:in `each'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:46:in `each_child_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:61:in `each_descendent_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:63:in `block in each_descendent_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:48:in `block in each_child_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:46:in `each'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:46:in `each_child_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:61:in `each_descendent_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:63:in `block in each_descendent_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:48:in `block in each_child_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:46:in `each'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:46:in `each_child_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:61:in `each_descendent_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:63:in `block in each_descendent_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:48:in `block in each_child_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:46:in `each'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:46:in `each_child_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:61:in `each_descendent_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:63:in `block in each_descendent_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:48:in `block in each_child_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:46:in `each'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:46:in `each_child_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:61:in `each_descendent_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:63:in `block in each_descendent_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:48:in `block in each_child_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:46:in `each'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:46:in `each_child_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:61:in `each_descendent_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:63:in `block in each_descendent_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:48:in `block in each_child_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:46:in `each'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:46:in `each_child_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:61:in `each_descendent_node'
    from /Users/kain/src/transpec/lib/transpec/ast/node.rb:74:in `each_node'
    from /Users/kain/src/transpec/lib/transpec/converter.rb:36:in `process'
    from /Users/kain/src/transpec/lib/transpec/base_rewriter.rb:26:in `rewrite'
    from /Users/kain/src/transpec/lib/transpec/base_rewriter.rb:10:in `rewrite_file!'
    from /Users/kain/src/transpec/lib/transpec/cli.rb:66:in `convert_file'
    from /Users/kain/src/transpec/lib/transpec/cli.rb:58:in `block in process'
    from /Users/kain/src/transpec/lib/transpec/cli.rb:57:in `each'
    from /Users/kain/src/transpec/lib/transpec/cli.rb:57:in `process'
    from /Users/kain/src/transpec/lib/transpec/cli.rb:36:in `run'
    from /Users/kain/src/transpec/lib/transpec/cli.rb:18:in `run'
    from /Users/kain/src/transpec/bin/transpec:7:in `<main>'

yujinakayama added a commit that referenced this issue Nov 11, 2013
Gem::Version caches its instances with class variable @@ALL.

Related to #17.
@yujinakayama
Copy link
Owner

Yes, the exception with failure of test is intentional.

I've fixed the error undefined method receive_messages_available? in the branch, please try again :).

@masterkain
Copy link
Author

Thanks, it works now.

I'm running the spec suite and found one error after the conversion on this code (diff):

-        subject.should have(1).error
+        expect(subject.error.).to eq(1)

Should I report other issues I may find in another ticket?

Thanks

yujinakayama added a commit that referenced this issue Nov 11, 2013
Gem::Version caches its instances with class variable @@ALL.

Related to #17.
@yujinakayama
Copy link
Owner

Should I report other issues I may find in another ticket?

Yes, please.

Thanks for your patient reporting!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants