rust_string.rs 928 B

12345678910111213141516171819202122232425262728293031323334353637
  1. extern crate tor_util;
  2. extern crate libc;
  3. use std::ffi::CString;
  4. use tor_util::RustString;
  5. #[test]
  6. fn rust_string_conversions_preserve_c_string() {
  7. let s = CString::new("asdf foo").unwrap();
  8. let r = RustString::from(s.clone());
  9. let r2 = RustString::from(s.clone());
  10. let c = r2.as_ptr();
  11. assert_eq!(unsafe { libc::strlen(c) }, 8);
  12. let c_str = r.into();
  13. assert_eq!(s, c_str);
  14. }
  15. #[test]
  16. fn empty_string() {
  17. let s = CString::new("").unwrap();
  18. let r = RustString::from(s.clone());
  19. let c = r.as_ptr();
  20. assert_eq!(unsafe { libc::strlen(c) }, 0);
  21. let c_str = r.into();
  22. assert_eq!(s, c_str);
  23. }
  24. #[test]
  25. fn c_string_with_unicode() {
  26. // The euro sign is three bytes
  27. let s = CString::new("asd€asd").unwrap();
  28. let r = RustString::from(s.clone());
  29. let c = r.as_ptr();
  30. assert_eq!(unsafe { libc::strlen(c) }, 9);
  31. let c_str = r.into();
  32. assert_eq!(s, c_str);
  33. }