using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Collections.Generic; using System.IO; namespace YesNt.Interpreter.Tests; [TestClass] public class ProcessingStatementsTests { [TestMethod] public void MultiplicationTest() { YesNtAssert.IsLineEqual("10 * 10 calc", "100"); } [TestMethod] public void DivisionTest() { YesNtAssert.IsLineEqual("90 / 4 calc", "22.5"); } [TestMethod] public void AdditionTest() { YesNtAssert.IsLineEqual("10 + 10 calc", "20"); } [TestMethod] public void SubtractionTest() { YesNtAssert.IsLineEqual("10 - 10 calc", "0"); } [TestMethod] public void ModulusTest() { YesNtAssert.IsLineEqual("10 % 3 calc", "1"); } [TestMethod] public void ExponentiationTest() { YesNtAssert.IsLineEqual("2 ^ 3 calc", "8"); } [TestMethod] public void EvalDecodesSafeStringTest() { YesNtAssert.IsLineEqual("hello~nliworld eval", "hello\nworld"); } [TestMethod] public void SleepInvalidValueFailsTest() { List lines = [ "sleep nope" ]; YesNtAssert.ContainsTerminationMessage(lines, "\"nope\" is not a valid time-out value"); } [TestMethod] public void SleepRunsAndContinuesTest() { List lines = [ "sleep 5", "let result = ok", "${result}" ]; YesNtAssert.IsLastLineEqual(lines, "ok"); } [TestMethod] public void LengthPushesOutParameterTest() { List lines = [ "length hello", "let value = %out", "${value}" ]; YesNtAssert.IsLastLineEqual(lines, "5"); } [TestMethod] public void ImportLoadsScriptTest() { string tempFile = Path.Combine(Path.GetTempPath(), $"yesnt-import-{Guid.NewGuid():N}.ynt"); try { File.WriteAllText(tempFile, "let imported = yes"); List lines = [ $"import {tempFile}", "${imported}" ]; YesNtAssert.IsLastLineEqual(lines, "yes"); } finally { if (File.Exists(tempFile)) { File.Delete(tempFile); } } } [TestMethod] public void ImportMissingFileFailsTest() { List lines = [ $"import {Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString("N"))}.ynt" ]; YesNtAssert.ContainsTerminationMessage(lines, "Could not find file"); } [TestMethod] public void TaskCanUpdateGlobalVariableTest() { List lines = [ "global result = 0", "global result = 1 task", "sleep 50", "${result}" ]; YesNtAssert.IsLastLineEqual(lines, "1", timeout: 3000); } }