unittest load save storage
parent
644f0b4c8a
commit
0f6f4edf88
36
src/main.rs
36
src/main.rs
|
|
@ -1,5 +1,5 @@
|
||||||
use serde::{Serialize, Deserialize};
|
use serde::{Serialize, Deserialize};
|
||||||
use std::io::Read;
|
use std::io::{Read, Write};
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
|
@ -18,6 +18,21 @@ struct Add {
|
||||||
tag: String,
|
tag: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn save_storage(path: String, storage: Storage) -> Result<(), String> {
|
||||||
|
match File::create(path.clone()) {
|
||||||
|
Ok(mut writer) => _save_storage(&mut writer, storage),
|
||||||
|
Err(reason) => Err(format!("failed to open {} to save storage: {}", path, reason)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn _save_storage(writer: &mut dyn Write, storage: Storage) -> Result<(), String> {
|
||||||
|
let mut w = serde_yaml::Serializer::new(writer);
|
||||||
|
match storage.serialize(&mut w) {
|
||||||
|
Ok(_) => Ok(()),
|
||||||
|
Err(reason) => Err(format!("failed to serialize storage: {}", reason)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn load_storage(path: String) -> Result<Storage, String> {
|
fn load_storage(path: String) -> Result<Storage, String> {
|
||||||
match File::open(path.clone()) {
|
match File::open(path.clone()) {
|
||||||
Ok(mut reader) => _load_storage(&mut reader),
|
Ok(mut reader) => _load_storage(&mut reader),
|
||||||
|
|
@ -37,19 +52,28 @@ mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_load_storage() {
|
fn test_save_load_empty() {
|
||||||
let got = _load_storage(&mut "adds: []".as_bytes()).expect("failed to parse 'adds: []' storage");
|
let got = _load_storage(&mut "adds: []".as_bytes()).expect("failed to parse 'adds: []' storage");
|
||||||
assert_eq!(got, Storage{adds: vec![]});
|
assert_eq!(got, Storage{adds: vec![]});
|
||||||
|
|
||||||
|
let mut w = vec![];
|
||||||
|
_save_storage(&mut w, got).expect("failed saving storage to writer");
|
||||||
|
assert_eq!(String::from_utf8(w).unwrap(), "adds: []\n".to_string());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_testdata_standalone_yaml() {
|
fn test_testdata_standalone_yaml() {
|
||||||
assert_eq!(
|
let want = Storage{adds: vec![
|
||||||
load_storage("./src/testdata/standalone.yaml".to_string()).expect("cant load standalone.yaml"),
|
|
||||||
Storage{adds: vec![
|
|
||||||
Add{t: 1, add: "def".to_string(), tag: "abc".to_string()},
|
Add{t: 1, add: "def".to_string(), tag: "abc".to_string()},
|
||||||
Add{t: 2, add: "ghi".to_string(), tag: "".to_string()},
|
Add{t: 2, add: "ghi".to_string(), tag: "".to_string()},
|
||||||
]},
|
]};
|
||||||
|
assert_eq!(
|
||||||
|
load_storage("./src/testdata/standalone.yaml".to_string()).expect("cant load standalone.yaml"),
|
||||||
|
want,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
let mut w = vec![];
|
||||||
|
_save_storage(&mut w, want).expect("failed saving storage to writer");
|
||||||
|
assert_eq!(String::from_utf8(w).unwrap(), "adds:\n- t: 1\n add: def\n tag: abc\n- t: 2\n add: ghi\n tag: ''\n".to_string());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue