wrote rubric parsing tests

This commit is contained in:
2023-10-25 10:06:55 -06:00
parent 1d58166a5c
commit 246d64c2a0
2 changed files with 32 additions and 17 deletions

View File

@@ -9,6 +9,7 @@
private string rubricText = ""; private string rubricText = "";
private int rubricReloadKey = 0; private int rubricReloadKey = 0;
protected override void OnInitialized() protected override void OnInitialized()
{ {
assignmentContext.StateHasChanged += reload; assignmentContext.StateHasChanged += reload;

View File

@@ -1,4 +1,5 @@
using System.Collections; using System.Collections;
using System.Text;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using YamlDotNet.Serialization; using YamlDotNet.Serialization;
@@ -97,28 +98,41 @@ public record LocalAssignment
return assignmentMarkdown; return assignmentMarkdown;
} }
public string RubricToMarkdown()
{
var builder = new StringBuilder();
foreach (var item in Rubric)
{
var pointLabel = item.Points > 1 ? "pts" : "pt";
builder.Append($"- {item.Points}{pointLabel}: {item.Label}" + Environment.NewLine);
}
return builder.ToString();
}
public static IEnumerable<RubricItem> ParseRubricMarkdown(string rawMarkdown) public static IEnumerable<RubricItem> ParseRubricMarkdown(string rawMarkdown)
{ {
var lines = rawMarkdown.Trim().Split(Environment.NewLine); var lines = rawMarkdown.Trim().Split(Environment.NewLine);
var items = lines.Select(l => var items = lines.Select(parseIndividualRubricItemMarkdown).ToArray();
{
var pointsPattern = @"\s*-\s*(\d+)\s*pt(s)?:";
var match = Regex.Match(l, pointsPattern);
if (!match.Success)
throw new RubricMarkdownParseException($"points not found: {l}");
var points = int.Parse(match.Groups[1].Value);
var label = string.Join(": ", l.Split(": ").Skip(1));
return new RubricItem()
{
Points = points,
Label = label
};
}).ToArray();
return items; return items;
} }
private static RubricItem parseIndividualRubricItemMarkdown(string rawMarkdown)
{
var pointsPattern = @"\s*-\s*(\d+)\s*pt(s)?:";
var match = Regex.Match(rawMarkdown, pointsPattern);
if (!match.Success)
throw new RubricMarkdownParseException($"points not found: {rawMarkdown}");
var points = int.Parse(match.Groups[1].Value);
var label = string.Join(": ", rawMarkdown.Split(": ").Skip(1));
return new RubricItem()
{
Points = points,
Label = label
};
}
} }
public class RubricMarkdownParseException : Exception public class RubricMarkdownParseException : Exception