about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/bootstrap/src/utils/build_stamp.rs3
-rw-r--r--src/bootstrap/src/utils/build_stamp/tests.rs44
2 files changed, 47 insertions, 0 deletions
diff --git a/src/bootstrap/src/utils/build_stamp.rs b/src/bootstrap/src/utils/build_stamp.rs
index 5450558c86e..d76b395709a 100644
--- a/src/bootstrap/src/utils/build_stamp.rs
+++ b/src/bootstrap/src/utils/build_stamp.rs
@@ -10,6 +10,9 @@ use crate::core::config::TargetSelection;
 use crate::utils::helpers::mtime;
 use crate::{Compiler, Mode, t};
 
+#[cfg(test)]
+mod tests;
+
 /// Manages a stamp file to track build state. The file is created in the given
 /// directory and can have custom content and name.
 #[derive(Clone)]
diff --git a/src/bootstrap/src/utils/build_stamp/tests.rs b/src/bootstrap/src/utils/build_stamp/tests.rs
new file mode 100644
index 00000000000..4e8a4307844
--- /dev/null
+++ b/src/bootstrap/src/utils/build_stamp/tests.rs
@@ -0,0 +1,44 @@
+use std::path::PathBuf;
+
+use crate::{BuildStamp, Config, Flags};
+
+fn temp_dir() -> PathBuf {
+    let config =
+        Config::parse(Flags::parse(&["check".to_owned(), "--config=/does/not/exist".to_owned()]));
+    config.tempdir()
+}
+
+#[test]
+#[should_panic(expected = "prefix can not start or end with '.'")]
+fn test_with_invalid_prefix() {
+    let dir = temp_dir();
+    BuildStamp::new(&dir).with_prefix(".invalid");
+}
+
+#[test]
+#[should_panic(expected = "prefix can not start or end with '.'")]
+fn test_with_invalid_prefix2() {
+    let dir = temp_dir();
+    BuildStamp::new(&dir).with_prefix("invalid.");
+}
+
+#[test]
+fn test_is_up_to_date() {
+    let dir = temp_dir();
+
+    let mut build_stamp = BuildStamp::new(&dir).with_stamp("v1.0.0");
+    build_stamp.write().unwrap();
+
+    assert!(
+        build_stamp.is_up_to_date(),
+        "Expected stamp file to be up-to-date, but contents do not match the expected value."
+    );
+
+    build_stamp.stamp = "dummy value".to_owned();
+    assert!(
+        !build_stamp.is_up_to_date(),
+        "Stamp should no longer be up-to-date as we changed its content right above."
+    );
+
+    build_stamp.remove().unwrap();
+}