Skip to content

Commit f9ae4bf

Browse files
committed
Update table tests
1 parent 9e16e18 commit f9ae4bf

File tree

2 files changed

+66
-59
lines changed

2 files changed

+66
-59
lines changed

src/table.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -511,6 +511,7 @@ impl Table {
511511

512512
#[doc(hidden)]
513513
#[deprecated(since = "0.10.0", note = "please use `metatable` instead")]
514+
#[cfg(not(tarpaulin_include))]
514515
pub fn get_metatable(&self) -> Option<Table> {
515516
self.metatable()
516517
}

tests/table.rs

Lines changed: 65 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use mlua::{Error, Lua, Nil, ObjectLike, Result, Table, Value};
1+
use mlua::{Error, Lua, ObjectLike, Result, Table, Value};
22

33
#[test]
44
fn test_globals_set_get() -> Result<()> {
@@ -10,6 +10,8 @@ fn test_globals_set_get() -> Result<()> {
1010
assert_eq!(globals.get::<String>("foo")?, "bar");
1111
assert_eq!(globals.get::<String>("baz")?, "baf");
1212

13+
lua.load(r#"assert(foo == "bar")"#).exec().unwrap();
14+
1315
Ok(())
1416
}
1517

@@ -19,16 +21,6 @@ fn test_table() -> Result<()> {
1921

2022
let globals = lua.globals();
2123

22-
globals.set("table", lua.create_table()?)?;
23-
let table1: Table = globals.get("table")?;
24-
let table2: Table = globals.get("table")?;
25-
26-
table1.set("foo", "bar")?;
27-
table2.set("baz", "baf")?;
28-
29-
assert_eq!(table2.get::<String>("foo")?, "bar");
30-
assert_eq!(table1.get::<String>("baz")?, "baf");
31-
3224
lua.load(
3325
r#"
3426
table1 = {1, 2, 3, 4, 5}
@@ -39,56 +31,33 @@ fn test_table() -> Result<()> {
3931
.exec()?;
4032

4133
let table1 = globals.get::<Table>("table1")?;
42-
let table2 = globals.get::<Table>("table2")?;
43-
let table3 = globals.get::<Table>("table3")?;
44-
4534
assert_eq!(table1.len()?, 5);
4635
assert!(!table1.is_empty());
4736
assert_eq!(
48-
table1.clone().pairs().collect::<Result<Vec<(i64, i64)>>>()?,
37+
table1.pairs().collect::<Result<Vec<(i64, i64)>>>()?,
4938
vec![(1, 1), (2, 2), (3, 3), (4, 4), (5, 5)]
5039
);
5140
assert_eq!(
52-
table1.clone().sequence_values().collect::<Result<Vec<i64>>>()?,
41+
table1.sequence_values().collect::<Result<Vec<i64>>>()?,
5342
vec![1, 2, 3, 4, 5]
5443
);
5544
assert_eq!(table1, [1, 2, 3, 4, 5]);
45+
assert_eq!(table1, [1, 2, 3, 4, 5].as_slice());
5646

47+
let table2 = globals.get::<Table>("table2")?;
5748
assert_eq!(table2.len()?, 0);
5849
assert!(table2.is_empty());
59-
assert_eq!(
60-
table2.clone().pairs().collect::<Result<Vec<(i64, i64)>>>()?,
61-
vec![]
62-
);
50+
assert_eq!(table2.pairs().collect::<Result<Vec<(i64, i64)>>>()?, vec![]);
6351
assert_eq!(table2, [0; 0]);
6452

53+
let table3 = globals.get::<Table>("table3")?;
6554
// sequence_values should only iterate until the first border
6655
assert_eq!(table3, [1, 2]);
6756
assert_eq!(
6857
table3.sequence_values().collect::<Result<Vec<i64>>>()?,
6958
vec![1, 2]
7059
);
7160

72-
globals.set("table4", lua.create_sequence_from(vec![1, 2, 3, 4, 5])?)?;
73-
let table4 = globals.get::<Table>("table4")?;
74-
assert_eq!(
75-
table4.clone().pairs().collect::<Result<Vec<(i64, i64)>>>()?,
76-
vec![(1, 1), (2, 2), (3, 3), (4, 4), (5, 5)]
77-
);
78-
79-
table4.raw_insert(4, 35)?;
80-
table4.raw_insert(7, 7)?;
81-
assert_eq!(
82-
table4.clone().pairs().collect::<Result<Vec<(i64, i64)>>>()?,
83-
vec![(1, 1), (2, 2), (3, 3), (4, 35), (5, 4), (6, 5), (7, 7)]
84-
);
85-
86-
table4.raw_remove(1)?;
87-
assert_eq!(
88-
table4.clone().pairs().collect::<Result<Vec<(i64, i64)>>>()?,
89-
vec![(1, 2), (2, 3), (3, 35), (4, 4), (5, 5), (6, 7)]
90-
);
91-
9261
Ok(())
9362
}
9463

@@ -97,7 +66,7 @@ fn test_table_push_pop() -> Result<()> {
9766
let lua = Lua::new();
9867

9968
// Test raw access
100-
let table1 = lua.create_sequence_from(vec![123])?;
69+
let table1 = lua.create_sequence_from([123])?;
10170
table1.raw_push(321)?;
10271
assert_eq!(table1, [123, 321]);
10372
assert_eq!(table1.raw_pop::<i64>()?, 321);
@@ -123,10 +92,7 @@ fn test_table_push_pop() -> Result<()> {
12392
table2.push(345)?;
12493
assert_eq!(table2.len()?, 2);
12594
assert_eq!(
126-
table2
127-
.clone()
128-
.sequence_values::<i64>()
129-
.collect::<Result<Vec<_>>>()?,
95+
table2.sequence_values::<i64>().collect::<Result<Vec<_>>>()?,
13096
vec![]
13197
);
13298
assert_eq!(table2.pop::<i64>()?, 345);
@@ -137,22 +103,53 @@ fn test_table_push_pop() -> Result<()> {
137103
Ok(())
138104
}
139105

106+
#[test]
107+
fn test_table_insert_remove() -> Result<()> {
108+
let lua = Lua::new();
109+
110+
let globals = lua.globals();
111+
112+
globals.set("table4", [1, 2, 3, 4, 5])?;
113+
let table4 = globals.get::<Table>("table4")?;
114+
assert_eq!(
115+
table4.pairs().collect::<Result<Vec<(i64, i64)>>>()?,
116+
vec![(1, 1), (2, 2), (3, 3), (4, 4), (5, 5)]
117+
);
118+
table4.raw_insert(4, 35)?;
119+
table4.raw_insert(7, 7)?;
120+
assert_eq!(
121+
table4.pairs().collect::<Result<Vec<(i64, i64)>>>()?,
122+
vec![(1, 1), (2, 2), (3, 3), (4, 35), (5, 4), (6, 5), (7, 7)]
123+
);
124+
table4.raw_remove(1)?;
125+
assert_eq!(
126+
table4.pairs().collect::<Result<Vec<(i64, i64)>>>()?,
127+
vec![(1, 2), (2, 3), (3, 35), (4, 4), (5, 5), (6, 7)]
128+
);
129+
130+
// Wrong index, tables are 1-indexed
131+
assert!(table4.raw_insert(0, "123").is_err());
132+
133+
Ok(())
134+
}
135+
140136
#[test]
141137
fn test_table_clear() -> Result<()> {
142138
let lua = Lua::new();
143139

140+
let t = lua.create_table()?;
141+
144142
// Check readonly error
145143
#[cfg(feature = "luau")]
146144
{
147-
let t = lua.create_table()?;
148145
t.set_readonly(true);
149146
assert!(matches!(
150147
t.clear(),
151148
Err(Error::RuntimeError(err)) if err.contains("attempt to modify a readonly table")
152149
));
150+
t.set_readonly(false);
153151
}
154152

155-
let t = lua.create_table()?;
156153
// Set array and hash parts
157154
t.push("abc")?;
158155
t.push("bcd")?;
@@ -217,15 +214,14 @@ fn test_table_pairs() -> Result<()> {
217214
)
218215
.eval::<Table>()?;
219216

220-
let table2 = table.clone();
221217
for (i, kv) in table.pairs::<String, Value>().enumerate() {
222218
let (k, _v) = kv.unwrap();
223219
match i {
224220
// Try to add a new key
225-
0 => table2.set("new_key", "new_value")?,
221+
0 => table.set("new_key", "new_value")?,
226222
// Try to delete the 2nd key
227223
1 => {
228-
table2.set(k, Value::Nil)?;
224+
table.set(k, Value::Nil)?;
229225
lua.gc_collect()?;
230226
}
231227
_ => {}
@@ -304,21 +300,15 @@ fn test_metatable() -> Result<()> {
304300
metatable.set("__index", lua.create_function(|_, ()| Ok("index_value"))?)?;
305301
table.set_metatable(Some(metatable));
306302
assert_eq!(table.get::<String>("any_key")?, "index_value");
307-
match table.raw_get::<Value>("any_key")? {
308-
Nil => {}
309-
_ => panic!(),
310-
}
303+
assert_eq!(table.raw_get::<Value>("any_key")?, Value::Nil);
311304
table.set_metatable(None);
312-
match table.get::<Value>("any_key")? {
313-
Nil => {}
314-
_ => panic!(),
315-
};
305+
assert_eq!(table.get::<Value>("any_key")?, Value::Nil);
316306

317307
Ok(())
318308
}
319309

320310
#[test]
321-
fn test_table_eq() -> Result<()> {
311+
fn test_table_equals() -> Result<()> {
322312
let lua = Lua::new();
323313
let globals = lua.globals();
324314

@@ -358,6 +348,7 @@ fn test_table_pointer() -> Result<()> {
358348
let table1 = lua.create_table()?;
359349
let table2 = lua.create_table()?;
360350

351+
// Clone should not create a new table
361352
assert_eq!(table1.to_pointer(), table1.clone().to_pointer());
362353
assert_ne!(table1.to_pointer(), table2.to_pointer());
363354

@@ -398,6 +389,21 @@ fn test_table_error() -> Result<()> {
398389
Ok(())
399390
}
400391

392+
#[test]
393+
fn test_table_fmt() -> Result<()> {
394+
let lua = Lua::new();
395+
396+
let table = lua.load(r#"{1, 2, 3, a = 5, b = { 6 }}"#).eval::<Table>()?;
397+
// assert_eq!(format!("{:?}", table), "{1, 2, 3, a = 5, b = {6}}");
398+
assert!(format!("{table:?}").starts_with("Table(Ref("));
399+
assert_eq!(
400+
format!("{table:#?}"),
401+
"{\n [1] = 1,\n [2] = 2,\n [3] = 3,\n [\"a\"] = 5,\n [\"b\"] = {\n [1] = 6,\n },\n}"
402+
);
403+
404+
Ok(())
405+
}
406+
401407
#[test]
402408
fn test_table_object_like() -> Result<()> {
403409
let lua = Lua::new();

0 commit comments

Comments
 (0)