Skip to content

Commit b090e96

Browse files
iankshsbt
authored andcommitted
[rust gem] Make cargo test work by default
1 parent 936827c commit b090e96

File tree

7 files changed

+50
-1
lines changed

7 files changed

+50
-1
lines changed

Manifest.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,7 @@ bundler/lib/bundler/templates/newgem/bin/setup.tt
221221
bundler/lib/bundler/templates/newgem/circleci/config.yml.tt
222222
bundler/lib/bundler/templates/newgem/exe/newgem.tt
223223
bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt
224+
bundler/lib/bundler/templates/newgem/ext/newgem/build.rs.tt
224225
bundler/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt
225226
bundler/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt
226227
bundler/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt

bundler/lib/bundler/cli/gem.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,7 @@ def run
205205
templates.merge!(
206206
"Cargo.toml.tt" => "Cargo.toml",
207207
"ext/newgem/Cargo.toml.tt" => "ext/#{name}/Cargo.toml",
208+
"ext/newgem/build.rs.tt" => "ext/#{name}/build.rs",
208209
"ext/newgem/extconf-rust.rb.tt" => "ext/#{name}/extconf.rb",
209210
"ext/newgem/src/lib.rs.tt" => "ext/#{name}/src/lib.rs",
210211
)

bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,11 @@ publish = false
1212
crate-type = ["cdylib"]
1313

1414
[dependencies]
15-
magnus = { version = "0.6.2" }
15+
magnus = { version = "0.6.3" }
16+
rb-sys = { version = "0.9", features = ["stable-api-compiled-fallback"] }
17+
18+
[build-dependencies]
19+
rb-sys-env = "0.1.2"
20+
21+
[dev-dependencies]
22+
rb-sys-test-helpers = { version = "0.2.0" }
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pub fn main() -> Result<(), Box<dyn std::error::Error>> {
2+
let _rb_env = rb_sys_env::activate()?;
3+
4+
Ok(())
5+
}

bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,14 @@ fn init(ruby: &Ruby) -> Result<(), Error> {
1010
module.define_singleton_method("hello", function!(hello, 1))?;
1111
Ok(())
1212
}
13+
14+
#[cfg(test)]
15+
mod tests {
16+
use rb_sys_test_helpers::ruby_test;
17+
18+
#[ruby_test]
19+
fn test_hello() {
20+
use magnus::RString;
21+
assert_eq!(12, RString::new("rust ❤️ ruby").length())
22+
}
23+
}

bundler/spec/commands/newgem_spec.rb

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1454,6 +1454,7 @@ def create_temporary_dir(dir)
14541454
expect(bundled_app("#{gem_name}/ext/#{gem_name}/Cargo.toml")).to exist
14551455
expect(bundled_app("#{gem_name}/ext/#{gem_name}/extconf.rb")).to exist
14561456
expect(bundled_app("#{gem_name}/ext/#{gem_name}/src/lib.rs")).to exist
1457+
expect(bundled_app("#{gem_name}/ext/#{gem_name}/build.rs")).to exist
14571458
end
14581459

14591460
it "includes rake-compiler, rb_sys gems and required_rubygems_version constraint" do
@@ -1482,6 +1483,28 @@ def create_temporary_dir(dir)
14821483

14831484
expect(bundled_app("#{gem_name}/Rakefile").read).to eq(rakefile)
14841485
end
1486+
1487+
it "configures the crate such that `cargo test` works", :ruby_repo, :mri_only do
1488+
env = setup_rust_env
1489+
gem_path = bundled_app(gem_name)
1490+
result = sys_exec("cargo test", env: env, dir: gem_path)
1491+
1492+
expect(result).to include("1 passed")
1493+
end
1494+
1495+
def setup_rust_env
1496+
skip "rust toolchain of mingw is broken" if RUBY_PLATFORM.match?("mingw")
1497+
1498+
env = {
1499+
"CARGO_HOME" => ENV.fetch("CARGO_HOME", File.join(ENV["HOME"], ".cargo")),
1500+
"RUSTUP_HOME" => ENV.fetch("RUSTUP_HOME", File.join(ENV["HOME"], ".rustup")),
1501+
"RUSTUP_TOOLCHAIN" => ENV.fetch("RUSTUP_TOOLCHAIN", "stable"),
1502+
}
1503+
1504+
system(env, "cargo", "-V", out: IO::NULL, err: [:child, :out])
1505+
skip "cargo not present" unless $?.success?
1506+
env
1507+
end
14851508
end
14861509
end
14871510

bundler/spec/support/filters.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ def inspect
3333
config.filter_run_excluding jruby_only: RUBY_ENGINE != "jruby"
3434
config.filter_run_excluding truffleruby_only: RUBY_ENGINE != "truffleruby"
3535
config.filter_run_excluding man: Gem.win_platform?
36+
config.filter_run_excluding mri_only: RUBY_ENGINE != "ruby"
3637

3738
config.filter_run_when_matching :focus unless ENV["CI"]
3839
end

0 commit comments

Comments
 (0)