aboutsummaryrefslogtreecommitdiff
path: root/xtask/src/command.rs
diff options
context:
space:
mode:
authorHenrik Tjäder <henrik@tjaders.com>2023-02-28 23:55:02 +0100
committerHenrik Tjäder <henrik@tjaders.com>2023-03-01 00:35:27 +0100
commita575266ec2da56fb202de35948650c7f11a2909d (patch)
treee045e59180d872902661911f97f0eaa2fbc86508 /xtask/src/command.rs
parent14457da4f831c57e7a2b1c54e1c37adb8354c8d5 (diff)
xtask: Add tests, clean a bit
Diffstat (limited to 'xtask/src/command.rs')
-rw-r--r--xtask/src/command.rs86
1 files changed, 52 insertions, 34 deletions
diff --git a/xtask/src/command.rs b/xtask/src/command.rs
index e43c936..9f87522 100644
--- a/xtask/src/command.rs
+++ b/xtask/src/command.rs
@@ -1,4 +1,4 @@
-use crate::{debug, RunResult, Sizearguments, TestRunError};
+use crate::{debug, Package, RunResult, Sizearguments, TestRunError};
use core::fmt;
use os_pipe::pipe;
use std::{fs::File, io::Read, process::Command};
@@ -18,58 +18,63 @@ pub enum CargoCommand<'a> {
cargoarg: &'a Option<&'a str>,
example: &'a str,
target: &'a str,
- features: Option<&'a str>,
+ features: Option<String>,
mode: BuildMode,
},
Qemu {
cargoarg: &'a Option<&'a str>,
example: &'a str,
target: &'a str,
- features: Option<&'a str>,
+ features: Option<String>,
mode: BuildMode,
},
ExampleBuild {
cargoarg: &'a Option<&'a str>,
example: &'a str,
target: &'a str,
- features: Option<&'a str>,
+ features: Option<String>,
mode: BuildMode,
},
ExampleCheck {
cargoarg: &'a Option<&'a str>,
example: &'a str,
target: &'a str,
- features: Option<&'a str>,
+ features: Option<String>,
mode: BuildMode,
},
Build {
cargoarg: &'a Option<&'a str>,
- package: Vec<String>,
+ package: Option<Package>,
target: &'a str,
- features: Option<&'a str>,
+ features: Option<String>,
mode: BuildMode,
},
Check {
cargoarg: &'a Option<&'a str>,
- package: Vec<String>,
+ package: Option<Package>,
target: &'a str,
- features: Option<&'a str>,
+ features: Option<String>,
mode: BuildMode,
},
Clippy {
cargoarg: &'a Option<&'a str>,
- package: Vec<String>,
+ package: Option<Package>,
target: &'a str,
- features: Option<&'a str>,
+ features: Option<String>,
},
Format {
cargoarg: &'a Option<&'a str>,
- package: Vec<String>,
+ package: Option<Package>,
check_only: bool,
},
Doc {
cargoarg: &'a Option<&'a str>,
- features: Option<&'a str>,
+ features: Option<String>,
+ },
+ Test {
+ package: Option<Package>,
+ features: Option<String>,
+ test: Option<String>,
},
Book {
mdbookarg: &'a Option<&'a str>,
@@ -78,7 +83,7 @@ pub enum CargoCommand<'a> {
cargoarg: &'a Option<&'a str>,
example: &'a str,
target: &'a str,
- features: Option<&'a str>,
+ features: Option<String>,
mode: BuildMode,
arguments: Option<Sizearguments>,
},
@@ -95,8 +100,7 @@ impl<'a> CargoCommand<'a> {
CargoCommand::Format { .. } => "fmt",
CargoCommand::Doc { .. } => "doc",
CargoCommand::Book { .. } => "build",
- // TODO
- // CargoCommand::Test { .. } => "test",
+ CargoCommand::Test { .. } => "test",
}
}
pub fn command(&self) -> &str {
@@ -110,10 +114,9 @@ impl<'a> CargoCommand<'a> {
| CargoCommand::ExampleSize { .. }
| CargoCommand::Clippy { .. }
| CargoCommand::Format { .. }
+ | CargoCommand::Test { .. }
| CargoCommand::Doc { .. } => "cargo",
CargoCommand::Book { .. } => "mdbook",
- // TODO
- // CargoCommand::Test { .. } => "test",
}
}
@@ -175,10 +178,9 @@ impl<'a> CargoCommand<'a> {
}
args.extend_from_slice(&[self.name(), "--target", target]);
- if !package.is_empty() {
- for package in package {
- args.extend_from_slice(&["--package", package]);
- }
+
+ if let Some(package) = package {
+ args.extend_from_slice(&["--package", package.to_string()]);
}
if let Some(feature) = features {
@@ -201,10 +203,9 @@ impl<'a> CargoCommand<'a> {
args.extend_from_slice(&[cargoarg]);
}
args.extend_from_slice(&[self.name(), "--target", target]);
- if !package.is_empty() {
- for package in package {
- args.extend_from_slice(&["--package", package]);
- }
+
+ if let Some(package) = package {
+ args.extend_from_slice(&["--package", package.to_string()]);
}
if let Some(feature) = features {
@@ -227,10 +228,9 @@ impl<'a> CargoCommand<'a> {
}
args.extend_from_slice(&[self.name(), "--target", target]);
- if !package.is_empty() {
- for package in package {
- args.extend_from_slice(&["--package", package]);
- }
+
+ if let Some(package) = package {
+ args.extend_from_slice(&["--package", package.to_string()]);
}
if let Some(feature) = features {
@@ -251,6 +251,26 @@ impl<'a> CargoCommand<'a> {
}
args
}
+ CargoCommand::Test {
+ package,
+ features,
+ test,
+ } => {
+ let mut args = vec!["+nightly"];
+ args.extend_from_slice(&[self.name()]);
+
+ if let Some(package) = package {
+ args.extend_from_slice(&["--package", package.to_string()]);
+ }
+
+ if let Some(feature) = features {
+ args.extend_from_slice(&["--features", feature]);
+ }
+ if let Some(test) = test {
+ args.extend_from_slice(&["--test", test]);
+ }
+ args
+ }
CargoCommand::Book { mdbookarg } => {
let mut args = vec![];
@@ -273,10 +293,8 @@ impl<'a> CargoCommand<'a> {
args.extend_from_slice(&[cargoarg]);
}
- if !package.is_empty() {
- for package in package {
- args.extend_from_slice(&["--package", package]);
- }
+ if let Some(package) = package {
+ args.extend_from_slice(&["--package", package.to_string()]);
}
if *check_only {
args.extend_from_slice(&["--check"]);