File: StringSnakeCaseTests.swift

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (101 lines) | stat: -rw-r--r-- 4,500 bytes parent folder | download
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
//===----------------------------------------------------------*- swift -*-===//
//
// This source file is part of the Swift Argument Parser open source project
//
// Copyright (c) 2020 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
//
//===----------------------------------------------------------------------===//

import XCTest
@testable import ArgumentParser

final class StringSnakeCaseTests: XCTestCase {}

extension StringSnakeCaseTests {
  func testStringSnakeCase() {
    let toSnakeCaseTests = [
      ("simpleOneTwo", "simple_one_two"),
      ("myURL", "my_url"),
      ("singleCharacterAtEndX", "single_character_at_end_x"),
      ("thisIsAnXMLProperty", "this_is_an_xml_property"),
      ("single", "single"), // no underscore
      ("", ""), // don't die on empty string
      ("a", "a"), // single character
      ("aA", "a_a"), // two characters
      ("version4Thing", "version4_thing"), // numerics
      ("partCAPS", "part_caps"), // only insert underscore before first all caps
      ("partCAPSLowerAGAIN", "part_caps_lower_again"), // switch back and forth caps.
      ("manyWordsInThisThing", "many_words_in_this_thing"), // simple lowercase + underscore + more
      ("asdfĆqer", "asdf_ćqer"),
      ("already_snake_case", "already_snake_case"),
      ("dataPoint22", "data_point22"),
      ("dataPoint22Word", "data_point22_word"),
      ("_oneTwoThree", "_one_two_three"),
      ("oneTwoThree_", "one_two_three_"),
      ("__oneTwoThree", "__one_two_three"),
      ("oneTwoThree__", "one_two_three__"),
      ("_oneTwoThree_", "_one_two_three_"),
      ("__oneTwoThree", "__one_two_three"),
      ("__oneTwoThree__", "__one_two_three__"),
      ("_test", "_test"),
      ("_test_", "_test_"),
      ("__test", "__test"),
      ("test__", "test__"),
      ("m͉̟̹y̦̳G͍͚͎̳r̤͉̤͕ͅea̲͕t͇̥̼͖U͇̝̠R͙̻̥͓̣L̥̖͎͓̪̫ͅR̩͖̩eq͈͓u̞e̱s̙t̤̺ͅ", "m͉̟̹y̦̳_g͍͚͎̳r̤͉̤͕ͅea̲͕t͇̥̼͖_u͇̝̠r͙̻̥͓̣l̥̖͎͓̪̫ͅ_r̩͖̩eq͈͓u̞e̱s̙t̤̺ͅ"), // because Itai wanted to test this
      ("🐧🐟", "🐧🐟"), // fishy emoji example?
      ("URLSession", "url_session"),
      ("RADAR", "radar"),
      ("Sample", "sample"),
      ("_Sample", "_sample"),
      ("_IAmAnAPPDeveloper", "_i_am_an_app_developer")
    ]
    for test in toSnakeCaseTests {
      XCTAssertEqual(test.0.convertedToSnakeCase(), test.1)
    }
  }
  
  func testStringSnakeCaseWithSeparator() {
    let toSnakeCaseTests = [
      ("simpleOneTwo", "simple-one-two"),
      ("myURL", "my-url"),
      ("singleCharacterAtEndX", "single-character-at-end-x"),
      ("thisIsAnXMLProperty", "this-is-an-xml-property"),
      ("single", "single"), // no underscore
      ("", ""), // don't die on empty string
      ("a", "a"), // single character
      ("aA", "a-a"), // two characters
      ("version4Thing", "version4-thing"), // numerics
      ("partCAPS", "part-caps"), // only insert underscore before first all caps
      ("partCAPSLowerAGAIN", "part-caps-lower-again"), // switch back and forth caps.
      ("manyWordsInThisThing", "many-words-in-this-thing"), // simple lowercase + underscore + more
      ("asdfĆqer", "asdf-ćqer"),
      ("already_snake_case", "already_snake_case"),
      ("dataPoint22", "data-point22"),
      ("dataPoint22Word", "data-point22-word"),
      ("_oneTwoThree", "_one-two-three"),
      ("oneTwoThree_", "one-two-three_"),
      ("__oneTwoThree", "__one-two-three"),
      ("oneTwoThree__", "one-two-three__"),
      ("_oneTwoThree_", "_one-two-three_"),
      ("__oneTwoThree", "__one-two-three"),
      ("__oneTwoThree__", "__one-two-three__"),
      ("_test", "_test"),
      ("_test_", "_test_"),
      ("__test", "__test"),
      ("test__", "test__"),
      ("m͉̟̹y̦̳G͍͚͎̳r̤͉̤͕ͅea̲͕t͇̥̼͖U͇̝̠R͙̻̥͓̣L̥̖͎͓̪̫ͅR̩͖̩eq͈͓u̞e̱s̙t̤̺ͅ", "m͉̟̹y̦̳-g͍͚͎̳r̤͉̤͕ͅea̲͕t͇̥̼͖-u͇̝̠r͙̻̥͓̣l̥̖͎͓̪̫ͅ-r̩͖̩eq͈͓u̞e̱s̙t̤̺ͅ"), // because Itai wanted to test this
      ("🐧🐟", "🐧🐟"), // fishy emoji example?
      ("URLSession", "url-session"),
      ("RADAR", "radar"),
      ("Sample", "sample"),
      ("_Sample", "_-sample"),
      ("_IAmAnAPPDeveloper", "_-i-am-an-app-developer")
    ]
    for test in toSnakeCaseTests {
      XCTAssertEqual(test.0.convertedToSnakeCase(separator: "-"), test.1)
    }
  }
}