about summary refs log tree commit diff
path: root/tests/ui/darwin-objc/darwin-objc-selector.rs
blob: 008ae4c4ca45767b0ee65e56652dcf10f17e00d8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// Test that `objc::selector!` returns the same thing as `sel_registerName`.

//@ edition: 2024
//@ only-apple
//@ run-pass

#![feature(darwin_objc)]

use std::ffi::c_char;
use std::os::darwin::objc;

#[link(name = "objc")]
unsafe extern "C" {
    fn sel_registerName(methname: *const c_char) -> objc::SEL;
}

fn get_alloc_selector() -> objc::SEL {
    objc::selector!("alloc")
}

fn register_alloc_selector() -> objc::SEL {
    unsafe { sel_registerName(c"alloc".as_ptr()) }
}

fn get_init_selector() -> objc::SEL {
    objc::selector!("initWithCString:encoding:")
}

fn register_init_selector() -> objc::SEL {
    unsafe { sel_registerName(c"initWithCString:encoding:".as_ptr()) }
}

fn main() {
    assert_eq!(get_alloc_selector(), register_alloc_selector());
    assert_eq!(get_init_selector(), register_init_selector());
}