-
Notifications
You must be signed in to change notification settings - Fork 184
Expand file tree
/
Copy pathutils_tests.rs
More file actions
121 lines (91 loc) · 2.93 KB
/
Copy pathutils_tests.rs
File metadata and controls
121 lines (91 loc) · 2.93 KB
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
use std::{
ffi::{CStr, CString},
mem::MaybeUninit,
};
#[test]
fn version_test() {
use ruby_prism_sys::pm_version;
let cstring = unsafe {
let version = pm_version();
CStr::from_ptr(version)
};
assert_eq!(&cstring.to_string_lossy(), "1.5.0");
}
#[test]
fn list_test() {
use ruby_prism_sys::{pm_list_empty_p, pm_list_free, pm_list_t};
let mut list = MaybeUninit::<pm_list_t>::zeroed();
unsafe {
let list = list.assume_init_mut();
assert!(pm_list_empty_p(list));
pm_list_free(list);
}
}
mod string {
use ruby_prism_sys::{
pm_string_free, pm_string_length, pm_string_source, pm_string_t, pm_string_t__bindgen_ty_1, PM_STRING_CONSTANT,
PM_STRING_MAPPED, PM_STRING_OWNED, PM_STRING_SHARED,
};
use super::*;
struct S {
c_string: CString,
pm_string: pm_string_t,
}
impl S {
fn start_ptr(&self) -> *const u8 {
self.c_string.as_ptr().cast::<u8>()
}
}
fn make_string(string_type: pm_string_t__bindgen_ty_1) -> S {
let c_string = CString::new("0123456789012345").unwrap();
let pm_string = pm_string_t {
type_: string_type,
source: c_string.as_ptr().cast::<u8>(),
length: c_string.as_bytes().len(),
};
S { c_string, pm_string }
}
#[test]
fn shared_string_test() {
let mut s = make_string(PM_STRING_SHARED);
unsafe {
let len = pm_string_length(&raw const s.pm_string);
assert_eq!(len, 16);
let result_start = pm_string_source(&raw const s.pm_string);
assert_eq!(s.start_ptr(), result_start);
pm_string_free(&raw mut s.pm_string);
}
}
#[test]
fn owned_string_test() {
let s = make_string(PM_STRING_OWNED);
unsafe {
let result_len = pm_string_length(&raw const s.pm_string);
assert_eq!(result_len, 16);
let result_start = pm_string_source(&raw const s.pm_string);
assert_eq!(s.pm_string.source, result_start);
// Don't drop the pm_string--we don't own it anymore!
}
}
#[test]
fn constant_string_test() {
let mut s = make_string(PM_STRING_CONSTANT);
unsafe {
let result_len = pm_string_length(&raw const s.pm_string);
assert_eq!(result_len, 16);
let result_start = pm_string_source(&raw const s.pm_string);
assert_eq!(s.pm_string.source, result_start);
pm_string_free(&raw mut s.pm_string);
}
}
#[test]
fn mapped_string_test() {
let s = make_string(PM_STRING_MAPPED);
unsafe {
let result_len = pm_string_length(&raw const s.pm_string);
assert_eq!(result_len, 16);
let result_start = pm_string_source(&raw const s.pm_string);
assert_eq!(s.pm_string.source, result_start);
}
}
}