inflector/cases/camelcase/
mod.rs

1#![deny(warnings)]
2use cases::case::*;
3
4/// Converts a `&str` to camelCase `String`
5///
6/// ```
7///     use inflector::cases::camelcase::to_camel_case;
8///     let mock_string: &str = "fooBar";
9///     let expected_string: String = "fooBar".to_string();
10///     let asserted_string: String = to_camel_case(mock_string);
11///     assert!(asserted_string == expected_string);
12///
13/// ```
14/// ```
15///     use inflector::cases::camelcase::to_camel_case;
16///     let mock_string: &str = "FOO_BAR";
17///     let expected_string: String = "fooBar".to_string();
18///     let asserted_string: String = to_camel_case(mock_string);
19///     assert!(asserted_string == expected_string);
20///
21/// ```
22/// ```
23///     use inflector::cases::camelcase::to_camel_case;
24///     let mock_string: &str = "Foo Bar";
25///     let expected_string: String = "fooBar".to_string();
26///     let asserted_string: String = to_camel_case(mock_string);
27///     assert!(asserted_string == expected_string);
28///
29/// ```
30/// ```
31///     use inflector::cases::camelcase::to_camel_case;
32///     let mock_string: &str = "foo_bar";
33///     let expected_string: String = "fooBar".to_string();
34///     let asserted_string: String = to_camel_case(mock_string);
35///     assert!(asserted_string == expected_string);
36///
37/// ```
38/// ```
39///     use inflector::cases::camelcase::to_camel_case;
40///     let mock_string: &str = "Foo bar";
41///     let expected_string: String = "fooBar".to_string();
42///     let asserted_string: String = to_camel_case(mock_string);
43///     assert!(asserted_string == expected_string);
44///
45/// ```
46/// ```
47///     use inflector::cases::camelcase::to_camel_case;
48///     let mock_string: &str = "foo-bar";
49///     let expected_string: String = "fooBar".to_string();
50///     let asserted_string: String = to_camel_case(mock_string);
51///     assert!(asserted_string == expected_string);
52///
53/// ```
54/// ```
55///     use inflector::cases::camelcase::to_camel_case;
56///     let mock_string: &str = "FooBar";
57///     let expected_string: String = "fooBar".to_string();
58///     let asserted_string: String = to_camel_case(mock_string);
59///     assert!(asserted_string == expected_string);
60///
61/// ```
62/// ```
63///     use inflector::cases::camelcase::to_camel_case;
64///     let mock_string: &str = "FooBar3";
65///     let expected_string: String = "fooBar3".to_string();
66///     let asserted_string: String = to_camel_case(mock_string);
67///     assert!(asserted_string == expected_string);
68///
69/// ```
70/// ```
71///     use inflector::cases::camelcase::to_camel_case;
72///     let mock_string: &str = "Foo-Bar";
73///     let expected_string: String = "fooBar".to_string();
74///     let asserted_string: String = to_camel_case(mock_string);
75///     assert!(asserted_string == expected_string);
76///
77/// ```
78pub fn to_camel_case(non_camelized_string: &str) -> String {
79    let options = CamelOptions {
80        new_word: false,
81        last_char: ' ',
82        first_word: false,
83        injectable_char: ' ',
84        has_seperator: false,
85        inverted: false,
86    };
87    to_case_camel_like(&non_camelized_string, options)
88}
89
90/// Determines if a `&str` is camelCase bool``
91///
92/// ```
93///     use inflector::cases::camelcase::is_camel_case;
94///     let mock_string: &str = "Foo";
95///     let asserted_bool: bool = is_camel_case(mock_string);
96///     assert!(asserted_bool == false);
97///
98///
99/// ```
100/// ```
101///     use inflector::cases::camelcase::is_camel_case;
102///     let mock_string: &str = "foo";
103///     let asserted_bool: bool = is_camel_case(mock_string);
104///     assert!(asserted_bool == true);
105///
106///
107/// ```
108/// ```
109///     use inflector::cases::camelcase::is_camel_case;
110///     let mock_string: &str = "foo-bar-string-that-is-really-really-long";
111///     let asserted_bool: bool = is_camel_case(mock_string);
112///     assert!(asserted_bool == false);
113///
114///
115/// ```
116/// ```
117///     use inflector::cases::camelcase::is_camel_case;
118///     let mock_string: &str = "FooBarIsAReallyReallyLongString";
119///     let asserted_bool: bool = is_camel_case(mock_string);
120///     assert!(asserted_bool == false);
121///
122///
123/// ```
124/// ```
125///     use inflector::cases::camelcase::is_camel_case;
126///     let mock_string: &str = "fooBarIsAReallyReally3LongString";
127///     let asserted_bool: bool = is_camel_case(mock_string);
128///     assert!(asserted_bool == true);
129///
130///
131/// ```
132/// ```
133///     use inflector::cases::camelcase::is_camel_case;
134///     let mock_string: &str = "fooBarIsAReallyReallyLongString";
135///     let asserted_bool: bool = is_camel_case(mock_string);
136///     assert!(asserted_bool == true);
137///
138///
139/// ```
140/// ```
141///     use inflector::cases::camelcase::is_camel_case;
142///     let mock_string: &str = "FOO_BAR_STRING_THAT_IS_REALLY_REALLY_LONG";
143///     let asserted_bool: bool = is_camel_case(mock_string);
144///     assert!(asserted_bool == false);
145///
146///
147/// ```
148/// ```
149///     use inflector::cases::camelcase::is_camel_case;
150///     let mock_string: &str = "foo_bar_string_that_is_really_really_long";
151///     let asserted_bool: bool = is_camel_case(mock_string);
152///     assert!(asserted_bool == false);
153///
154///
155/// ```
156/// ```
157///     use inflector::cases::camelcase::is_camel_case;
158///     let mock_string: &str = "Foo bar string that is really really long";
159///     let asserted_bool: bool = is_camel_case(mock_string);
160///     assert!(asserted_bool == false);
161///
162///
163/// ```
164/// ```
165///     use inflector::cases::camelcase::is_camel_case;
166///     let mock_string: &str = "Foo Bar Is A Really Really Long String";
167///     let asserted_bool: bool = is_camel_case(mock_string);
168///     assert!(asserted_bool == false);
169/// ```
170pub fn is_camel_case(test_string: &str) -> bool {
171    to_camel_case(&test_string.clone()) == test_string
172}
173
174#[cfg(all(feature = "unstable", test))]
175mod benchmarks {
176    extern crate test;
177    use self::test::Bencher;
178
179    #[bench]
180    fn bench_camel0(b: &mut Bencher) {
181        b.iter(|| {
182            let test_string = "Foo bar";
183            super::to_camel_case(test_string)
184        });
185    }
186
187    #[bench]
188    fn bench_camel1(b: &mut Bencher) {
189        b.iter(|| {
190            let test_string = "foo_bar";
191            super::to_camel_case(test_string)
192        });
193    }
194
195    #[bench]
196    fn bench_camel2(b: &mut Bencher) {
197        b.iter(|| {
198            let test_string = "fooBar";
199            super::to_camel_case(test_string)
200        });
201    }
202
203    #[bench]
204    fn bench_is_camel(b: &mut Bencher) {
205        b.iter(|| {
206            let test_string: &str = "Foo bar";
207            super::is_camel_case(test_string)
208        });
209    }
210}
211
212#[cfg(test)]
213mod tests {
214    use ::to_camel_case;
215    use ::is_camel_case;
216
217    #[test]
218    fn from_camel_case() {
219        let convertable_string: String = "fooBar".to_owned();
220        let expected: String = "fooBar".to_owned();
221        assert_eq!(to_camel_case(&convertable_string), expected)
222    }
223
224    #[test]
225    fn from_pascal_case() {
226        let convertable_string: String = "FooBar".to_owned();
227        let expected: String = "fooBar".to_owned();
228        assert_eq!(to_camel_case(&convertable_string), expected)
229    }
230
231    #[test]
232    fn from_kebab_case() {
233        let convertable_string: String = "foo-bar".to_owned();
234        let expected: String = "fooBar".to_owned();
235        assert_eq!(to_camel_case(&convertable_string), expected)
236    }
237
238    #[test]
239    fn from_sentence_case() {
240        let convertable_string: String = "Foo bar".to_owned();
241        let expected: String = "fooBar".to_owned();
242        assert_eq!(to_camel_case(&convertable_string), expected)
243    }
244
245    #[test]
246    fn from_title_case() {
247        let convertable_string: String = "Foo Bar".to_owned();
248        let expected: String = "fooBar".to_owned();
249        assert_eq!(to_camel_case(&convertable_string), expected)
250    }
251
252    #[test]
253    fn from_train_case() {
254        let convertable_string: String = "Foo-Bar".to_owned();
255        let expected: String = "fooBar".to_owned();
256        assert_eq!(to_camel_case(&convertable_string), expected)
257    }
258
259    #[test]
260    fn from_screaming_snake_case() {
261        let convertable_string: String = "FOO_BAR".to_owned();
262        let expected: String = "fooBar".to_owned();
263        assert_eq!(to_camel_case(&convertable_string), expected)
264    }
265
266    #[test]
267    fn from_snake_case() {
268        let convertable_string: String = "foo_bar".to_owned();
269        let expected: String = "fooBar".to_owned();
270        assert_eq!(to_camel_case(&convertable_string), expected)
271    }
272
273    #[test]
274    fn from_case_with_loads_of_space() {
275        let convertable_string: String = "foo           bar".to_owned();
276        let expected: String = "fooBar".to_owned();
277        assert_eq!(to_camel_case(&convertable_string), expected)
278    }
279
280    #[test]
281    fn a_name_with_a_dot() {
282        let convertable_string: String = "Robert C. Martin".to_owned();
283        let expected: String = "robertCMartin".to_owned();
284        assert_eq!(to_camel_case(&convertable_string), expected)
285    }
286
287    #[test]
288    fn random_text_with_bad_chars() {
289        let convertable_string: String = "Random text with *(bad) chars".to_owned();
290        let expected: String = "randomTextWithBadChars".to_owned();
291        assert_eq!(to_camel_case(&convertable_string), expected)
292    }
293
294    #[test]
295    fn trailing_bad_chars() {
296        let convertable_string: String = "trailing bad_chars*(()())".to_owned();
297        let expected: String = "trailingBadChars".to_owned();
298        assert_eq!(to_camel_case(&convertable_string), expected)
299    }
300
301    #[test]
302    fn leading_bad_chars() {
303        let convertable_string: String = "-!#$%leading bad chars".to_owned();
304        let expected: String = "leadingBadChars".to_owned();
305        assert_eq!(to_camel_case(&convertable_string), expected)
306    }
307
308    #[test]
309    fn wrapped_in_bad_chars() {
310        let convertable_string: String = "-!#$%wrapped in bad chars&*^*&(&*^&(<><?>><?><>))".to_owned();
311        let expected: String = "wrappedInBadChars".to_owned();
312        assert_eq!(to_camel_case(&convertable_string), expected)
313    }
314
315    #[test]
316    fn has_a_sign() {
317        let convertable_string: String = "has a + sign".to_owned();
318        let expected: String = "hasASign".to_owned();
319        assert_eq!(to_camel_case(&convertable_string), expected)
320    }
321
322    #[test]
323    fn is_correct_from_camel_case() {
324        let convertable_string: String = "fooBar".to_owned();
325        assert_eq!(is_camel_case(&convertable_string), true)
326    }
327
328    #[test]
329    fn is_correct_from_pascal_case() {
330        let convertable_string: String = "FooBar".to_owned();
331        assert_eq!(is_camel_case(&convertable_string), false)
332    }
333
334    #[test]
335    fn is_correct_from_kebab_case() {
336        let convertable_string: String = "foo-bar".to_owned();
337        assert_eq!(is_camel_case(&convertable_string), false)
338    }
339
340    #[test]
341    fn is_correct_from_sentence_case() {
342        let convertable_string: String = "Foo bar".to_owned();
343        assert_eq!(is_camel_case(&convertable_string), false)
344    }
345
346    #[test]
347    fn is_correct_from_title_case() {
348        let convertable_string: String = "Foo Bar".to_owned();
349        assert_eq!(is_camel_case(&convertable_string), false)
350    }
351
352    #[test]
353    fn is_correct_from_train_case() {
354        let convertable_string: String = "Foo-Bar".to_owned();
355        assert_eq!(is_camel_case(&convertable_string), false)
356    }
357
358    #[test]
359    fn is_correct_from_screaming_snake_case() {
360        let convertable_string: String = "FOO_BAR".to_owned();
361        assert_eq!(is_camel_case(&convertable_string), false)
362    }
363
364    #[test]
365    fn is_correct_from_snake_case() {
366        let convertable_string: String = "foo_bar".to_owned();
367        assert_eq!(is_camel_case(&convertable_string), false)
368    }
369}
370