< Summary

Information
Line coverage
70%
Covered lines: 22
Uncovered lines: 9
Coverable lines: 31
Total lines: 147
Line coverage: 70.9%
Branch coverage
80%
Covered branches: 8
Total branches: 10
Branch coverage: 80%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
Case(...)100%210%
LowerCase(...)100%210%
UpperCase(...)100%210%
TitleCase(...)100%210%
SentenceCase(...)100%210%
PascalCase(...)100%11100%
CamelCase(...)100%11100%
SnakeCase(...)100%11100%
KebabCase(...)100%11100%
ApplyCase(...)80%101085.71%
ToUpperCase(...)100%210%
ToLowerCase(...)100%210%
ToTitleCase(...)100%11100%
ToSentenceCase(...)100%210%
ToPascalCase(...)100%11100%
ToCamelCase(...)100%11100%
ToSnakeCase(...)100%11100%
ToKebabCase(...)100%11100%

File(s)

https://raw.githubusercontent.com/sandre58/MyNet/85372080fe102cd9ee155ceab49ae000e7f66103/src/MyNet.Text/Extensions/TextCasingExtensions.cs

#LineLine coverage
 1// -----------------------------------------------------------------------
 2// <copyright file="TextCasingExtensions.cs" company="Stéphane ANDRE">
 3// Copyright (c) Stéphane ANDRE. All rights reserved.
 4// </copyright>
 5// -----------------------------------------------------------------------
 6
 7using System;
 8using System.Globalization;
 9using MyNet.Primitives;
 10using MyNet.Text.TextCasing;
 11
 12#pragma warning disable IDE0130 // Namespace does not match folder structure
 13namespace MyNet.Text;
 14#pragma warning restore IDE0130 // Namespace does not match folder structure
 15
 16public static class TextCasingExtensions
 17{
 18    extension(TextPipeline pipeline)
 19    {
 20        /// <summary>
 21        /// Transforms a string using the provided casing transform. Transformations are applied in the provided order.
 22        /// </summary>
 23        /// <param name="transform">The casing transform to apply.</param>
 24        /// <returns>The transformed TextPipeline instance.</returns>
 025        public TextPipeline Case(ITextCasingTransform transform) => pipeline.Apply(transform);
 26
 27        /// <summary>
 28        /// Transforms the string to lower case.
 29        /// </summary>
 30        /// <returns>The transformed TextPipeline instance.</returns>
 031        public TextPipeline LowerCase() => pipeline.Apply(Casing.LowerCase);
 32
 33        /// <summary>
 34        /// Transforms the string to upper case.
 35        /// </summary>
 36        /// <returns>The transformed TextPipeline instance.</returns>
 037        public TextPipeline UpperCase() => pipeline.Apply(Casing.UpperCase);
 38
 39        /// <summary>
 40        /// Transforms the string to title case.
 41        /// </summary>
 42        /// <returns>The transformed TextPipeline instance.</returns>
 043        public TextPipeline TitleCase() => pipeline.Apply(Casing.TitleCase);
 44
 45        /// <summary>
 46        /// Transforms the string to sentence case.
 47        /// </summary>
 48        /// <returns>The transformed TextPipeline instance.</returns>
 049        public TextPipeline SentenceCase() => pipeline.Apply(Casing.SentenceCase);
 50
 51        /// <summary>
 52        /// Transforms the string to PascalCase.
 53        /// </summary>
 54        /// <returns>The transformed TextPipeline instance.</returns>
 355        public TextPipeline PascalCase() => pipeline.Apply(Casing.PascalCase);
 56
 57        /// <summary>
 58        /// Transforms the string to camelCase.
 59        /// </summary>
 60        /// <returns>The transformed TextPipeline instance.</returns>
 361        public TextPipeline CamelCase() => pipeline.Apply(Casing.CamelCase);
 62
 63        /// <summary>
 64        /// Transforms the string to snake_case.
 65        /// </summary>
 66        /// <returns>The transformed TextPipeline instance.</returns>
 367        public TextPipeline SnakeCase() => pipeline.Apply(Casing.SnakeCase);
 68
 69        /// <summary>
 70        /// Transforms the string to kebab-case.
 71        /// </summary>
 72        /// <returns>The transformed TextPipeline instance.</returns>
 373        public TextPipeline KebabCase() => pipeline.Apply(Casing.KebabCase);
 74    }
 75
 76    extension(string input)
 77    {
 78        /// <summary>
 79        /// Transforms a string using the provided casing transform. Transformations are applied in the provided order.
 80        /// </summary>
 81        /// <param name="casing">The casing to apply.</param>
 82        /// <param name="culture">The culture to use for the transformation.</param>
 83        /// <returns>The transformed string.</returns>
 84        public string ApplyCase(LetterCasing casing, CultureInfo? culture = null)
 85        {
 17186            var effectiveCulture = culture.OrCurrent();
 17187            return casing switch
 17188            {
 689                LetterCasing.Normal => input,
 3390                LetterCasing.Title => input.Apply(effectiveCulture, Casing.TitleCase),
 1291                LetterCasing.Lower => input.Apply(effectiveCulture, Casing.LowerCase),
 992                LetterCasing.Upper => input.Apply(effectiveCulture, Casing.UpperCase),
 993                LetterCasing.Sentence => input.Apply(effectiveCulture, Casing.SentenceCase),
 3394                LetterCasing.Pascal => input.Apply(effectiveCulture, Casing.PascalCase),
 3695                LetterCasing.Camel => input.Apply(effectiveCulture, Casing.CamelCase),
 996                LetterCasing.Snake => input.Apply(effectiveCulture, Casing.SnakeCase),
 2497                LetterCasing.Kebab => input.Apply(effectiveCulture, Casing.KebabCase),
 098                _ => throw new ArgumentOutOfRangeException(nameof(casing))
 17199            };
 100        }
 101
 102        /// <summary>
 103        /// Transforms the string to upper case.
 104        /// </summary>
 105        /// <returns>The transformed string.</returns>
 0106        public string ToUpperCase() => input.ApplyCase(LetterCasing.Upper);
 107
 108        /// <summary>
 109        /// Transforms the string to lower case.
 110        /// </summary>
 111        /// <returns>The transformed string.</returns>
 0112        public string ToLowerCase() => input.ApplyCase(LetterCasing.Lower);
 113
 114        /// <summary>
 115        /// Transforms the string to title case.
 116        /// </summary>
 117        /// <returns>The transformed string.</returns>
 18118        public string ToTitleCase() => input.ApplyCase(LetterCasing.Title);
 119
 120        /// <summary>
 121        /// Transforms the string to sentence case.
 122        /// </summary>
 123        /// <returns>The transformed string.</returns>
 0124        public string ToSentenceCase() => input.ApplyCase(LetterCasing.Sentence);
 125
 126        /// <summary>
 127        /// Transforms the string to PascalCase.
 128        /// </summary>
 33129        public string ToPascalCase() => input.ApplyCase(LetterCasing.Pascal);
 130
 131        /// <summary>
 132        /// Transforms the string to camelCase.
 133        /// </summary>
 36134        public string ToCamelCase() => input.ApplyCase(LetterCasing.Camel);
 135
 136        /// <summary>
 137        /// Converts the string to snake_case.
 138        /// </summary>
 9139        public string ToSnakeCase() => input.ApplyCase(LetterCasing.Snake);
 140
 141        /// <summary>
 142        /// Converts the string to kebab-case.
 143        /// </summary>
 24144        public string ToKebabCase() => input.ApplyCase(LetterCasing.Kebab);
 145    }
 146}
 147