type Ctx = UsualCtx;
impl Ctx {
- #[throws(Explode)]
- fn check_library_item(&mut self, itemlib: &str, item: &str,
- desc: &str) {
- let ds = self.su().ds.also(&[
- ("itemlib", itemlib),
- ("item", item ),
- ]);
- let command = ds.ss("library-add --lib @itemlib@ @table@ @item@")?;
- let added = self.some_library_add(&command)?;
- assert_eq!( added.len(), 1 );
-
- let output: String = self.otter(&ds.ss("list-pieces @table@")?)?.into();
- assert_eq!( Regex::new(
- &format!(
- r#"(?m)(?:[^\w-]|^){}[^\w-].*\W{}(?:\W|$)"#,
- item, desc,
- )
- )?
- .find_iter(&output).count(),
- 1,
- "got: {}", &output);
- }
-
#[throws(Explode)]
fn bundles(&mut self) {
- let bundle_file = self.su().ds.example_bundle();
- let ds = self.su().ds.also(&[("bundle", &bundle_file)]);
- self.otter(&ds.ss("upload-bundle @table@ @bundle@")?)?;
- let mut bundles = self.otter(&ds.ss("list-bundles @table@")?)?;
- let bundles = String::from(&mut bundles);
- assert!(bundles.starts_with("00000.zip Loaded"));
- self.otter(&ds.ss("download-bundle @table@ 0")?)?;
- let st = Command::new("cmp").args(&[&bundle_file, "00000.zip"]).status()?;
- if ! st.success() { panic!("cmp failed {}", st) }
-
- self.check_library_item("lemon","example-lemon","a lemon")?;
-
- self.stop_and_restart_server()?;
-
- let id =
- self.su().mgmt_conn().list_pieces()?
- .0.iter()
- .find(|pi| pi.itemname.as_str() == "example-lemon")
- .unwrap()
- .piece;
- self.su().mgmt_conn().alter_game(vec![MGI::DeletePiece(id)], None)?;
-
- self.check_library_item("lemon","example-lemon","a lemon")?;
-
- self.otter(&ds.ss("clear-game @table@")?)?;
- self.reset_game(&ds.ss("reset @table@ demo")?)?;
+ self.upload_and_check_bundle("lemon","example-lemon","a lemon")?;
}
}
assert_eq!(st.signal(), Some(nix::sys::signal::SIGTERM as i32));
su.restart_gameserver()?;
}
+
+ #[throws(Explode)]
+ pub fn check_library_item(&mut self, itemlib: &str, item: &str,
+ desc: &str) {
+ let ds = self.su().ds.also(&[
+ ("itemlib", itemlib),
+ ("item", item ),
+ ]);
+ let command = ds.ss("library-add --lib @itemlib@ @table@ @item@")?;
+ let added = self.some_library_add(&command)?;
+ assert_eq!( added.len(), 1 );
+
+ let output: String = self.otter(&ds.ss("list-pieces @table@")?)?.into();
+ assert_eq!( Regex::new(
+ &format!(
+ r#"(?m)(?:[^\w-]|^){}[^\w-].*\W{}(?:\W|$)"#,
+ item, desc,
+ )
+ )?
+ .find_iter(&output).count(),
+ 1,
+ "got: {}", &output);
+ }
+
+ #[throws(Explode)]
+ pub fn upload_and_check_bundle(&mut self,
+ libname: &str, item: &str,
+ desc: &str)
+ {
+ let bundle_file = self.su().ds.example_bundle();
+ let ds = self.su().ds.also(&[("bundle", &bundle_file)]);
+ self.otter(&ds.ss("upload-bundle @table@ @bundle@")?)?;
+ let mut bundles = self.otter(&ds.ss("list-bundles @table@")?)?;
+ let bundles = String::from(&mut bundles);
+ assert!(bundles.starts_with("00000.zip Loaded"));
+ self.otter(&ds.ss("download-bundle @table@ 0")?)?;
+ let st = Command::new("cmp").args(&[&bundle_file, "00000.zip"]).status()?;
+ if ! st.success() { panic!("cmp failed {}", st) }
+
+ self.check_library_item(libname,item,desc)?;
+
+ self.stop_and_restart_server()?;
+
+ let id =
+ self.su().mgmt_conn().list_pieces()?
+ .0.iter()
+ .find(|pi| pi.itemname.as_str() == item)
+ .unwrap()
+ .piece;
+ self.su().mgmt_conn().alter_game(vec![MGI::DeletePiece(id)], None)?;
+
+ self.check_library_item(libname,item,desc)?;
+
+ self.otter(&ds.ss("clear-game @table@")?)?;
+ self.reset_game(&ds.ss("reset @table@ demo")?)?;
+ }
}
impl UsualCtx {