BadScript 2
Loading...
Searching...
No Matches
BadUnitTests.cs
Go to the documentation of this file.
1using BadHtml;
2
9using BadScript2.IO;
16
17using HtmlAgilityPack;
18
19namespace BadScript2.Tests;
20
21public class BadUnitTests
22{
27
32
37
42
47
52
57
62
63
67 private static string TestDirectory => Path.Combine(TestContext.CurrentContext.TestDirectory, "tests");
68
72 private static string ScriptTestDirectory => Path.Combine(TestDirectory, "basic");
73
77 private static string HtmlTestDirectory => Path.Combine(TestDirectory, "html");
78
83 {
84 get
85 {
86 if (s_Context != null)
87 {
88 return s_Context;
89 }
90
91 BadRuntime runtime = new BadRuntime()
92 .UseCommonInterop()
93 .UseLinqApi()
94 .UseFileSystemApi()
95 .UseJsonApi();
96
97 BadSettingsProvider.RootSettings
98 .FindOrCreateProperty("Runtime.NativeOptimizations.UseConstantFunctionCaching")
99 .SetValue(true);
100
101
104 runtime.UseNUnitConsole(builder);
105
106 string[] files = BadFileSystem.Instance.GetFiles(
108 $".{BadRuntimeSettings.Instance.FileExtension}",
109 true
110 )
111 .ToArray();
112 BadConsole.WriteLine($"Loading Files...({files.Length})");
113 builder.Register(false, false, files);
114
116
117 return s_Context;
118 }
119 }
120
125 {
126 get
127 {
128 if (s_OptimizedFoldingContext != null)
129 {
131 }
132
133 BadRuntime runtime = new BadRuntime()
134 .UseCommonInterop()
135 .UseLinqApi()
136 .UseFileSystemApi()
137 .UseJsonApi();
138
139 BadSettingsProvider.RootSettings
140 .FindOrCreateProperty("Runtime.NativeOptimizations.UseConstantFunctionCaching")
141 .SetValue(true);
142
143
146 runtime.UseNUnitConsole(builder);
147
148 string[] files = BadFileSystem.Instance.GetFiles(
150 $".{BadRuntimeSettings.Instance.FileExtension}",
151 true
152 )
153 .ToArray();
154 BadConsole.WriteLine($"Loading Files...({files.Length})");
155 builder.Register(true, false, files);
156
158
160 }
161 }
162
167 {
168 get
169 {
171 {
173 }
174
175 BadRuntime runtime = new BadRuntime()
176 .UseCommonInterop()
177 .UseLinqApi()
178 .UseFileSystemApi()
179 .UseJsonApi();
180
181 BadSettingsProvider.RootSettings
182 .FindOrCreateProperty("Runtime.NativeOptimizations.UseConstantFunctionCaching")
183 .SetValue(true);
184
185
188 runtime.UseNUnitConsole(builder);
189
190 string[] files = BadFileSystem.Instance.GetFiles(
192 $".{BadRuntimeSettings.Instance.FileExtension}",
193 true
194 )
195 .ToArray();
196 BadConsole.WriteLine($"Loading Files...({files.Length})");
197 builder.Register(false, true, files);
198
200
202 }
203 }
204
209 {
210 get
211 {
212 if (s_OptimizedContext != null)
213 {
214 return s_OptimizedContext;
215 }
216
217 BadRuntime runtime = new BadRuntime()
218 .UseCommonInterop()
219 .UseLinqApi()
220 .UseFileSystemApi()
221 .UseJsonApi();
222
223 BadSettingsProvider.RootSettings
224 .FindOrCreateProperty("Runtime.NativeOptimizations.UseConstantFunctionCaching")
225 .SetValue(true);
226
227
230 runtime.UseNUnitConsole(builder);
231
232 string[] files = BadFileSystem.Instance.GetFiles(
234 $".{BadRuntimeSettings.Instance.FileExtension}",
235 true
236 )
237 .ToArray();
238 BadConsole.WriteLine($"Loading Files...({files.Length})");
239 builder.Register(true, true, files);
240
242
243 return s_OptimizedContext;
244 }
245 }
246
251 {
252 get
253 {
254 if (s_CompiledContext != null)
255 {
256 return s_CompiledContext;
257 }
258
259 BadRuntime runtime = new BadRuntime()
260 .UseCommonInterop()
261 .UseLinqApi()
262 .UseFileSystemApi()
263 .UseJsonApi();
264
265 BadSettingsProvider.RootSettings
266 .FindOrCreateProperty("Runtime.NativeOptimizations.UseConstantFunctionCaching")
267 .SetValue(true);
268
269
272 runtime.UseNUnitConsole(builder);
273
274 string[] files = BadFileSystem.Instance.GetFiles(
276 $".{BadRuntimeSettings.Instance.FileExtension}",
277 true
278 )
279 .ToArray();
280 BadConsole.WriteLine($"Loading Files...({files.Length})");
281 builder.Register(false, false, files);
282
284
285 return s_CompiledContext;
286 }
287 }
288
293 {
294 get
295 {
297 {
299 }
300
301 BadRuntime runtime = new BadRuntime()
302 .UseCommonInterop()
303 .UseLinqApi()
304 .UseFileSystemApi()
305 .UseJsonApi();
306
307 BadSettingsProvider.RootSettings
308 .FindOrCreateProperty("Runtime.NativeOptimizations.UseConstantFunctionCaching")
309 .SetValue(true);
310
311
314 runtime.UseNUnitConsole(builder);
315
316 string[] files = BadFileSystem.Instance.GetFiles(
318 $".{BadRuntimeSettings.Instance.FileExtension}",
319 true
320 )
321 .ToArray();
322 BadConsole.WriteLine($"Loading Files...({files.Length})");
323 builder.Register(true, false, files);
324
326
328 }
329 }
330
331
336 {
337 get
338 {
340 {
342 }
343
344 BadRuntime runtime = new BadRuntime()
345 .UseCommonInterop()
346 .UseLinqApi()
347 .UseFileSystemApi()
348 .UseJsonApi();
349
350 BadSettingsProvider.RootSettings
351 .FindOrCreateProperty("Runtime.NativeOptimizations.UseConstantFunctionCaching")
352 .SetValue(true);
353
354
357 runtime.UseNUnitConsole(builder);
358
359 string[] files = BadFileSystem.Instance.GetFiles(
361 $".{BadRuntimeSettings.Instance.FileExtension}",
362 true
363 )
364 .ToArray();
365 BadConsole.WriteLine($"Loading Files...({files.Length})");
366 builder.Register(false, true, files);
367
369
371 }
372 }
373
374
379 {
380 get
381 {
382 if (s_CompiledOptimizedContext != null)
383 {
385 }
386
387 BadRuntime runtime = new BadRuntime()
388 .UseCommonInterop()
389 .UseLinqApi()
390 .UseFileSystemApi()
391 .UseJsonApi();
392
393 BadSettingsProvider.RootSettings
394 .FindOrCreateProperty("Runtime.NativeOptimizations.UseConstantFunctionCaching")
395 .SetValue(true);
396
397
400 runtime.UseNUnitConsole(builder);
401
402 string[] files = BadFileSystem.Instance.GetFiles(
404 $".{BadRuntimeSettings.Instance.FileExtension}",
405 true
406 )
407 .ToArray();
408 BadConsole.WriteLine($"Loading Files...({files.Length})");
409 builder.Register(false, true, files);
410
412
414 }
415 }
416
417
421 [SetUp]
422 public void Setup()
423 {
424 Context.Setup();
432
433 //Required to get the raw Assert.Pass exception instead of the runtime exception that is caught
434 BadRuntimeSettings.Instance.CatchRuntimeExceptions = false;
435 }
436
443 {
444 return Context.GetTestCases() ?? throw new BadRuntimeException("Context is null");
445 }
446
447
454 {
456 throw new BadRuntimeException("OptimizedFoldingContext is null");
457 }
458
465 {
467 throw new BadRuntimeException("OptimizedSubstitutionContext is null");
468 }
469
476 {
477 return OptimizedContext.GetTestCases() ?? throw new BadRuntimeException("OptimizedContext is null");
478 }
479
486 {
487 if (CompiledContext == null)
488 {
489 throw new BadRuntimeException("CompiledContext is null");
490 }
491
492
494 .Where(x => x.AllowCompile)
495 .Select(
496 x =>
497 {
500
501 return new BadNUnitTestCase(compiled, x.TestName, true);
502 }
503 )
504 .ToArray();
505 }
506
512 private static string[] GetHtmlTemplateFiles()
513 {
514 return BadFileSystem.Instance.GetFiles(HtmlTestDirectory, ".bhtml", true).ToArray();
515 }
516
517
524 {
526 {
527 throw new BadRuntimeException("CompiledOptimizedFoldingContext is null");
528 }
529
530
532 .Where(x => x.AllowCompile)
533 .Select(
534 x =>
535 {
538
539 return new BadNUnitTestCase(compiled, x.TestName, true);
540 }
541 )
542 .ToArray();
543 }
544
545
552 {
554 {
555 throw new BadRuntimeException("CompiledOptimizedSubstitutionContext is null");
556 }
557
558
560 .Where(x => x.AllowCompile)
561 .Select(
562 x =>
563 {
566
567 return new BadNUnitTestCase(compiled, x.TestName, true);
568 }
569 )
570 .ToArray();
571 }
572
573
580 {
581 if (CompiledOptimizedContext == null)
582 {
583 throw new BadRuntimeException("CompiledOptimizedContext is null");
584 }
585
586
588 .Where(x => x.AllowCompile)
589 .Select(
590 x =>
591 {
594
595 return new BadNUnitTestCase(compiled, x.TestName, true);
596 }
597 )
598 .ToArray();
599 }
600
601
606 [TestCaseSource(nameof(GetTestCases))]
607 public void Test(BadNUnitTestCase testCase)
608 {
609 Context.Run(testCase);
610 }
611
616 [TestCaseSource(nameof(GetOptimizedFoldingTestCases))]
618 {
620 }
621
626 [TestCaseSource(nameof(GetOptimizedSubstitutionTestCases))]
628 {
630 }
631
636 [TestCaseSource(nameof(GetOptimizedTestCases))]
637 public void TestOptimized(BadNUnitTestCase testCase)
638 {
639 OptimizedContext.Run(testCase);
640 }
641
646 [TestCaseSource(nameof(GetCompiledTestCases))]
647 public void TestCompiled(BadNUnitTestCase testCase)
648 {
649 CompiledContext.Run(testCase);
650 }
651
656 [TestCaseSource(nameof(GetCompiledOptimizedFoldingTestCases))]
661
666 [TestCaseSource(nameof(GetCompiledOptimizedSubstitutionTestCases))]
671
676 [TestCaseSource(nameof(GetCompiledOptimizedTestCases))]
678 {
680 }
681
687 private static HtmlDocument LoadReference(string file)
688 {
689 HtmlDocument reference = new HtmlDocument();
690 reference.Load(file);
691
692 return reference;
693 }
694
699 [Test]
700 [TestCaseSource(nameof(GetHtmlTemplateFiles))]
701 public void TestHtmlTemplateDefault(string file)
702 {
704 string referenceFile = Path.ChangeExtension(file, $".{(options.SkipEmptyTextNodes ? "skip" : "default")}.html");
705 HtmlDocument result = BadHtmlTemplate.Create(file).RunTemplate(null, options);
706
707 if (BadFileSystem.Instance.Exists(referenceFile))
708 {
709 HtmlDocument reference = LoadReference(referenceFile);
710 Assert.That(result.DocumentNode.OuterHtml, Is.EqualTo(reference.DocumentNode.OuterHtml.Replace("\r\n", Environment.NewLine)));
711 }
712 else
713 {
714 BadFileSystem.Instance.CreateDirectory(Path.GetDirectoryName(referenceFile)!, true);
715 result.Save(referenceFile);
716 Assert.Inconclusive("Reference file does not exist. Saving...");
717 }
718 }
719
724 [Test]
725 [TestCaseSource(nameof(GetHtmlTemplateFiles))]
726 public void TestHtmlTemplateSkipEmpty(string file)
727 {
729 {
730 SkipEmptyTextNodes = true,
731 };
732 string referenceFile = Path.ChangeExtension(file, $".{(options.SkipEmptyTextNodes ? "skip" : "default")}.html");
733 HtmlDocument result = BadHtmlTemplate.Create(file).RunTemplate(null, options);
734
735 if (BadFileSystem.Instance.Exists(referenceFile))
736 {
737 HtmlDocument reference = LoadReference(referenceFile);
738 Assert.That(result.DocumentNode.OuterHtml, Is.EqualTo(reference.DocumentNode.OuterHtml.Replace("\r\n", Environment.NewLine)));
739 }
740 else
741 {
742 BadFileSystem.Instance.CreateDirectory(Path.GetDirectoryName(referenceFile)!, true);
743 result.Save(referenceFile);
744 Assert.Inconclusive("Reference file does not exist. Saving...");
745 }
746 }
747
748
752 [TearDown]
764}
Implements a Html Template.
static BadHtmlTemplate Create(string file, IFileSystem? fileSystem=null)
Creates a new Template.
HtmlDocument RunTemplate(object? model=null, BadHtmlTemplateOptions? options=null, BadScope? caller=null)
Runs the Template with the specified arguments.
Options for the Html Template Engine.
Exposes the BadScript Runtime Functionality to Consumers.
Definition BadRuntime.cs:28
Wrapper class for the console abstraction.
Definition BadConsole.cs:12
static void WriteLine(string str)
Writes a string to the console and appends a newline.
Definition BadConsole.cs:76
Public interface for the filesystem abstraction of the BadScript Engine.
static IFileSystem Instance
File System implementation.
Represents a BadScript NUnit Test Case.
BadUnitTestContext CreateContext(string workingDir)
Creates a new BadUnitTestContext.
void Register(bool optimizeFolding, bool optimizeSubstitution, params string[] files)
Registers one or multiple files to the Test Context.
Implements a BadScript NUnit Test Context.
static void Run(IEnumerable< BadObject > enumerable)
Runs an enumeration.
BadNUnitTestCase[] GetTestCases()
Returns all Test Cases.
void Teardown()
Runs all Teardown Functions.
The Expression Function Implementation used if a function gets defined in the Source Code.
static BadCompiledFunction CompileFunction(BadExpressionFunction func, bool useOverride)
Compiles a Function.
void TestOptimizedFolding(BadNUnitTestCase testCase)
Runs a Test Case.
void TestCompiledOptimizedSubstitution(BadNUnitTestCase testCase)
Runs a Test Case.
static BadNUnitTestCase[] GetOptimizedSubstitutionTestCases()
Gets all Test Cases.
static BadNUnitTestCase[] GetOptimizedFoldingTestCases()
Gets all Test Cases.
static string[] GetHtmlTemplateFiles()
Gets all HTML Test Cases.
static BadUnitTestContext CompiledOptimizedFoldingContext
The Compiled Optimized Folding Test Context.
static BadUnitTestContext Context
The Test Context.
void Test(BadNUnitTestCase testCase)
Runs a Test Case.
static BadUnitTestContext OptimizedSubstitutionContext
The Optimized Substitution Test Context.
static BadNUnitTestCase[] GetCompiledOptimizedFoldingTestCases()
Gets all Test Cases.
static BadUnitTestContext CompiledContext
The Compiled Test Context.
static string ScriptTestDirectory
The Script Test Directory.
static BadUnitTestContext CompiledOptimizedSubstitutionContext
The Compiled Optimized Substitution Test Context.
void Setup()
Setup the Test Contexts.
void TestOptimized(BadNUnitTestCase testCase)
Runs a Test Case.
static BadUnitTestContext CompiledOptimizedContext
The Compiled Optimized Test Context.
void TestHtmlTemplateDefault(string file)
Tests the Html Templates with the default options.
static ? BadUnitTestContext s_OptimizedFoldingContext
The Optimized Folding Test Context.
static string TestDirectory
The Test Directory.
void TestOptimizedSubstitution(BadNUnitTestCase testCase)
Runs a Test Case.
static HtmlDocument LoadReference(string file)
Loads a Reference File.
static BadNUnitTestCase[] GetCompiledOptimizedTestCases()
Gets all Test Cases.
static BadNUnitTestCase[] GetOptimizedTestCases()
Gets all Test Cases.
static ? BadUnitTestContext s_CompiledOptimizedSubstitutionContext
The Compiled Optimized Substitution Test Context.
static ? BadUnitTestContext s_CompiledContext
The Compiled Test Context.
static BadNUnitTestCase[] GetCompiledOptimizedSubstitutionTestCases()
Gets all Test Cases.
void TestCompiledOptimized(BadNUnitTestCase testCase)
Runs a Test Case.
void TestCompiled(BadNUnitTestCase testCase)
Runs a Test Case.
static ? BadUnitTestContext s_OptimizedSubstitutionContext
The Optimized Substitution Test Context.
static ? BadUnitTestContext s_CompiledOptimizedFoldingContext
The Compiled Optimized Folding Test Context.
static ? BadUnitTestContext s_OptimizedContext
The Optimized Test Context.
static ? BadUnitTestContext s_Context
The Test Context.
static string HtmlTestDirectory
The HTML Test Directory.
static BadUnitTestContext OptimizedContext
The Optimized Test Context.
static BadNUnitTestCase[] GetCompiledTestCases()
Gets all Test Cases.
static BadUnitTestContext OptimizedFoldingContext
The Optimized Folding Test Context.
void TearDown()
Tears down the Test Contexts.
static ? BadUnitTestContext s_CompiledOptimizedContext
The Compiled Optimized Test Context.
static BadNUnitTestCase[] GetTestCases()
Gets all Test Cases.
void TestHtmlTemplateSkipEmpty(string file)
Tests the Html Templates with the SkipEmptyTextNodes option.
void TestCompiledOptimizedFolding(BadNUnitTestCase testCase)
Runs a Test Case.
void CreateDirectory(string path, bool recursive=false)
Creates a new directory.
IEnumerable< string > GetFiles(string path, string extension, bool recursive)
Returns all files in the given directory that match the specified extension.
bool Exists(string path)
Returns true if the given path is a file or directory.
A Html Template Generator based on BadScript2.
Contains a Console Abstraction Layer to be able to Simulate Console Input/Output over the Network.
Definition BadConsole.cs:6
Contains IO Implementation for the BadScript2 Runtime.
Contains Common Interop Extensions and APIs for the BadScript2 Runtime.
Contains IO Extensions and APIs for the BadScript2 Runtime.
Contains JSON Extensions and APIs for the BadScript2 Runtime.
Definition BadJson.cs:11
Contains Linq Extensions and APIs for the BadScript2 Runtime.
Contains NUnit Extensions and APIs for the BadScript2 Runtime.
Definition BadNUnitApi.cs:7
Contains the Error Objects for the BadScript2 Language.
Contains Runtime Function Objects.
Contains Runtime Settings Objects.
Contains the Compiler for the BadVirtualMachine.
Contains the Virtual Machine Implementation.
Contains the Settings Implementation.