Skip to content

Commit 2bc8c82

Browse files
authored
Merge pull request #785 from rust-embedded/regress-url
svd2rust-regress: allow downloading arbitrary svd with `--url`
2 parents 76cd523 + 1075da7 commit 2bc8c82

File tree

2 files changed

+33
-8
lines changed

2 files changed

+33
-8
lines changed

ci/svd2rust-regress/src/diff.rs

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@ pub struct Diffing {
6464
#[clap(long, short = 'P')]
6565
pub use_pager_directly: bool,
6666

67+
/// URL for SVD to download
68+
#[clap(global = true, long)]
69+
pub url: Option<String>,
70+
6771
#[clap(last = true)]
6872
pub last_args: Option<String>,
6973
}
@@ -176,12 +180,32 @@ impl Diffing {
176180
}
177181
})
178182
.collect::<Vec<_>>();
179-
let test = match (tests.len(), self.sub.as_ref()) {
180-
(1, _) => tests[0],
181-
(_, Some(DiffingMode::Pr { .. })) => tests
183+
184+
let test = match (tests.len(), self.sub.as_ref(), self.url.as_ref()) {
185+
(1, _, None) => tests[0].clone(),
186+
(_, Some(DiffingMode::Pr { .. }), None) => tests
182187
.iter()
183188
.find(|t| t.chip == "STM32F103")
184-
.unwrap_or(&tests[0]),
189+
.map(|t| (*t).clone())
190+
.unwrap_or_else(|| tests[0].clone()),
191+
(_, _, Some(url)) => crate::tests::TestCase {
192+
arch: self
193+
.arch
194+
.clone()
195+
.map(|s| svd2rust::Target::parse(&s))
196+
.transpose()?
197+
.unwrap_or_default(),
198+
mfgr: crate::tests::Manufacturer::Unknown,
199+
chip: url
200+
.rsplit('/')
201+
.next()
202+
.and_then(|file| file.split('.').next())
203+
.ok_or_else(|| anyhow::anyhow!("couldn't get chip name from url"))?
204+
.to_owned(),
205+
svd_url: Some(url.to_owned()),
206+
should_pass: true,
207+
run_when: crate::tests::RunWhen::Always,
208+
},
185209
_ => {
186210
let error = anyhow::anyhow!("diff requires exactly one test case");
187211
let len = tests.len();

ci/svd2rust-regress/src/tests.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ pub enum Manufacturer {
2323
SiFive,
2424
TexasInstruments,
2525
Espressif,
26+
Unknown,
2627
}
2728

2829
impl Manufacturer {
@@ -54,7 +55,7 @@ impl std::fmt::Display for Manufacturer {
5455
}
5556
}
5657

57-
#[derive(Debug, serde::Serialize, serde::Deserialize, Default)]
58+
#[derive(Debug, serde::Serialize, serde::Deserialize, Default, Clone, Copy)]
5859
#[serde(rename_all = "kebab-case")]
5960
pub enum RunWhen {
6061
#[default]
@@ -65,17 +66,17 @@ pub enum RunWhen {
6566
Never,
6667
}
6768

68-
#[derive(serde::Serialize, serde::Deserialize)]
69+
#[derive(serde::Serialize, serde::Deserialize, Clone)]
6970
pub struct TestCase {
7071
pub arch: Target,
7172
pub mfgr: Manufacturer,
7273
pub chip: String,
7374
#[serde(default, skip_serializing_if = "Option::is_none")]
74-
svd_url: Option<String>,
75+
pub svd_url: Option<String>,
7576
#[serde(default = "true_")]
7677
pub should_pass: bool,
7778
#[serde(default)]
78-
run_when: RunWhen,
79+
pub run_when: RunWhen,
7980
}
8081

8182
fn true_() -> bool {

0 commit comments

Comments
 (0)