Skip to content

Commit 2e15665

Browse files
committed
Improve HexToRGB24Converter
1 parent 5c6507d commit 2e15665

File tree

2 files changed

+83
-7
lines changed

2 files changed

+83
-7
lines changed

src/RxTelegram.Bot/Utils/HexToRGB24Converter.cs

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,29 @@
33

44
namespace RxTelegram.Bot.Utils;
55

6-
public class HexToRgb24
6+
public static class HexToRgb24
77
{
8-
public int Convert(string hexColor) => int.Parse(FormatHexString(hexColor), NumberStyles.HexNumber);
8+
public static int Convert(string hexColor)
9+
{
10+
var formatHexString = FormatHexString(hexColor);
11+
if (formatHexString.Length != 6)
12+
{
13+
throw new ArgumentException("Invalid hex color", nameof(hexColor));
14+
}
15+
return int.Parse(formatHexString, NumberStyles.HexNumber);
16+
}
917

10-
public bool TryConvert(string hexColor, out int result) => int.TryParse(FormatHexString(hexColor), NumberStyles.HexNumber, null, out result);
18+
public static bool TryConvert(string hexColor, out int result)
19+
{
20+
var formatHexString = FormatHexString(hexColor);
21+
if (formatHexString.Length == 6)
22+
{
23+
return int.TryParse(FormatHexString(hexColor), NumberStyles.HexNumber, null, out result);
24+
}
25+
26+
result = -1;
27+
return false;
28+
}
1129

1230
private static string FormatHexString(string hexColor)
1331
{
@@ -16,10 +34,6 @@ private static string FormatHexString(string hexColor)
1634
{
1735
hexColor = string.Concat(hexColor[0], hexColor[0], hexColor[1], hexColor[1], hexColor[2], hexColor[2]);
1836
}
19-
else if (hexColor.Length != 6)
20-
{
21-
throw new ArgumentException("Hex color must be 3 or 6 characters long.");
22-
}
2337

2438
return hexColor;
2539
}

src/UnitTests/HexToRgb24Tests.cs

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
using System;
2+
using NUnit.Framework;
3+
using RxTelegram.Bot.Utils;
4+
5+
namespace RxTelegram.Bot.UnitTests;
6+
7+
[TestFixture]
8+
public class HexToRgb24Tests
9+
{
10+
[TestCase("#FF0000", ExpectedResult = 16711680)] // Red
11+
[TestCase("#00FF00", ExpectedResult = 65280)] // Green
12+
[TestCase("#0000FF", ExpectedResult = 255)] // Blue
13+
[TestCase("#000000", ExpectedResult = 0)] // Black
14+
[TestCase("#FFFFFF", ExpectedResult = 16777215)] // White
15+
[TestCase("#ABCDEF", ExpectedResult = 11259375)] // Random color
16+
public int Convert_ValidHexColor_ReturnsRgbValue(string hexColor) => HexToRgb24.Convert(hexColor);
17+
18+
[TestCase("#0000000")]
19+
[TestCase("#00000000")]
20+
public void Convert_InvalidHexLength_ThrowsArgumentException(string hexColor) =>
21+
Assert.Throws<ArgumentException>(() => HexToRgb24.Convert(hexColor));
22+
23+
[TestCase("#G00000")]
24+
[TestCase("#00000G")]
25+
public void Convert_InvalidHexColor_ThrowsFormatException(string hexColor) =>
26+
Assert.Throws<FormatException>(() => HexToRgb24.Convert(hexColor));
27+
28+
[TestCase("#0000000")]
29+
[TestCase("#00000000")]
30+
public void TryConvert_InvalidHexLength_ThrowsArgumentException(string hexColor) =>
31+
Assert.That(HexToRgb24.TryConvert(hexColor, out _), Is.False);
32+
33+
[TestCase("#G00000")]
34+
[TestCase("#00000G")]
35+
public void TryConvert_InvalidHexColor_ThrowsFormatException(string hexColor) =>
36+
Assert.That(HexToRgb24.TryConvert(hexColor, out _), Is.False);
37+
38+
[TestCase("#FF0000", ExpectedResult = true)] // Red
39+
[TestCase("#00FF00", ExpectedResult = true)] // Green
40+
[TestCase("#0000FF", ExpectedResult = true)] // Blue
41+
[TestCase("#000000", ExpectedResult = true)] // Black
42+
[TestCase("#FFFFFF", ExpectedResult = true)] // White
43+
[TestCase("#ABCDEF", ExpectedResult = true)] // Random color
44+
[TestCase("#G00000", ExpectedResult = false)]
45+
[TestCase("#00000G", ExpectedResult = false)]
46+
[TestCase("#0000000", ExpectedResult = false)]
47+
[TestCase("#00000000", ExpectedResult = false)]
48+
public bool TryConvert_ValidHexColor_ReturnsTrue(string hexColor) => HexToRgb24.TryConvert(hexColor, out _);
49+
50+
[TestCase("#FF0000", 16711680)] // Red
51+
[TestCase("#00FF00", 65280)] // Green
52+
[TestCase("#0000FF", 255)] // Blue
53+
[TestCase("#000000", 0)] // Black
54+
[TestCase("#FFFFFF", 16777215)] // White
55+
[TestCase("#ABCDEF", 11259375)] // Random color
56+
public void TryConvert_ValidHexColor_ReturnsRgbValue(string hexColor, int expected)
57+
{
58+
HexToRgb24.TryConvert(hexColor, out var result);
59+
Assert.That(result, Is.EqualTo(expected));
60+
}
61+
62+
}

0 commit comments

Comments
 (0)