|
1 | 1 | use std::io::Read;
|
2 | 2 | use std::path::Path;
|
| 3 | +use std::str::FromStr; |
3 | 4 |
|
4 |
| -use crate::common::{Config, Debugger}; |
| 5 | +use crate::common::{Config, Debugger, Mode}; |
5 | 6 | use crate::header::{parse_normalization_string, EarlyProps, HeadersCache};
|
6 | 7 |
|
7 | 8 | fn make_test_description<R: Read>(
|
@@ -55,16 +56,23 @@ fn test_parse_normalization_string() {
|
55 | 56 |
|
56 | 57 | #[derive(Default)]
|
57 | 58 | struct ConfigBuilder {
|
| 59 | + mode: Option<String>, |
58 | 60 | channel: Option<String>,
|
59 | 61 | host: Option<String>,
|
60 | 62 | target: Option<String>,
|
61 | 63 | stage_id: Option<String>,
|
62 | 64 | llvm_version: Option<String>,
|
63 | 65 | git_hash: bool,
|
64 | 66 | system_llvm: bool,
|
| 67 | + profiler_support: bool, |
65 | 68 | }
|
66 | 69 |
|
67 | 70 | impl ConfigBuilder {
|
| 71 | + fn mode(&mut self, s: &str) -> &mut Self { |
| 72 | + self.mode = Some(s.to_owned()); |
| 73 | + self |
| 74 | + } |
| 75 | + |
68 | 76 | fn channel(&mut self, s: &str) -> &mut Self {
|
69 | 77 | self.channel = Some(s.to_owned());
|
70 | 78 | self
|
@@ -100,10 +108,16 @@ impl ConfigBuilder {
|
100 | 108 | self
|
101 | 109 | }
|
102 | 110 |
|
| 111 | + fn profiler_support(&mut self, s: bool) -> &mut Self { |
| 112 | + self.profiler_support = s; |
| 113 | + self |
| 114 | + } |
| 115 | + |
103 | 116 | fn build(&mut self) -> Config {
|
104 | 117 | let args = &[
|
105 | 118 | "compiletest",
|
106 |
| - "--mode=ui", |
| 119 | + "--mode", |
| 120 | + self.mode.as_deref().unwrap_or("ui"), |
107 | 121 | "--suite=ui",
|
108 | 122 | "--compile-lib-path=",
|
109 | 123 | "--run-lib-path=",
|
@@ -142,6 +156,9 @@ impl ConfigBuilder {
|
142 | 156 | if self.system_llvm {
|
143 | 157 | args.push("--system-llvm".to_owned());
|
144 | 158 | }
|
| 159 | + if self.profiler_support { |
| 160 | + args.push("--profiler-support".to_owned()); |
| 161 | + } |
145 | 162 |
|
146 | 163 | args.push("--rustc-path".to_string());
|
147 | 164 | // This is a subtle/fragile thing. On rust-lang CI, there is no global
|
@@ -340,6 +357,15 @@ fn sanitizers() {
|
340 | 357 | assert!(check_ignore(&config, "// needs-sanitizer-thread"));
|
341 | 358 | }
|
342 | 359 |
|
| 360 | +#[test] |
| 361 | +fn profiler_support() { |
| 362 | + let config: Config = cfg().profiler_support(false).build(); |
| 363 | + assert!(check_ignore(&config, "// needs-profiler-support")); |
| 364 | + |
| 365 | + let config: Config = cfg().profiler_support(true).build(); |
| 366 | + assert!(!check_ignore(&config, "// needs-profiler-support")); |
| 367 | +} |
| 368 | + |
343 | 369 | #[test]
|
344 | 370 | fn asm_support() {
|
345 | 371 | let asms = [
|
@@ -530,3 +556,17 @@ fn families() {
|
530 | 556 | assert!(!check_ignore(&config, &format!("// ignore-{other}")));
|
531 | 557 | }
|
532 | 558 | }
|
| 559 | + |
| 560 | +#[test] |
| 561 | +fn ignore_mode() { |
| 562 | + for &mode in Mode::STR_VARIANTS { |
| 563 | + // Indicate profiler support so that "coverage-run" tests aren't skipped. |
| 564 | + let config: Config = cfg().mode(mode).profiler_support(true).build(); |
| 565 | + let other = if mode == "coverage-run" { "coverage-map" } else { "coverage-run" }; |
| 566 | + assert_ne!(mode, other); |
| 567 | + assert_eq!(config.mode, Mode::from_str(mode).unwrap()); |
| 568 | + assert_ne!(config.mode, Mode::from_str(other).unwrap()); |
| 569 | + assert!(check_ignore(&config, &format!("// ignore-mode-{mode}"))); |
| 570 | + assert!(!check_ignore(&config, &format!("// ignore-mode-{other}"))); |
| 571 | + } |
| 572 | +} |
0 commit comments