@@ -2,6 +2,7 @@ use std::borrow::Cow;
22use std:: collections:: { BTreeMap , BTreeSet , HashMap , HashSet } ;
33use std:: ffi:: { CStr , CString } ;
44
5+ use bstr:: BString ;
56use maplit:: { btreemap, btreeset, hashmap, hashset} ;
67use mlua:: {
78 AnyUserData , Error , Function , IntoLua , Lua , RegistryKey , Result , Table , Thread , UserDataRef ,
@@ -409,3 +410,46 @@ fn test_conv_array() -> Result<()> {
409410
410411 Ok ( ( ) )
411412}
413+
414+ #[ test]
415+ fn test_bstring_from_lua ( ) -> Result < ( ) > {
416+ let lua = Lua :: new ( ) ;
417+
418+ let s = lua. create_string ( "hello, world" ) ?;
419+ let bstr = lua. unpack :: < BString > ( Value :: String ( s) ) ?;
420+ assert_eq ! ( bstr, "hello, world" ) ;
421+
422+ let bstr = lua. unpack :: < BString > ( Value :: Integer ( 123 ) ) ?;
423+ assert_eq ! ( bstr, "123" ) ;
424+
425+ let bstr = lua. unpack :: < BString > ( Value :: Number ( -123.55 ) ) ?;
426+ assert_eq ! ( bstr, "-123.55" ) ;
427+
428+ // Test from stack
429+ let f = lua. create_function ( |_, bstr : BString | Ok ( bstr) ) ?;
430+ let bstr = f. call :: < _ , BString > ( "hello, world" ) ?;
431+ assert_eq ! ( bstr, "hello, world" ) ;
432+
433+ let bstr = f. call :: < _ , BString > ( -43.22 ) ?;
434+ assert_eq ! ( bstr, "-43.22" ) ;
435+
436+ Ok ( ( ) )
437+ }
438+
439+ #[ cfg( feature = "luau" ) ]
440+ #[ test]
441+ fn test_bstring_from_lua_buffer ( ) -> Result < ( ) > {
442+ let lua = Lua :: new ( ) ;
443+
444+ let b = lua. create_buffer ( "hello, world" ) ?;
445+ let bstr = lua. unpack :: < BString > ( Value :: UserData ( b) ) ?;
446+ assert_eq ! ( bstr, "hello, world" ) ;
447+
448+ // Test from stack
449+ let f = lua. create_function ( |_, bstr : BString | Ok ( bstr) ) ?;
450+ let buf = lua. create_buffer ( "hello, world" ) ?;
451+ let bstr = f. call :: < _ , BString > ( buf) ?;
452+ assert_eq ! ( bstr, "hello, world" ) ;
453+
454+ Ok ( ( ) )
455+ }
0 commit comments