1use crate::case::*;
2
3pub fn to_camel_case(non_camelized_string: &str) -> String {
19 let options = CamelOptions {
20 new_word: false,
21 last_char: ' ',
22 first_word: false,
23 injectable_char: ' ',
24 has_seperator: false,
25 inverted: false,
26 concat_num: true,
27 };
28 to_case_camel_like(non_camelized_string, options)
29}
30
31pub fn is_camel_case(test_string: &str) -> bool {
49 to_camel_case(test_string) == test_string
50}
51
52#[cfg(test)]
53mod benchmarks {
54 extern crate test;
55 use self::test::Bencher;
56
57 #[bench]
58 fn bench_camel0(b: &mut Bencher) {
59 b.iter(|| {
60 let test_string = "Foo bar";
61 super::to_camel_case(test_string)
62 });
63 }
64
65 #[bench]
66 fn bench_camel1(b: &mut Bencher) {
67 b.iter(|| {
68 let test_string = "foo_bar";
69 super::to_camel_case(test_string)
70 });
71 }
72
73 #[bench]
74 fn bench_camel2(b: &mut Bencher) {
75 b.iter(|| {
76 let test_string = "fooBar";
77 super::to_camel_case(test_string)
78 });
79 }
80
81 #[bench]
82 fn bench_is_camel(b: &mut Bencher) {
83 b.iter(|| {
84 let test_string: &str = "Foo bar";
85 super::is_camel_case(test_string)
86 });
87 }
88}
89
90#[cfg(test)]
91mod tests {
92 use super::is_camel_case;
93 use super::to_camel_case;
94
95 #[test]
96 fn from_camel_case() {
97 let convertable_string: String = "fooBar".to_owned();
98 let expected: String = "fooBar".to_owned();
99 assert_eq!(to_camel_case(&convertable_string), expected)
100 }
101
102 #[test]
103 fn from_pascal_case() {
104 let convertable_string: String = "FooBar".to_owned();
105 let expected: String = "fooBar".to_owned();
106 assert_eq!(to_camel_case(&convertable_string), expected)
107 }
108
109 #[test]
110 fn from_kebab_case() {
111 let convertable_string: String = "foo-bar".to_owned();
112 let expected: String = "fooBar".to_owned();
113 assert_eq!(to_camel_case(&convertable_string), expected)
114 }
115
116 #[test]
117 fn from_sentence_case() {
118 let convertable_string: String = "Foo bar".to_owned();
119 let expected: String = "fooBar".to_owned();
120 assert_eq!(to_camel_case(&convertable_string), expected)
121 }
122
123 #[test]
124 fn from_title_case() {
125 let convertable_string: String = "Foo Bar".to_owned();
126 let expected: String = "fooBar".to_owned();
127 assert_eq!(to_camel_case(&convertable_string), expected)
128 }
129
130 #[test]
131 fn from_train_case() {
132 let convertable_string: String = "Foo-Bar".to_owned();
133 let expected: String = "fooBar".to_owned();
134 assert_eq!(to_camel_case(&convertable_string), expected)
135 }
136
137 #[test]
138 fn from_screaming_snake_case() {
139 let convertable_string: String = "FOO_BAR".to_owned();
140 let expected: String = "fooBar".to_owned();
141 assert_eq!(to_camel_case(&convertable_string), expected)
142 }
143
144 #[test]
145 fn from_snake_case() {
146 let convertable_string: String = "foo_bar".to_owned();
147 let expected: String = "fooBar".to_owned();
148 assert_eq!(to_camel_case(&convertable_string), expected)
149 }
150
151 #[test]
152 fn from_case_with_loads_of_space() {
153 let convertable_string: String = "foo bar".to_owned();
154 let expected: String = "fooBar".to_owned();
155 assert_eq!(to_camel_case(&convertable_string), expected)
156 }
157
158 #[test]
159 fn a_name_with_a_dot() {
160 let convertable_string: String = "Robert C. Martin".to_owned();
161 let expected: String = "robertCMartin".to_owned();
162 assert_eq!(to_camel_case(&convertable_string), expected)
163 }
164
165 #[test]
166 fn random_text_with_bad_chars() {
167 let convertable_string: String = "Random text with *(bad) chars".to_owned();
168 let expected: String = "randomTextWithBadChars".to_owned();
169 assert_eq!(to_camel_case(&convertable_string), expected)
170 }
171
172 #[test]
173 fn trailing_bad_chars() {
174 let convertable_string: String = "trailing bad_chars*(()())".to_owned();
175 let expected: String = "trailingBadChars".to_owned();
176 assert_eq!(to_camel_case(&convertable_string), expected)
177 }
178
179 #[test]
180 fn leading_bad_chars() {
181 let convertable_string: String = "-!#$%leading bad chars".to_owned();
182 let expected: String = "leadingBadChars".to_owned();
183 assert_eq!(to_camel_case(&convertable_string), expected)
184 }
185
186 #[test]
187 fn wrapped_in_bad_chars() {
188 let convertable_string: String =
189 "-!#$%wrapped in bad chars&*^*&(&*^&(<><?>><?><>))".to_owned();
190 let expected: String = "wrappedInBadChars".to_owned();
191 assert_eq!(to_camel_case(&convertable_string), expected)
192 }
193
194 #[test]
195 fn has_a_sign() {
196 let convertable_string: String = "has a + sign".to_owned();
197 let expected: String = "hasASign".to_owned();
198 assert_eq!(to_camel_case(&convertable_string), expected)
199 }
200
201 #[test]
202 fn is_correct_from_camel_case() {
203 let convertable_string: String = "fooBar".to_owned();
204 assert_eq!(is_camel_case(&convertable_string), true)
205 }
206
207 #[test]
208 fn is_correct_from_pascal_case() {
209 let convertable_string: String = "FooBar".to_owned();
210 assert_eq!(is_camel_case(&convertable_string), false)
211 }
212
213 #[test]
214 fn is_correct_from_kebab_case() {
215 let convertable_string: String = "foo-bar".to_owned();
216 assert_eq!(is_camel_case(&convertable_string), false)
217 }
218
219 #[test]
220 fn is_correct_from_sentence_case() {
221 let convertable_string: String = "Foo bar".to_owned();
222 assert_eq!(is_camel_case(&convertable_string), false)
223 }
224
225 #[test]
226 fn is_correct_from_title_case() {
227 let convertable_string: String = "Foo Bar".to_owned();
228 assert_eq!(is_camel_case(&convertable_string), false)
229 }
230
231 #[test]
232 fn is_correct_from_train_case() {
233 let convertable_string: String = "Foo-Bar".to_owned();
234 assert_eq!(is_camel_case(&convertable_string), false)
235 }
236
237 #[test]
238 fn is_correct_from_screaming_snake_case() {
239 let convertable_string: String = "FOO_BAR".to_owned();
240 assert_eq!(is_camel_case(&convertable_string), false)
241 }
242
243 #[test]
244 fn is_correct_from_snake_case() {
245 let convertable_string: String = "foo_bar".to_owned();
246 assert_eq!(is_camel_case(&convertable_string), false)
247 }
248}