Skip to content

Commit e5269b0

Browse files
authored
Merge pull request #21 from arran4/fix-upper-indicator-delimiter-8071639884133601336
Fix UpperIndicator delimiter behavior
2 parents bc5e616 + 3d1047d commit e5269b0

2 files changed

Lines changed: 29 additions & 10 deletions

File tree

edge_cases_test.go

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,13 +86,32 @@ func TestEdgeCases(t *testing.T) {
8686
}
8787

8888
// Case B: Indicator != Delimiter
89-
// With proposed fix, this should use the indicator as delimiter
89+
// This should use the indicator as delimiter
9090
res = ToFormattedCase(input, OptionDelimiter("-"), OptionUpperIndicator("="))
9191
if res != "hello=world" {
9292
t.Errorf("UpperIndicator Override: got %q, want %q", res, "hello=world")
9393
}
9494
})
9595

96+
// 5.1 UpperIndicator with MixCaseSupport (Consistency Check)
97+
t.Run("UpperIndicator MixCase Consistency", func(t *testing.T) {
98+
input := []Word{ExactCaseWord("helloWorld"), SingleCaseWord("foo")}
99+
100+
// Case A: Override behavior
101+
// Expectation: hello=World=foo (UpperIndicator "=" overrides Delimiter "-")
102+
res := ToFormattedCase(input, OptionDelimiter("-"), OptionUpperIndicator("="), OptionMixCaseSupport())
103+
if res != "hello=World=foo" {
104+
t.Errorf("UpperIndicator MixCase Override: got %q, want %q", res, "hello=World=foo")
105+
}
106+
107+
// Case B: Double Delimiter behavior
108+
// Expectation: hello--World--foo (UpperIndicator "-" matches Delimiter "-", so double delimiter)
109+
res = ToFormattedCase(input, OptionDelimiter("-"), OptionUpperIndicator("-"), OptionMixCaseSupport())
110+
if res != "hello--World--foo" {
111+
t.Errorf("UpperIndicator MixCase Double: got %q, want %q", res, "hello--World--foo")
112+
}
113+
})
114+
96115
// 6. Empty and Nil Input
97116
t.Run("Empty and Nil Input", func(t *testing.T) {
98117
res := ToFormattedCase(nil)

types.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,14 @@ func WordsToFormattedCase(words []Word, opts ...any) (string, error) {
249249
}
250250
}
251251

252+
if cfg.upperIndicator != "" {
253+
if cfg.upperIndicator == cfg.delimiter {
254+
cfg.delimiter = cfg.delimiter + cfg.delimiter
255+
} else {
256+
cfg.delimiter = cfg.upperIndicator
257+
}
258+
}
259+
252260
switch cfg.caseMode {
253261
case CMScreaming:
254262
cfg.screaming = true
@@ -324,15 +332,7 @@ func WordsToFormattedCase(words []Word, opts ...any) (string, error) {
324332
result = append(result, w)
325333
}
326334

327-
delimiter := cfg.delimiter
328-
if cfg.upperIndicator != "" {
329-
if cfg.upperIndicator == cfg.delimiter {
330-
delimiter = cfg.delimiter + cfg.delimiter
331-
} else {
332-
delimiter = cfg.upperIndicator
333-
}
334-
}
335-
final := strings.Join(result, delimiter)
335+
final := strings.Join(result, cfg.delimiter)
336336

337337
if cfg.firstUpper {
338338
final = UpperCaseFirst(final)

0 commit comments

Comments
 (0)