about summary refs log tree commit diff
diff options
context:
space:
mode:
authoronur-ozkan <work@onurozkan.dev>2025-01-09 11:35:13 +0300
committeronur-ozkan <work@onurozkan.dev>2025-01-12 08:43:16 +0300
commitcacb4fe93a5c75eb4f69774a4ebf6d1549c95201 (patch)
treee81de84df188ffa2fe7b5d9c017dee367f6f9123
parent9e1c9fd65417b04c3a0b63a4e0f8ffba50293867 (diff)
downloadrust-cacb4fe93a5c75eb4f69774a4ebf6d1549c95201.tar.gz
rust-cacb4fe93a5c75eb4f69774a4ebf6d1549c95201.zip
add test coverage for `build_stamp` implementation
Signed-off-by: onur-ozkan <work@onurozkan.dev>
-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();
+}