From f9ae4bf05f36bc453939f1052be51332fc4d2e42 Mon Sep 17 00:00:00 2001 From: Alex Orlenko Date: Wed, 16 Oct 2024 16:00:01 +0100 Subject: [PATCH] Update table tests --- src/table.rs | 1 + tests/table.rs | 124 ++++++++++++++++++++++++++----------------------- 2 files changed, 66 insertions(+), 59 deletions(-) diff --git a/src/table.rs b/src/table.rs index c8fdcf2..01656b4 100644 --- a/src/table.rs +++ b/src/table.rs @@ -511,6 +511,7 @@ impl Table { #[doc(hidden)] #[deprecated(since = "0.10.0", note = "please use `metatable` instead")] + #[cfg(not(tarpaulin_include))] pub fn get_metatable(&self) -> Option { self.metatable() } diff --git a/tests/table.rs b/tests/table.rs index e6410e5..5cb3f47 100644 --- a/tests/table.rs +++ b/tests/table.rs @@ -1,4 +1,4 @@ -use mlua::{Error, Lua, Nil, ObjectLike, Result, Table, Value}; +use mlua::{Error, Lua, ObjectLike, Result, Table, Value}; #[test] fn test_globals_set_get() -> Result<()> { @@ -10,6 +10,8 @@ fn test_globals_set_get() -> Result<()> { assert_eq!(globals.get::("foo")?, "bar"); assert_eq!(globals.get::("baz")?, "baf"); + lua.load(r#"assert(foo == "bar")"#).exec().unwrap(); + Ok(()) } @@ -19,16 +21,6 @@ fn test_table() -> Result<()> { let globals = lua.globals(); - globals.set("table", lua.create_table()?)?; - let table1: Table = globals.get("table")?; - let table2: Table = globals.get("table")?; - - table1.set("foo", "bar")?; - table2.set("baz", "baf")?; - - assert_eq!(table2.get::("foo")?, "bar"); - assert_eq!(table1.get::("baz")?, "baf"); - lua.load( r#" table1 = {1, 2, 3, 4, 5} @@ -39,29 +31,26 @@ fn test_table() -> Result<()> { .exec()?; let table1 = globals.get::
("table1")?; - let table2 = globals.get::
("table2")?; - let table3 = globals.get::
("table3")?; - assert_eq!(table1.len()?, 5); assert!(!table1.is_empty()); assert_eq!( - table1.clone().pairs().collect::>>()?, + table1.pairs().collect::>>()?, vec![(1, 1), (2, 2), (3, 3), (4, 4), (5, 5)] ); assert_eq!( - table1.clone().sequence_values().collect::>>()?, + table1.sequence_values().collect::>>()?, vec![1, 2, 3, 4, 5] ); assert_eq!(table1, [1, 2, 3, 4, 5]); + assert_eq!(table1, [1, 2, 3, 4, 5].as_slice()); + let table2 = globals.get::
("table2")?; assert_eq!(table2.len()?, 0); assert!(table2.is_empty()); - assert_eq!( - table2.clone().pairs().collect::>>()?, - vec![] - ); + assert_eq!(table2.pairs().collect::>>()?, vec![]); assert_eq!(table2, [0; 0]); + let table3 = globals.get::
("table3")?; // sequence_values should only iterate until the first border assert_eq!(table3, [1, 2]); assert_eq!( @@ -69,26 +58,6 @@ fn test_table() -> Result<()> { vec![1, 2] ); - globals.set("table4", lua.create_sequence_from(vec![1, 2, 3, 4, 5])?)?; - let table4 = globals.get::
("table4")?; - assert_eq!( - table4.clone().pairs().collect::>>()?, - vec![(1, 1), (2, 2), (3, 3), (4, 4), (5, 5)] - ); - - table4.raw_insert(4, 35)?; - table4.raw_insert(7, 7)?; - assert_eq!( - table4.clone().pairs().collect::>>()?, - vec![(1, 1), (2, 2), (3, 3), (4, 35), (5, 4), (6, 5), (7, 7)] - ); - - table4.raw_remove(1)?; - assert_eq!( - table4.clone().pairs().collect::>>()?, - vec![(1, 2), (2, 3), (3, 35), (4, 4), (5, 5), (6, 7)] - ); - Ok(()) } @@ -97,7 +66,7 @@ fn test_table_push_pop() -> Result<()> { let lua = Lua::new(); // Test raw access - let table1 = lua.create_sequence_from(vec![123])?; + let table1 = lua.create_sequence_from([123])?; table1.raw_push(321)?; assert_eq!(table1, [123, 321]); assert_eq!(table1.raw_pop::()?, 321); @@ -123,10 +92,7 @@ fn test_table_push_pop() -> Result<()> { table2.push(345)?; assert_eq!(table2.len()?, 2); assert_eq!( - table2 - .clone() - .sequence_values::() - .collect::>>()?, + table2.sequence_values::().collect::>>()?, vec![] ); assert_eq!(table2.pop::()?, 345); @@ -137,22 +103,53 @@ fn test_table_push_pop() -> Result<()> { Ok(()) } +#[test] +fn test_table_insert_remove() -> Result<()> { + let lua = Lua::new(); + + let globals = lua.globals(); + + globals.set("table4", [1, 2, 3, 4, 5])?; + let table4 = globals.get::
("table4")?; + assert_eq!( + table4.pairs().collect::>>()?, + vec![(1, 1), (2, 2), (3, 3), (4, 4), (5, 5)] + ); + table4.raw_insert(4, 35)?; + table4.raw_insert(7, 7)?; + assert_eq!( + table4.pairs().collect::>>()?, + vec![(1, 1), (2, 2), (3, 3), (4, 35), (5, 4), (6, 5), (7, 7)] + ); + table4.raw_remove(1)?; + assert_eq!( + table4.pairs().collect::>>()?, + vec![(1, 2), (2, 3), (3, 35), (4, 4), (5, 5), (6, 7)] + ); + + // Wrong index, tables are 1-indexed + assert!(table4.raw_insert(0, "123").is_err()); + + Ok(()) +} + #[test] fn test_table_clear() -> Result<()> { let lua = Lua::new(); + let t = lua.create_table()?; + // Check readonly error #[cfg(feature = "luau")] { - let t = lua.create_table()?; t.set_readonly(true); assert!(matches!( t.clear(), Err(Error::RuntimeError(err)) if err.contains("attempt to modify a readonly table") )); + t.set_readonly(false); } - let t = lua.create_table()?; // Set array and hash parts t.push("abc")?; t.push("bcd")?; @@ -217,15 +214,14 @@ fn test_table_pairs() -> Result<()> { ) .eval::
()?; - let table2 = table.clone(); for (i, kv) in table.pairs::().enumerate() { let (k, _v) = kv.unwrap(); match i { // Try to add a new key - 0 => table2.set("new_key", "new_value")?, + 0 => table.set("new_key", "new_value")?, // Try to delete the 2nd key 1 => { - table2.set(k, Value::Nil)?; + table.set(k, Value::Nil)?; lua.gc_collect()?; } _ => {} @@ -304,21 +300,15 @@ fn test_metatable() -> Result<()> { metatable.set("__index", lua.create_function(|_, ()| Ok("index_value"))?)?; table.set_metatable(Some(metatable)); assert_eq!(table.get::("any_key")?, "index_value"); - match table.raw_get::("any_key")? { - Nil => {} - _ => panic!(), - } + assert_eq!(table.raw_get::("any_key")?, Value::Nil); table.set_metatable(None); - match table.get::("any_key")? { - Nil => {} - _ => panic!(), - }; + assert_eq!(table.get::("any_key")?, Value::Nil); Ok(()) } #[test] -fn test_table_eq() -> Result<()> { +fn test_table_equals() -> Result<()> { let lua = Lua::new(); let globals = lua.globals(); @@ -358,6 +348,7 @@ fn test_table_pointer() -> Result<()> { let table1 = lua.create_table()?; let table2 = lua.create_table()?; + // Clone should not create a new table assert_eq!(table1.to_pointer(), table1.clone().to_pointer()); assert_ne!(table1.to_pointer(), table2.to_pointer()); @@ -398,6 +389,21 @@ fn test_table_error() -> Result<()> { Ok(()) } +#[test] +fn test_table_fmt() -> Result<()> { + let lua = Lua::new(); + + let table = lua.load(r#"{1, 2, 3, a = 5, b = { 6 }}"#).eval::
()?; + // assert_eq!(format!("{:?}", table), "{1, 2, 3, a = 5, b = {6}}"); + assert!(format!("{table:?}").starts_with("Table(Ref(")); + assert_eq!( + format!("{table:#?}"), + "{\n [1] = 1,\n [2] = 2,\n [3] = 3,\n [\"a\"] = 5,\n [\"b\"] = {\n [1] = 6,\n },\n}" + ); + + Ok(()) +} + #[test] fn test_table_object_like() -> Result<()> { let lua = Lua::new();