Skip to content

Commit 0ccb304

Browse files
clean up tests
1 parent 27aeede commit 0ccb304

File tree

1 file changed

+90
-28
lines changed

1 file changed

+90
-28
lines changed

crates/djls-workspace/src/encoding.rs

Lines changed: 90 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -92,39 +92,34 @@ mod tests {
9292
use super::*;
9393

9494
#[test]
95-
fn test_encoding_str_conversion() {
96-
// Test FromStr trait
97-
assert_eq!("utf-8".parse(), Ok(PositionEncoding::Utf8));
98-
assert_eq!("utf-16".parse(), Ok(PositionEncoding::Utf16));
99-
assert_eq!("utf-32".parse(), Ok(PositionEncoding::Utf32));
100-
assert!("invalid".parse::<PositionEncoding>().is_err());
101-
102-
// Test ToString trait
103-
assert_eq!(PositionEncoding::Utf8.to_string(), "utf-8");
104-
assert_eq!(PositionEncoding::Utf16.to_string(), "utf-16");
105-
assert_eq!(PositionEncoding::Utf32.to_string(), "utf-32");
106-
}
107-
108-
#[test]
109-
fn test_from_lsp_kind() {
95+
fn test_string_parsing_and_display() {
96+
// Valid encodings parse correctly
11097
assert_eq!(
111-
PositionEncoding::try_from(PositionEncodingKind::new("utf-8")),
98+
"utf-8".parse::<PositionEncoding>(),
11299
Ok(PositionEncoding::Utf8)
113100
);
114101
assert_eq!(
115-
PositionEncoding::try_from(PositionEncodingKind::new("utf-16")),
102+
"utf-16".parse::<PositionEncoding>(),
116103
Ok(PositionEncoding::Utf16)
117104
);
118105
assert_eq!(
119-
PositionEncoding::try_from(PositionEncodingKind::new("utf-32")),
106+
"utf-32".parse::<PositionEncoding>(),
120107
Ok(PositionEncoding::Utf32)
121108
);
122-
assert!(PositionEncoding::try_from(PositionEncodingKind::new("unknown")).is_err());
109+
110+
// Invalid encoding returns error
111+
assert!("invalid".parse::<PositionEncoding>().is_err());
112+
assert!("UTF-8".parse::<PositionEncoding>().is_err()); // case sensitive
113+
114+
// Display produces correct strings
115+
assert_eq!(PositionEncoding::Utf8.to_string(), "utf-8");
116+
assert_eq!(PositionEncoding::Utf16.to_string(), "utf-16");
117+
assert_eq!(PositionEncoding::Utf32.to_string(), "utf-32");
123118
}
124119

125120
#[test]
126-
fn test_trait_conversions() {
127-
// Test TryFrom<PositionEncodingKind> for PositionEncoding
121+
fn test_lsp_type_conversions() {
122+
// TryFrom<PositionEncodingKind> for valid encodings
128123
assert_eq!(
129124
PositionEncoding::try_from(PositionEncodingKind::new("utf-8")),
130125
Ok(PositionEncoding::Utf8)
@@ -137,9 +132,11 @@ mod tests {
137132
PositionEncoding::try_from(PositionEncodingKind::new("utf-32")),
138133
Ok(PositionEncoding::Utf32)
139134
);
135+
136+
// Invalid encoding returns error
140137
assert!(PositionEncoding::try_from(PositionEncodingKind::new("unknown")).is_err());
141138

142-
// Test From<PositionEncoding> for PositionEncodingKind
139+
// From<PositionEncoding> produces correct LSP types
143140
assert_eq!(
144141
PositionEncodingKind::from(PositionEncoding::Utf8).as_str(),
145142
"utf-8"
@@ -155,7 +152,7 @@ mod tests {
155152
}
156153

157154
#[test]
158-
fn test_negotiate_prefers_utf8() {
155+
fn test_negotiate_prefers_utf8_when_all_available() {
159156
let params = InitializeParams {
160157
capabilities: ClientCapabilities {
161158
general: Some(GeneralClientCapabilities {
@@ -175,7 +172,67 @@ mod tests {
175172
}
176173

177174
#[test]
178-
fn test_negotiate_fallback_utf16() {
175+
fn test_negotiate_prefers_utf32_over_utf16() {
176+
let params = InitializeParams {
177+
capabilities: ClientCapabilities {
178+
general: Some(GeneralClientCapabilities {
179+
position_encodings: Some(vec![
180+
PositionEncodingKind::new("utf-16"),
181+
PositionEncodingKind::new("utf-32"),
182+
]),
183+
..Default::default()
184+
}),
185+
..Default::default()
186+
},
187+
..Default::default()
188+
};
189+
190+
assert_eq!(
191+
PositionEncoding::negotiate(&params),
192+
PositionEncoding::Utf32
193+
);
194+
}
195+
196+
#[test]
197+
fn test_negotiate_accepts_utf16_when_only_option() {
198+
let params = InitializeParams {
199+
capabilities: ClientCapabilities {
200+
general: Some(GeneralClientCapabilities {
201+
position_encodings: Some(vec![PositionEncodingKind::new("utf-16")]),
202+
..Default::default()
203+
}),
204+
..Default::default()
205+
},
206+
..Default::default()
207+
};
208+
209+
assert_eq!(
210+
PositionEncoding::negotiate(&params),
211+
PositionEncoding::Utf16
212+
);
213+
}
214+
215+
#[test]
216+
fn test_negotiate_fallback_with_empty_encodings() {
217+
let params = InitializeParams {
218+
capabilities: ClientCapabilities {
219+
general: Some(GeneralClientCapabilities {
220+
position_encodings: Some(vec![]),
221+
..Default::default()
222+
}),
223+
..Default::default()
224+
},
225+
..Default::default()
226+
};
227+
228+
assert_eq!(
229+
PositionEncoding::negotiate(&params),
230+
PositionEncoding::Utf16
231+
);
232+
}
233+
234+
#[test]
235+
fn test_negotiate_fallback_with_no_capabilities() {
179236
let params = InitializeParams::default();
180237
assert_eq!(
181238
PositionEncoding::negotiate(&params),
@@ -184,13 +241,13 @@ mod tests {
184241
}
185242

186243
#[test]
187-
fn test_negotiate_prefers_utf32_over_utf16() {
244+
fn test_negotiate_fallback_with_unknown_encodings() {
188245
let params = InitializeParams {
189246
capabilities: ClientCapabilities {
190247
general: Some(GeneralClientCapabilities {
191248
position_encodings: Some(vec![
192-
PositionEncodingKind::new("utf-16"),
193-
PositionEncodingKind::new("utf-32"),
249+
PositionEncodingKind::new("utf-7"),
250+
PositionEncodingKind::new("ascii"),
194251
]),
195252
..Default::default()
196253
}),
@@ -201,7 +258,12 @@ mod tests {
201258

202259
assert_eq!(
203260
PositionEncoding::negotiate(&params),
204-
PositionEncoding::Utf32
261+
PositionEncoding::Utf16
205262
);
206263
}
264+
265+
#[test]
266+
fn test_default_is_utf16() {
267+
assert_eq!(PositionEncoding::default(), PositionEncoding::Utf16);
268+
}
207269
}

0 commit comments

Comments
 (0)