1- use mlua:: { Error , Lua , Nil , ObjectLike , Result , Table , Value } ;
1+ use mlua:: { Error , Lua , ObjectLike , Result , Table , Value } ;
22
33#[ test]
44fn 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]
141137fn 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]
402408fn test_table_object_like ( ) -> Result < ( ) > {
403409 let lua = Lua :: new ( ) ;
0 commit comments