irongit
jv/tests/swift_tests.rs
101 lines2.9 KBRust
1use std::collections::BTreeMap;
2
3use jv::lang::swift::{to_camel_case, SwiftGenerator};
4use jv::lang::LanguageGenerator;
5use jv::types::InferredType;
6
7#[test]
8fn test_swift_type_names() {
9 let g = SwiftGenerator;
10 assert_eq!(g.type_name(&InferredType::Null), "Any?");
11 assert_eq!(g.type_name(&InferredType::Bool), "Bool");
12 assert_eq!(g.type_name(&InferredType::I64), "Int");
13 assert_eq!(g.type_name(&InferredType::F64), "Double");
14 assert_eq!(g.type_name(&InferredType::String), "String");
15 assert_eq!(g.type_name(&InferredType::DateTime), "Date");
16 assert_eq!(g.type_name(&InferredType::Date), "Date");
17 assert_eq!(g.type_name(&InferredType::Time), "Date");
18 assert_eq!(g.type_name(&InferredType::Unknown), "Any");
19 assert_eq!(
20 g.type_name(&InferredType::Mixed(vec![
21 InferredType::I64,
22 InferredType::String
23 ])),
24 "Any"
25 );
26}
27
28#[test]
29fn test_swift_array_type() {
30 let g = SwiftGenerator;
31 let arr = InferredType::Array(Box::new(InferredType::String));
32 assert_eq!(g.type_name(&arr), "[String]");
33}
34
35#[test]
36fn test_swift_option_type() {
37 let g = SwiftGenerator;
38 let opt = InferredType::Option(Box::new(InferredType::I64));
39 assert_eq!(g.type_name(&opt), "Int?");
40}
41
42#[test]
43fn test_swift_object_fallback() {
44 let g = SwiftGenerator;
45 let obj = InferredType::Object(BTreeMap::new());
46 assert_eq!(g.type_name(&obj), "[String: Any]");
47}
48
49#[test]
50fn test_to_camel_case() {
51 assert_eq!(to_camel_case("departure_date"), "departureDate");
52 assert_eq!(to_camel_case("id"), "id");
53 assert_eq!(to_camel_case("seat_abbreviation"), "seatAbbreviation");
54}
55
56#[test]
57fn test_swift_field_name() {
58 let g = SwiftGenerator;
59 assert_eq!(g.field_name("departure_date"), "departureDate");
60 assert_eq!(g.field_name("id"), "id");
61 assert_eq!(g.field_name("class"), "`class`");
62}
63
64#[test]
65fn test_coding_keys() {
66 let g = SwiftGenerator;
67 let fields = vec![
68 ("origin".to_string(), "origin".to_string()),
69 ("departureDate".to_string(), "departure_date".to_string()),
70 ];
71 let result = g.struct_close(&fields);
72 assert!(result.contains("enum CodingKeys: String, CodingKey {"));
73 assert!(result.contains("case origin\n"));
74 assert!(result.contains("case departureDate = \"departure_date\"\n"));
75 assert!(result.ends_with("}\n"));
76}
77
78#[test]
79fn test_coding_keys_omitted_when_all_match() {
80 let g = SwiftGenerator;
81 let fields = vec![
82 ("origin".to_string(), "origin".to_string()),
83 ("id".to_string(), "id".to_string()),
84 ];
85 let result = g.struct_close(&fields);
86 assert_eq!(result, "}\n");
87 assert!(!result.contains("CodingKeys"));
88}
89
90#[test]
91fn test_swift_keyword_sanitize() {
92 let g = SwiftGenerator;
93 assert_eq!(g.sanitize_keyword("class"), "`class`");
94 assert_eq!(g.sanitize_keyword("origin"), "origin");
95}
96
97#[test]
98fn test_swift_file_name() {
99 let g = SwiftGenerator;
100 assert_eq!(g.file_name("shared"), "Shared.swift");
101}