namespace Nonemm.Session.Tests; public class MessageFileTests { private static string Lines(int count, string what) => string.Join('\n', Enumerable.Range(1, count).Select(at => $"F{at} {what},{what} {at}")); [Fact] public void ALabelAndAMessageAreSplitOnTheFirstComma() { MessageFile file = MessageFile.Parse("F1 CQ, CQ TEST {MYCALL}, AGAIN"); FunctionKey key = file.Keys(isRunning: true)[0]; Assert.Equal("F1 CQ", key.Label); Assert.Equal("CQ TEST {MYCALL}, AGAIN", key.Message); } [Fact] public void CommentLinesAreNotKeys() { MessageFile file = MessageFile.Parse("# CW messages\nF1 CQ,CQ TEST\n#and another\nF2 Exch,5NN"); Assert.Equal("CQ TEST", file.Keys(isRunning: true)[0].Message); Assert.Equal("5NN", file.Keys(isRunning: true)[1].Message); } [Fact] public void TwoAmpersandsInALabelStandForOne() { Assert.Equal("S&P", MessageFile.Parse("S&&P,TEST").Keys(isRunning: true)[0].Label); } [Fact] public void ALineWithNoCommaIsAllMessage() { FunctionKey key = MessageFile.Parse("CQ TEST").Keys(isRunning: true)[0]; Assert.Equal("", key.Label); Assert.Equal("CQ TEST", key.Message); } [Fact] public void AFileOfTwelveLinesSendsTheSameMessagesEitherWay() { MessageFile file = MessageFile.Parse(Lines(12, "RUN")); Assert.Equal("RUN 1", file.Keys(isRunning: true)[0].Message); Assert.Equal("RUN 1", file.Keys(isRunning: false)[0].Message); } [Fact] public void TheSecondTwelveLinesAreTheSearchingKeys() { MessageFile file = MessageFile.Parse(Lines(12, "RUN") + "\n" + Lines(12, "SNP")); Assert.Equal("RUN 2", file.Keys(isRunning: true)[1].Message); Assert.Equal("SNP 2", file.Keys(isRunning: false)[1].Message); } [Fact] public void AFileThatStopsPartWayThroughFallsBackToTheRunningMessage() { MessageFile file = MessageFile.Parse(Lines(12, "RUN") + "\n" + Lines(3, "SNP")); Assert.Equal("SNP 3", file.Keys(isRunning: false)[2].Message); Assert.Equal("RUN 4", file.Keys(isRunning: false)[3].Message); } [Fact] public void AShortFileLeavesTheRestOfTheKeysEmpty() { MessageFile file = MessageFile.Parse("F1 CQ,CQ TEST"); Assert.Equal("", file.Keys(isRunning: true)[1].Message); Assert.Equal(12, file.Keys(isRunning: true).Count); } [Fact] public void TheNewlineThatEndsTheFileIsNotABlankKey() { MessageFile file = MessageFile.Parse(Lines(12, "RUN") + "\nF1 SNP,SNP CQ\n"); Assert.Equal("SNP CQ", file.Keys(isRunning: false)[0].Message); Assert.Equal("RUN 2", file.Keys(isRunning: false)[1].Message); } [Fact] public void ABlankLineInTheMiddleIsAKeyWithNothingInIt() { MessageFile file = MessageFile.Parse("F1 CQ,CQ TEST\n\nF3 TU,TU"); Assert.Equal("", file.Keys(isRunning: true)[1].Message); Assert.Equal("TU", file.Keys(isRunning: true)[2].Message); } }