let s1 = NSString::from_str("abc"); let s2 = s1.copy(); // An optimization that NSString makes, since it is immutable
assert_eq!(Retained::as_ptr(&s1), Retained::as_ptr(&s2));
assert!(s2.isKindOfClass(NSString::class()));
let s3 = s1.mutableCopy();
assert_ne!(Retained::as_ptr(&s1), Retained::as_ptr(&s3).cast());
assert!(s3.isKindOfClass(NSMutableString::class()));
}
let string1 = NSString::from_str("Hello, world!"); let string2 = string1.copy();
assert!(
core::ptr::eq(&*string1, &*string2), "Cloned NSString didn't have the same address"
);
}
#[test] /// Apparently NSString does this for some reason? fn test_strips_first_leading_zero_width_no_break_space() { let ns_string = NSString::from_str("\u{feff}"); let expected = "";
autoreleasepool(|pool| unsafe {
assert_eq!(ns_string.to_str(pool), expected);
});
assert_eq!(ns_string.to_string(), expected);
assert_eq!(ns_string.len(), 0);
let s = "\u{feff}\u{feff}a\u{feff}";
// Huh, this difference might be a GNUStep bug? let expected = if cfg!(feature = "gnustep-1-7") { "a\u{feff}"
} else { "\u{feff}a\u{feff}"
};
let s = NSString::from_str("abc"); let shorter = NSString::from_str("a"); let longer = NSString::from_str("abcdef");
assert!(s > shorter);
assert!(s < longer);
}
#[test] #[cfg(feature = "NSPathUtilities")] fn test_append() { let error_tag = NSString::from_str("Error: "); let error_string = NSString::from_str("premature end of file."); let error_message = error_tag.stringByAppendingString(&error_string);
assert_eq!(
error_message,
NSString::from_str("Error: premature end of file.")
);
#[test] fn test_macro_in_unsafe() { // Test that the `unused_unsafe` lint doesn't trigger let s = unsafe { let s: *const NSString = ns_string!("abc");
&*s
};
assert_eq!(s.to_string(), "abc");
}
#[test] #[cfg_attr(not(target_vendor = "apple"), ignore = "only on Apple")] fn class_cluster_and_init_method() { // This method happens to only be available on allocated objects. let sel = sel!(initWithBytes:length:encoding:);
let method = NSString::class().instance_method(sel);
assert!(method.is_none(), "class does not have method");
let s = NSString::from_str("foo");
assert!(!s.respondsToSelector(sel), "object does not have method");
let allocated_object: *mut NSString = unsafe { msg_send![NSString::class(), alloc] }; let has_method: bool = unsafe { msg_send![allocated_object, respondsToSelector: sel] }; let _: () = unsafe { msg_send![allocated_object, release] };
assert!(has_method, "Allocated (but uninitialized) has method");
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.