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
103 runtime.UseNUnitConsole(builder);
104
106 $".{BadRuntimeSettings.Instance.FileExtension}",
107 true
108 )
109 .ToArray();
110 BadConsole.WriteLine($"Loading Files...({files.Length})");
111 builder.Register(false, false, files);
112
114
115 return s_Context;
116 }
117 }
118
123 {
124 get
125 {
126 if (s_OptimizedFoldingContext != null)
127 {
129 }
130
131 BadRuntime runtime = new BadRuntime()
132 .UseCommonInterop()
133 .UseLinqApi()
134 .UseFileSystemApi()
135 .UseJsonApi();
136
137 BadSettingsProvider.RootSettings
138 .FindOrCreateProperty("Runtime.NativeOptimizations.UseConstantFunctionCaching")
139 .SetValue(true);
140
143 runtime.UseNUnitConsole(builder);
144
146 $".{BadRuntimeSettings.Instance.FileExtension}",
147 true
148 )
149 .ToArray();
150 BadConsole.WriteLine($"Loading Files...({files.Length})");
151 builder.Register(true, false, files);
152
154
156 }
157 }
158
163 {
164 get
165 {
167 {
169 }
170
171 BadRuntime runtime = new BadRuntime()
172 .UseCommonInterop()
173 .UseLinqApi()
174 .UseFileSystemApi()
175 .UseJsonApi();
176
177 BadSettingsProvider.RootSettings
178 .FindOrCreateProperty("Runtime.NativeOptimizations.UseConstantFunctionCaching")
179 .SetValue(true);
180
183 runtime.UseNUnitConsole(builder);
184
186 $".{BadRuntimeSettings.Instance.FileExtension}",
187 true
188 )
189 .ToArray();
190 BadConsole.WriteLine($"Loading Files...({files.Length})");
191 builder.Register(false, true, files);
192
194
196 }
197 }
198
203 {
204 get
205 {
206 if (s_OptimizedContext != null)
207 {
208 return s_OptimizedContext;
209 }
210
211 BadRuntime runtime = new BadRuntime()
212 .UseCommonInterop()
213 .UseLinqApi()
214 .UseFileSystemApi()
215 .UseJsonApi();
216
217 BadSettingsProvider.RootSettings
218 .FindOrCreateProperty("Runtime.NativeOptimizations.UseConstantFunctionCaching")
219 .SetValue(true);
220
223 runtime.UseNUnitConsole(builder);
224
226 $".{BadRuntimeSettings.Instance.FileExtension}",
227 true
228 )
229 .ToArray();
230 BadConsole.WriteLine($"Loading Files...({files.Length})");
231 builder.Register(true, true, files);
232
234
235 return s_OptimizedContext;
236 }
237 }
238
243 {
244 get
245 {
246 if (s_CompiledContext != null)
247 {
248 return s_CompiledContext;
249 }
250
251 BadRuntime runtime = new BadRuntime()
252 .UseCommonInterop()
253 .UseLinqApi()
254 .UseFileSystemApi()
255 .UseJsonApi();
256
257 BadSettingsProvider.RootSettings
258 .FindOrCreateProperty("Runtime.NativeOptimizations.UseConstantFunctionCaching")
259 .SetValue(true);
260
263 runtime.UseNUnitConsole(builder);
264
266 $".{BadRuntimeSettings.Instance.FileExtension}",
267 true
268 )
269 .ToArray();
270 BadConsole.WriteLine($"Loading Files...({files.Length})");
271 builder.Register(false, false, files);
272
274
275 return s_CompiledContext;
276 }
277 }
278
283 {
284 get
285 {
287 {
289 }
290
291 BadRuntime runtime = new BadRuntime()
292 .UseCommonInterop()
293 .UseLinqApi()
294 .UseFileSystemApi()
295 .UseJsonApi();
296
297 BadSettingsProvider.RootSettings
298 .FindOrCreateProperty("Runtime.NativeOptimizations.UseConstantFunctionCaching")
299 .SetValue(true);
300
303 runtime.UseNUnitConsole(builder);
304
306 $".{BadRuntimeSettings.Instance.FileExtension}",
307 true
308 )
309 .ToArray();
310 BadConsole.WriteLine($"Loading Files...({files.Length})");
311 builder.Register(true, false, files);
312
314
316 }
317 }
318
319
324 {
325 get
326 {
328 {
330 }
331
332 BadRuntime runtime = new BadRuntime()
333 .UseCommonInterop()
334 .UseLinqApi()
335 .UseFileSystemApi()
336 .UseJsonApi();
337
338 BadSettingsProvider.RootSettings
339 .FindOrCreateProperty("Runtime.NativeOptimizations.UseConstantFunctionCaching")
340 .SetValue(true);
341
344 runtime.UseNUnitConsole(builder);
345
347 $".{BadRuntimeSettings.Instance.FileExtension}",
348 true
349 )
350 .ToArray();
351 BadConsole.WriteLine($"Loading Files...({files.Length})");
352 builder.Register(false, true, files);
353
355
357 }
358 }
359
360
365 {
366 get
367 {
368 if (s_CompiledOptimizedContext != null)
369 {
371 }
372
373 BadRuntime runtime = new BadRuntime()
374 .UseCommonInterop()
375 .UseLinqApi()
376 .UseFileSystemApi()
377 .UseJsonApi();
378
379 BadSettingsProvider.RootSettings
380 .FindOrCreateProperty("Runtime.NativeOptimizations.UseConstantFunctionCaching")
381 .SetValue(true);
382
385 runtime.UseNUnitConsole(builder);
386
388 $".{BadRuntimeSettings.Instance.FileExtension}",
389 true
390 )
391 .ToArray();
392 BadConsole.WriteLine($"Loading Files...({files.Length})");
393 builder.Register(false, true, files);
394
396
398 }
399 }
400
401
405 [SetUp]
406 public void Setup()
407 {
408 Context.Setup();
416
417 //Required to get the raw Assert.Pass exception instead of the runtime exception that is caught
418 BadRuntimeSettings.Instance.CatchRuntimeExceptions = false;
419 }
420
427 {
428 return Context.GetTestCases() ?? throw new BadRuntimeException("Context is null");
429 }
430
431
438 {
440 throw new BadRuntimeException("OptimizedFoldingContext is null");
441 }
442
449 {
451 throw new BadRuntimeException("OptimizedSubstitutionContext is null");
452 }
453
460 {
461 return OptimizedContext.GetTestCases() ?? throw new BadRuntimeException("OptimizedContext is null");
462 }
463
470 {
471 if (CompiledContext == null)
472 {
473 throw new BadRuntimeException("CompiledContext is null");
474 }
475
477 .Where(x => x.AllowCompile)
478 .Select(x =>
479 {
482
483 return new BadNUnitTestCase(compiled, x.TestName, true);
484 }
485 )
486 .ToArray();
487 }
488
494 private static string[] GetHtmlTemplateFiles()
495 {
496 return BadFileSystem.Instance.GetFiles(HtmlTestDirectory, ".bhtml", true)
497 .ToArray();
498 }
499
500
507 {
509 {
510 throw new BadRuntimeException("CompiledOptimizedFoldingContext is null");
511 }
512
514 .Where(x => x.AllowCompile)
515 .Select(x =>
516 {
518 (BadExpressionFunction)x.Function!;
519
520 BadCompiledFunction compiled =
522
523 return new BadNUnitTestCase(compiled, x.TestName, true);
524 }
525 )
526 .ToArray();
527 }
528
529
536 {
538 {
539 throw new BadRuntimeException("CompiledOptimizedSubstitutionContext is null");
540 }
541
543 .Where(x => x.AllowCompile)
544 .Select(x =>
545 {
547 (BadExpressionFunction)x.Function!;
548
549 BadCompiledFunction compiled =
551
552 return new BadNUnitTestCase(compiled, x.TestName, true);
553 }
554 )
555 .ToArray();
556 }
557
558
565 {
566 if (CompiledOptimizedContext == null)
567 {
568 throw new BadRuntimeException("CompiledOptimizedContext is null");
569 }
570
572 .Where(x => x.AllowCompile)
573 .Select(x =>
574 {
576
577 BadCompiledFunction compiled =
579
580 return new BadNUnitTestCase(compiled, x.TestName, true);
581 }
582 )
583 .ToArray();
584 }
585
586
591 [TestCaseSource(nameof(GetTestCases))]
592 public void Test(BadNUnitTestCase testCase)
593 {
594 Context.Run(testCase);
595 }
596
601 [TestCaseSource(nameof(GetOptimizedFoldingTestCases))]
603 {
605 }
606
611 [TestCaseSource(nameof(GetOptimizedSubstitutionTestCases))]
613 {
615 }
616
621 [TestCaseSource(nameof(GetOptimizedTestCases))]
622 public void TestOptimized(BadNUnitTestCase testCase)
623 {
624 OptimizedContext.Run(testCase);
625 }
626
631 [TestCaseSource(nameof(GetCompiledTestCases))]
632 public void TestCompiled(BadNUnitTestCase testCase)
633 {
634 CompiledContext.Run(testCase);
635 }
636
641 [TestCaseSource(nameof(GetCompiledOptimizedFoldingTestCases))]
646
651 [TestCaseSource(nameof(GetCompiledOptimizedSubstitutionTestCases))]
656
661 [TestCaseSource(nameof(GetCompiledOptimizedTestCases))]
663 {
665 }
666
672 private static HtmlDocument LoadReference(string file)
673 {
674 HtmlDocument reference = new HtmlDocument();
675 reference.Load(file);
676
677 return reference;
678 }
679
684 [Test]
685 [TestCaseSource(nameof(GetHtmlTemplateFiles))]
686 public void TestHtmlTemplateDefault(string file)
687 {
689 string referenceFile = Path.ChangeExtension(file, $".{(options.SkipEmptyTextNodes ? "skip" : "default")}.html");
690
691 HtmlDocument result = BadHtmlTemplate.Create(file)
692 .RunTemplate(null, options);
693
694 if (BadFileSystem.Instance.Exists(referenceFile))
695 {
696 HtmlDocument reference = LoadReference(referenceFile);
697
698 Assert.That(result.DocumentNode.OuterHtml,
699 Is.EqualTo(reference.DocumentNode.OuterHtml.Replace("\r\n", Environment.NewLine))
700 );
701 }
702 else
703 {
704 BadFileSystem.Instance.CreateDirectory(Path.GetDirectoryName(referenceFile)!, true);
705 result.Save(referenceFile);
706 Assert.Inconclusive("Reference file does not exist. Saving...");
707 }
708 }
709
714 [Test]
715 [TestCaseSource(nameof(GetHtmlTemplateFiles))]
716 public void TestHtmlTemplateSkipEmpty(string file)
717 {
718 BadHtmlTemplateOptions options = new BadHtmlTemplateOptions { SkipEmptyTextNodes = true };
719 string referenceFile = Path.ChangeExtension(file, $".{(options.SkipEmptyTextNodes ? "skip" : "default")}.html");
720
721 HtmlDocument result = BadHtmlTemplate.Create(file)
722 .RunTemplate(null, options);
723
724 if (BadFileSystem.Instance.Exists(referenceFile))
725 {
726 HtmlDocument reference = LoadReference(referenceFile);
727
728 Assert.That(result.DocumentNode.OuterHtml,
729 Is.EqualTo(reference.DocumentNode.OuterHtml.Replace("\r\n", Environment.NewLine))
730 );
731 }
732 else
733 {
734 BadFileSystem.Instance.CreateDirectory(Path.GetDirectoryName(referenceFile)!, true);
735 result.Save(referenceFile);
736 Assert.Inconclusive("Reference file does not exist. Saving...");
737 }
738 }
739
740
744 [TearDown]
756}
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:30
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:78
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.