From 002a5110714d60138a884a841f338ab5435124f3 Mon Sep 17 00:00:00 2001 From: Karan Chadha Date: Wed, 8 Oct 2025 13:20:56 +0530 Subject: [PATCH] Add enum.parse task to attack-of-the-trolls exercise --- .../.docs/instructions.md | 7 ++++ .../attack-of-the-trolls/.meta/Exemplar.cs | 5 +++ .../attack-of-the-trolls/.meta/config.json | 3 +- .../attack-of-the-trolls/.meta/design.md | 1 + .../attack-of-the-trolls/AttackOfTheTrolls.cs | 5 +++ .../AttackOfTheTrollsTests.cs | 42 +++++++++++++++++++ 6 files changed, 62 insertions(+), 1 deletion(-) diff --git a/exercises/concept/attack-of-the-trolls/.docs/instructions.md b/exercises/concept/attack-of-the-trolls/.docs/instructions.md index e07a9e071b..743fe46a63 100644 --- a/exercises/concept/attack-of-the-trolls/.docs/instructions.md +++ b/exercises/concept/attack-of-the-trolls/.docs/instructions.md @@ -52,4 +52,11 @@ Implement the (_static_) `Permissions.Check()` method that takes the current acc ```csharp Permissions.Check(current: Permission.Write, check: Permission.Read) // => false + +## 5. Parse a permission from a string + +Implement the (_static_) `Permissions.ParsePermission()` method that parses a string representation of a permission into the `Permission` enum: +```csharp +Permissions.ParsePermission("Write") +// => Permission.Write ``` diff --git a/exercises/concept/attack-of-the-trolls/.meta/Exemplar.cs b/exercises/concept/attack-of-the-trolls/.meta/Exemplar.cs index e04341b70a..ad9b007b13 100644 --- a/exercises/concept/attack-of-the-trolls/.meta/Exemplar.cs +++ b/exercises/concept/attack-of-the-trolls/.meta/Exemplar.cs @@ -46,4 +46,9 @@ public static bool Check(Permission current, Permission check) { return current.HasFlag(check); } + + public static Permission ParsePermission(string permissionString) + { + return Enum.Parse(permissionString, ignoreCase: true); + } } diff --git a/exercises/concept/attack-of-the-trolls/.meta/config.json b/exercises/concept/attack-of-the-trolls/.meta/config.json index 58b8a156d8..2aa433433a 100644 --- a/exercises/concept/attack-of-the-trolls/.meta/config.json +++ b/exercises/concept/attack-of-the-trolls/.meta/config.json @@ -4,7 +4,8 @@ ], "contributors": [ "valentin-p", - "yzAlvin" + "yzAlvin", + "karanchadha10" ], "files": { "solution": [ diff --git a/exercises/concept/attack-of-the-trolls/.meta/design.md b/exercises/concept/attack-of-the-trolls/.meta/design.md index 6e060e6335..54315d1ada 100644 --- a/exercises/concept/attack-of-the-trolls/.meta/design.md +++ b/exercises/concept/attack-of-the-trolls/.meta/design.md @@ -9,6 +9,7 @@ - Know how to unset a flag on an enum value. - Know that an enum's underlying type can be changed. - Know how to use bitwise operators to manipulate bits. +- Know how to parse a string to an enum value using `Enum.Parse()`. ## Out of scope diff --git a/exercises/concept/attack-of-the-trolls/AttackOfTheTrolls.cs b/exercises/concept/attack-of-the-trolls/AttackOfTheTrolls.cs index a1a7c272a0..248dc0cadf 100644 --- a/exercises/concept/attack-of-the-trolls/AttackOfTheTrolls.cs +++ b/exercises/concept/attack-of-the-trolls/AttackOfTheTrolls.cs @@ -23,4 +23,9 @@ public static bool Check(Permission current, Permission check) { throw new NotImplementedException("Please implement the (static) Permissions.Check() method"); } + + public static Permission ParsePermission(string permissionString) + { + throw new NotImplementedException("Please implement the (static) Permissions.ParsePermission() method"); + } } diff --git a/exercises/concept/attack-of-the-trolls/AttackOfTheTrollsTests.cs b/exercises/concept/attack-of-the-trolls/AttackOfTheTrollsTests.cs index 8e97ad38d7..ed4afd10e2 100644 --- a/exercises/concept/attack-of-the-trolls/AttackOfTheTrollsTests.cs +++ b/exercises/concept/attack-of-the-trolls/AttackOfTheTrollsTests.cs @@ -173,4 +173,46 @@ public void Check_read_and_write_and_delete_for_all() { Assert.True(Permissions.Check(Permission.Read | Permission.Write | Permission.Delete, Permission.All)); } + + [Fact] + [Task(5)] + public void Parse_read_permission() + { + Assert.Equal(Permission.Read, Permissions.ParsePermission("Read")); + } + + [Fact] + [Task(5)] + public void Parse_write_permission() + { + Assert.Equal(Permission.Write, Permissions.ParsePermission("Write")); + } + + [Fact] + [Task(5)] + public void Parse_delete_permission() + { + Assert.Equal(Permission.Delete, Permissions.ParsePermission("Delete")); + } + + [Fact] + [Task(5)] + public void Parse_all_permission() + { + Assert.Equal(Permission.All, Permissions.ParsePermission("All")); + } + + [Fact] + [Task(5)] + public void Parse_none_permission() + { + Assert.Equal(Permission.None, Permissions.ParsePermission("None")); + } + + [Fact] + [Task(5)] + public void Parse_permission_case_insensitive() + { + Assert.Equal(Permission.Read, Permissions.ParsePermission("read")); + } }