BlazorMonaco/SampleWebApp/Pages/Test.razor.cs
2025-10-13 18:20:51 -04:00

544 lines
47 KiB
C#

using System.Runtime.CompilerServices;
using BlazorMonaco;
using BlazorMonaco.Editor;
using Microsoft.JSInterop;
namespace SampleWebApp.Pages;
public partial class Test
{
private const string DefaultValue = "Default editor value.";
private const string LoremIpsum = """
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean nec risus id sem interdum tempus. Proin blandit sodales metus a porttitor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse ac iaculis urna. Vestibulum suscipit blandit velit, sollicitudin consectetur libero sollicitudin sit amet. Sed suscipit metus quis massa placerat, a congue turpis volutpat. Quisque a suscipit nisl. Pellentesque eget porttitor mi. Phasellus non lorem sed lectus vestibulum malesuada.
Curabitur eu mi sit amet lacus ultrices semper. Sed efficitur leo sapien, eget faucibus enim tempor vitae. Etiam sed tincidunt ex, at congue ipsum. Curabitur pretium nisi in nulla ornare, at viverra nisl dictum. Integer placerat a lectus in sagittis. Mauris at sapien odio. Vestibulum pharetra, sapien quis luctus pellentesque, mauris purus blandit nisl, egestas sodales eros risus in nisi. Praesent pellentesque dictum faucibus. Curabitur eu imperdiet nisi. Proin scelerisque eros vel tempor faucibus. Cras vestibulum sagittis diam, quis consequat turpis bibendum quis. Fusce iaculis lacus odio, in facilisis erat luctus et. Integer eget elit sed nulla commodo venenatis id a ante.
Donec eget dolor mattis, malesuada arcu id, blandit lacus. In hac habitasse platea dictumst. Ut lacinia tellus at elit viverra porta. Donec lorem odio, ullamcorper at ultricies vitae, placerat nec risus. Nulla eget mi sollicitudin leo auctor ultricies. Integer rhoncus libero tellus, quis laoreet quam maximus id. Etiam semper, dui sed posuere fringilla, velit ipsum accumsan mauris, at rhoncus justo purus ut felis. Nam nunc lectus, placerat suscipit augue eget, consectetur tristique diam. Vivamus id velit magna. Maecenas pulvinar risus quam, in pharetra massa aliquet vitae.
Integer sed diam justo. In efficitur semper vehicula. Ut a nibh at arcu vehicula dictum. Etiam lobortis enim ut neque interdum convallis. Mauris viverra pretium lacus, et ornare sem condimentum in. Nam tincidunt non nunc in dictum. Curabitur pretium nulla a vehicula placerat. Mauris sodales enim a enim interdum suscipit. Nulla facilisi.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse feugiat lorem magna, non scelerisque mi ultrices sed. Fusce tincidunt nunc at sodales rhoncus. Sed vehicula ligula eget purus euismod, blandit cursus nulla euismod. Sed diam orci, iaculis vitae molestie quis, malesuada vitae est. Nunc dictum finibus pretium. Fusce iaculis eleifend maximus. Donec lectus risus, tristique a turpis quis, sodales porta nulla. Fusce posuere lacus vitae purus accumsan, sit amet tempus ex tincidunt. Nam nec convallis turpis. Fusce diam turpis, consequat et congue non, posuere at neque. Sed massa mauris, consectetur sit amet volutpat non, tempus ac risus. Etiam hendrerit mauris non tincidunt fermentum. Quisque ligula dolor, tempus non diam id, bibendum scelerisque ligula.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean nec risus id sem interdum tempus. Proin blandit sodales metus a porttitor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse ac iaculis urna. Vestibulum suscipit blandit velit, sollicitudin consectetur libero sollicitudin sit amet. Sed suscipit metus quis massa placerat, a congue turpis volutpat. Quisque a suscipit nisl. Pellentesque eget porttitor mi. Phasellus non lorem sed lectus vestibulum malesuada.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean nec risus id sem interdum tempus. Proin blandit sodales metus a porttitor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse ac iaculis urna. Vestibulum suscipit blandit velit, sollicitudin consectetur libero sollicitudin sit amet. Sed suscipit metus quis massa placerat, a congue turpis volutpat. Quisque a suscipit nisl. Pellentesque eget porttitor mi. Phasellus non lorem sed lectus vestibulum malesuada.
Curabitur eu mi sit amet lacus ultrices semper. Sed efficitur leo sapien, eget faucibus enim tempor vitae. Etiam sed tincidunt ex, at congue ipsum. Curabitur pretium nisi in nulla ornare, at viverra nisl dictum. Integer placerat a lectus in sagittis. Mauris at sapien odio. Vestibulum pharetra, sapien quis luctus pellentesque, mauris purus blandit nisl, egestas sodales eros risus in nisi. Praesent pellentesque dictum faucibus. Curabitur eu imperdiet nisi. Proin scelerisque eros vel tempor faucibus. Cras vestibulum sagittis diam, quis consequat turpis bibendum quis. Fusce iaculis lacus odio, in facilisis erat luctus et. Integer eget elit sed nulla commodo venenatis id a ante.
Donec eget dolor mattis, malesuada arcu id, blandit lacus. In hac habitasse platea dictumst. Ut lacinia tellus at elit viverra porta. Donec lorem odio, ullamcorper at ultricies vitae, placerat nec risus. Nulla eget mi sollicitudin leo auctor ultricies. Integer rhoncus libero tellus, quis laoreet quam maximus id. Etiam semper, dui sed posuere fringilla, velit ipsum accumsan mauris, at rhoncus justo purus ut felis. Nam nunc lectus, placerat suscipit augue eget, consectetur tristique diam. Vivamus id velit magna. Maecenas pulvinar risus quam, in pharetra massa aliquet vitae.
Integer sed diam justo. In efficitur semper vehicula. Ut a nibh at arcu vehicula dictum. Etiam lobortis enim ut neque interdum convallis. Mauris viverra pretium lacus, et ornare sem condimentum in. Nam tincidunt non nunc in dictum. Curabitur pretium nulla a vehicula placerat. Mauris sodales enim a enim interdum suscipit. Nulla facilisi.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse feugiat lorem magna, non scelerisque mi ultrices sed. Fusce tincidunt nunc at sodales rhoncus. Sed vehicula ligula eget purus euismod, blandit cursus nulla euismod. Sed diam orci, iaculis vitae molestie quis, malesuada vitae est. Nunc dictum finibus pretium. Fusce iaculis eleifend maximus. Donec lectus risus, tristique a turpis quis, sodales porta nulla. Fusce posuere lacus vitae purus accumsan, sit amet tempus ex tincidunt. Nam nec convallis turpis. Fusce diam turpis, consequat et congue non, posuere at neque. Sed massa mauris, consectetur sit amet volutpat non, tempus ac risus. Etiam hendrerit mauris non tincidunt fermentum. Quisque ligula dolor, tempus non diam id, bibendum scelerisque ligula.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean nec risus id sem interdum tempus. Proin blandit sodales metus a porttitor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse ac iaculis urna. Vestibulum suscipit blandit velit, sollicitudin consectetur libero sollicitudin sit amet. Sed suscipit metus quis massa placerat, a congue turpis volutpat. Quisque a suscipit nisl. Pellentesque eget porttitor mi. Phasellus non lorem sed lectus vestibulum malesuada.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean nec risus id sem interdum tempus. Proin blandit sodales metus a porttitor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse ac iaculis urna. Vestibulum suscipit blandit velit, sollicitudin consectetur libero sollicitudin sit amet. Sed suscipit metus quis massa placerat, a congue turpis volutpat. Quisque a suscipit nisl. Pellentesque eget porttitor mi. Phasellus non lorem sed lectus vestibulum malesuada.
Curabitur eu mi sit amet lacus ultrices semper. Sed efficitur leo sapien, eget faucibus enim tempor vitae. Etiam sed tincidunt ex, at congue ipsum. Curabitur pretium nisi in nulla ornare, at viverra nisl dictum. Integer placerat a lectus in sagittis. Mauris at sapien odio. Vestibulum pharetra, sapien quis luctus pellentesque, mauris purus blandit nisl, egestas sodales eros risus in nisi. Praesent pellentesque dictum faucibus. Curabitur eu imperdiet nisi. Proin scelerisque eros vel tempor faucibus. Cras vestibulum sagittis diam, quis consequat turpis bibendum quis. Fusce iaculis lacus odio, in facilisis erat luctus et. Integer eget elit sed nulla commodo venenatis id a ante.
Donec eget dolor mattis, malesuada arcu id, blandit lacus. In hac habitasse platea dictumst. Ut lacinia tellus at elit viverra porta. Donec lorem odio, ullamcorper at ultricies vitae, placerat nec risus. Nulla eget mi sollicitudin leo auctor ultricies. Integer rhoncus libero tellus, quis laoreet quam maximus id. Etiam semper, dui sed posuere fringilla, velit ipsum accumsan mauris, at rhoncus justo purus ut felis. Nam nunc lectus, placerat suscipit augue eget, consectetur tristique diam. Vivamus id velit magna. Maecenas pulvinar risus quam, in pharetra massa aliquet vitae.
Integer sed diam justo. In efficitur semper vehicula. Ut a nibh at arcu vehicula dictum. Etiam lobortis enim ut neque interdum convallis. Mauris viverra pretium lacus, et ornare sem condimentum in. Nam tincidunt non nunc in dictum. Curabitur pretium nulla a vehicula placerat. Mauris sodales enim a enim interdum suscipit. Nulla facilisi.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse feugiat lorem magna, non scelerisque mi ultrices sed. Fusce tincidunt nunc at sodales rhoncus. Sed vehicula ligula eget purus euismod, blandit cursus nulla euismod. Sed diam orci, iaculis vitae molestie quis, malesuada vitae est. Nunc dictum finibus pretium. Fusce iaculis eleifend maximus. Donec lectus risus, tristique a turpis quis, sodales porta nulla. Fusce posuere lacus vitae purus accumsan, sit amet tempus ex tincidunt. Nam nec convallis turpis. Fusce diam turpis, consequat et congue non, posuere at neque. Sed massa mauris, consectetur sit amet volutpat non, tempus ac risus. Etiam hendrerit mauris non tincidunt fermentum. Quisque ligula dolor, tempus non diam id, bibendum scelerisque ligula.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean nec risus id sem interdum tempus. Proin blandit sodales metus a porttitor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse ac iaculis urna. Vestibulum suscipit blandit velit, sollicitudin consectetur libero sollicitudin sit amet. Sed suscipit metus quis massa placerat, a congue turpis volutpat. Quisque a suscipit nisl. Pellentesque eget porttitor mi. Phasellus non lorem sed lectus vestibulum malesuada.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean nec risus id sem interdum tempus. Proin blandit sodales metus a porttitor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse ac iaculis urna. Vestibulum suscipit blandit velit, sollicitudin consectetur libero sollicitudin sit amet. Sed suscipit metus quis massa placerat, a congue turpis volutpat. Quisque a suscipit nisl. Pellentesque eget porttitor mi. Phasellus non lorem sed lectus vestibulum malesuada.
Curabitur eu mi sit amet lacus ultrices semper. Sed efficitur leo sapien, eget faucibus enim tempor vitae. Etiam sed tincidunt ex, at congue ipsum. Curabitur pretium nisi in nulla ornare, at viverra nisl dictum. Integer placerat a lectus in sagittis. Mauris at sapien odio. Vestibulum pharetra, sapien quis luctus pellentesque, mauris purus blandit nisl, egestas sodales eros risus in nisi. Praesent pellentesque dictum faucibus. Curabitur eu imperdiet nisi. Proin scelerisque eros vel tempor faucibus. Cras vestibulum sagittis diam, quis consequat turpis bibendum quis. Fusce iaculis lacus odio, in facilisis erat luctus et. Integer eget elit sed nulla commodo venenatis id a ante.
Donec eget dolor mattis, malesuada arcu id, blandit lacus. In hac habitasse platea dictumst. Ut lacinia tellus at elit viverra porta. Donec lorem odio, ullamcorper at ultricies vitae, placerat nec risus. Nulla eget mi sollicitudin leo auctor ultricies. Integer rhoncus libero tellus, quis laoreet quam maximus id. Etiam semper, dui sed posuere fringilla, velit ipsum accumsan mauris, at rhoncus justo purus ut felis. Nam nunc lectus, placerat suscipit augue eget, consectetur tristique diam. Vivamus id velit magna. Maecenas pulvinar risus quam, in pharetra massa aliquet vitae.
Integer sed diam justo. In efficitur semper vehicula. Ut a nibh at arcu vehicula dictum. Etiam lobortis enim ut neque interdum convallis. Mauris viverra pretium lacus, et ornare sem condimentum in. Nam tincidunt non nunc in dictum. Curabitur pretium nulla a vehicula placerat. Mauris sodales enim a enim interdum suscipit. Nulla facilisi.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse feugiat lorem magna, non scelerisque mi ultrices sed. Fusce tincidunt nunc at sodales rhoncus. Sed vehicula ligula eget purus euismod, blandit cursus nulla euismod. Sed diam orci, iaculis vitae molestie quis, malesuada vitae est. Nunc dictum finibus pretium. Fusce iaculis eleifend maximus. Donec lectus risus, tristique a turpis quis, sodales porta nulla. Fusce posuere lacus vitae purus accumsan, sit amet tempus ex tincidunt. Nam nec convallis turpis. Fusce diam turpis, consequat et congue non, posuere at neque. Sed massa mauris, consectetur sit amet volutpat non, tempus ac risus. Etiam hendrerit mauris non tincidunt fermentum. Quisque ligula dolor, tempus non diam id, bibendum scelerisque ligula.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean nec risus id sem interdum tempus. Proin blandit sodales metus a porttitor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse ac iaculis urna. Vestibulum suscipit blandit velit, sollicitudin consectetur libero sollicitudin sit amet. Sed suscipit metus quis massa placerat, a congue turpis volutpat. Quisque a suscipit nisl. Pellentesque eget porttitor mi. Phasellus non lorem sed lectus vestibulum malesuada.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean nec risus id sem interdum tempus. Proin blandit sodales metus a porttitor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse ac iaculis urna. Vestibulum suscipit blandit velit, sollicitudin consectetur libero sollicitudin sit amet. Sed suscipit metus quis massa placerat, a congue turpis volutpat. Quisque a suscipit nisl. Pellentesque eget porttitor mi. Phasellus non lorem sed lectus vestibulum malesuada.
Curabitur eu mi sit amet lacus ultrices semper. Sed efficitur leo sapien, eget faucibus enim tempor vitae. Etiam sed tincidunt ex, at congue ipsum. Curabitur pretium nisi in nulla ornare, at viverra nisl dictum. Integer placerat a lectus in sagittis. Mauris at sapien odio. Vestibulum pharetra, sapien quis luctus pellentesque, mauris purus blandit nisl, egestas sodales eros risus in nisi. Praesent pellentesque dictum faucibus. Curabitur eu imperdiet nisi. Proin scelerisque eros vel tempor faucibus. Cras vestibulum sagittis diam, quis consequat turpis bibendum quis. Fusce iaculis lacus odio, in facilisis erat luctus et. Integer eget elit sed nulla commodo venenatis id a ante.
Donec eget dolor mattis, malesuada arcu id, blandit lacus. In hac habitasse platea dictumst. Ut lacinia tellus at elit viverra porta. Donec lorem odio, ullamcorper at ultricies vitae, placerat nec risus. Nulla eget mi sollicitudin leo auctor ultricies. Integer rhoncus libero tellus, quis laoreet quam maximus id. Etiam semper, dui sed posuere fringilla, velit ipsum accumsan mauris, at rhoncus justo purus ut felis. Nam nunc lectus, placerat suscipit augue eget, consectetur tristique diam. Vivamus id velit magna. Maecenas pulvinar risus quam, in pharetra massa aliquet vitae.
Integer sed diam justo. In efficitur semper vehicula. Ut a nibh at arcu vehicula dictum. Etiam lobortis enim ut neque interdum convallis. Mauris viverra pretium lacus, et ornare sem condimentum in. Nam tincidunt non nunc in dictum. Curabitur pretium nulla a vehicula placerat. Mauris sodales enim a enim interdum suscipit. Nulla facilisi.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse feugiat lorem magna, non scelerisque mi ultrices sed. Fusce tincidunt nunc at sodales rhoncus. Sed vehicula ligula eget purus euismod, blandit cursus nulla euismod. Sed diam orci, iaculis vitae molestie quis, malesuada vitae est. Nunc dictum finibus pretium. Fusce iaculis eleifend maximus. Donec lectus risus, tristique a turpis quis, sodales porta nulla. Fusce posuere lacus vitae purus accumsan, sit amet tempus ex tincidunt. Nam nec convallis turpis. Fusce diam turpis, consequat et congue non, posuere at neque. Sed massa mauris, consectetur sit amet volutpat non, tempus ac risus. Etiam hendrerit mauris non tincidunt fermentum. Quisque ligula dolor, tempus non diam id, bibendum scelerisque ligula.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean nec risus id sem interdum tempus. Proin blandit sodales metus a porttitor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse ac iaculis urna. Vestibulum suscipit blandit velit, sollicitudin consectetur libero sollicitudin sit amet. Sed suscipit metus quis massa placerat, a congue turpis volutpat. Quisque a suscipit nisl. Pellentesque eget porttitor mi. Phasellus non lorem sed lectus vestibulum malesuada.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean nec risus id sem interdum tempus. Proin blandit sodales metus a porttitor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse ac iaculis urna. Vestibulum suscipit blandit velit, sollicitudin consectetur libero sollicitudin sit amet. Sed suscipit metus quis massa placerat, a congue turpis volutpat. Quisque a suscipit nisl. Pellentesque eget porttitor mi. Phasellus non lorem sed lectus vestibulum malesuada.
Curabitur eu mi sit amet lacus ultrices semper. Sed efficitur leo sapien, eget faucibus enim tempor vitae. Etiam sed tincidunt ex, at congue ipsum. Curabitur pretium nisi in nulla ornare, at viverra nisl dictum. Integer placerat a lectus in sagittis. Mauris at sapien odio. Vestibulum pharetra, sapien quis luctus pellentesque, mauris purus blandit nisl, egestas sodales eros risus in nisi. Praesent pellentesque dictum faucibus. Curabitur eu imperdiet nisi. Proin scelerisque eros vel tempor faucibus. Cras vestibulum sagittis diam, quis consequat turpis bibendum quis. Fusce iaculis lacus odio, in facilisis erat luctus et. Integer eget elit sed nulla commodo venenatis id a ante.
Donec eget dolor mattis, malesuada arcu id, blandit lacus. In hac habitasse platea dictumst. Ut lacinia tellus at elit viverra porta. Donec lorem odio, ullamcorper at ultricies vitae, placerat nec risus. Nulla eget mi sollicitudin leo auctor ultricies. Integer rhoncus libero tellus, quis laoreet quam maximus id. Etiam semper, dui sed posuere fringilla, velit ipsum accumsan mauris, at rhoncus justo purus ut felis. Nam nunc lectus, placerat suscipit augue eget, consectetur tristique diam. Vivamus id velit magna. Maecenas pulvinar risus quam, in pharetra massa aliquet vitae.
Integer sed diam justo. In efficitur semper vehicula. Ut a nibh at arcu vehicula dictum. Etiam lobortis enim ut neque interdum convallis. Mauris viverra pretium lacus, et ornare sem condimentum in. Nam tincidunt non nunc in dictum. Curabitur pretium nulla a vehicula placerat. Mauris sodales enim a enim interdum suscipit. Nulla facilisi.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse feugiat lorem magna, non scelerisque mi ultrices sed. Fusce tincidunt nunc at sodales rhoncus. Sed vehicula ligula eget purus euismod, blandit cursus nulla euismod. Sed diam orci, iaculis vitae molestie quis, malesuada vitae est. Nunc dictum finibus pretium. Fusce iaculis eleifend maximus. Donec lectus risus, tristique a turpis quis, sodales porta nulla. Fusce posuere lacus vitae purus accumsan, sit amet tempus ex tincidunt. Nam nec convallis turpis. Fusce diam turpis, consequat et congue non, posuere at neque. Sed massa mauris, consectetur sit amet volutpat non, tempus ac risus. Etiam hendrerit mauris non tincidunt fermentum. Quisque ligula dolor, tempus non diam id, bibendum scelerisque ligula.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean nec risus id sem interdum tempus. Proin blandit sodales metus a porttitor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse ac iaculis urna. Vestibulum suscipit blandit velit, sollicitudin consectetur libero sollicitudin sit amet. Sed suscipit metus quis massa placerat, a congue turpis volutpat. Quisque a suscipit nisl. Pellentesque eget porttitor mi. Phasellus non lorem sed lectus vestibulum malesuada.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean nec risus id sem interdum tempus. Proin blandit sodales metus a porttitor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse ac iaculis urna. Vestibulum suscipit blandit velit, sollicitudin consectetur libero sollicitudin sit amet. Sed suscipit metus quis massa placerat, a congue turpis volutpat. Quisque a suscipit nisl. Pellentesque eget porttitor mi. Phasellus non lorem sed lectus vestibulum malesuada.
Curabitur eu mi sit amet lacus ultrices semper. Sed efficitur leo sapien, eget faucibus enim tempor vitae. Etiam sed tincidunt ex, at congue ipsum. Curabitur pretium nisi in nulla ornare, at viverra nisl dictum. Integer placerat a lectus in sagittis. Mauris at sapien odio. Vestibulum pharetra, sapien quis luctus pellentesque, mauris purus blandit nisl, egestas sodales eros risus in nisi. Praesent pellentesque dictum faucibus. Curabitur eu imperdiet nisi. Proin scelerisque eros vel tempor faucibus. Cras vestibulum sagittis diam, quis consequat turpis bibendum quis. Fusce iaculis lacus odio, in facilisis erat luctus et. Integer eget elit sed nulla commodo venenatis id a ante.
Donec eget dolor mattis, malesuada arcu id, blandit lacus. In hac habitasse platea dictumst. Ut lacinia tellus at elit viverra porta. Donec lorem odio, ullamcorper at ultricies vitae, placerat nec risus. Nulla eget mi sollicitudin leo auctor ultricies. Integer rhoncus libero tellus, quis laoreet quam maximus id. Etiam semper, dui sed posuere fringilla, velit ipsum accumsan mauris, at rhoncus justo purus ut felis. Nam nunc lectus, placerat suscipit augue eget, consectetur tristique diam. Vivamus id velit magna. Maecenas pulvinar risus quam, in pharetra massa aliquet vitae.
Integer sed diam justo. In efficitur semper vehicula. Ut a nibh at arcu vehicula dictum. Etiam lobortis enim ut neque interdum convallis. Mauris viverra pretium lacus, et ornare sem condimentum in. Nam tincidunt non nunc in dictum. Curabitur pretium nulla a vehicula placerat. Mauris sodales enim a enim interdum suscipit. Nulla facilisi.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse feugiat lorem magna, non scelerisque mi ultrices sed. Fusce tincidunt nunc at sodales rhoncus. Sed vehicula ligula eget purus euismod, blandit cursus nulla euismod. Sed diam orci, iaculis vitae molestie quis, malesuada vitae est. Nunc dictum finibus pretium. Fusce iaculis eleifend maximus. Donec lectus risus, tristique a turpis quis, sodales porta nulla. Fusce posuere lacus vitae purus accumsan, sit amet tempus ex tincidunt. Nam nec convallis turpis. Fusce diam turpis, consequat et congue non, posuere at neque. Sed massa mauris, consectetur sit amet volutpat non, tempus ac risus. Etiam hendrerit mauris non tincidunt fermentum. Quisque ligula dolor, tempus non diam id, bibendum scelerisque ligula.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean nec risus id sem interdum tempus. Proin blandit sodales metus a porttitor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse ac iaculis urna. Vestibulum suscipit blandit velit, sollicitudin consectetur libero sollicitudin sit amet. Sed suscipit metus quis massa placerat, a congue turpis volutpat. Quisque a suscipit nisl. Pellentesque eget porttitor mi. Phasellus non lorem sed lectus vestibulum malesuada.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean nec risus id sem interdum tempus. Proin blandit sodales metus a porttitor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse ac iaculis urna. Vestibulum suscipit blandit velit, sollicitudin consectetur libero sollicitudin sit amet. Sed suscipit metus quis massa placerat, a congue turpis volutpat. Quisque a suscipit nisl. Pellentesque eget porttitor mi. Phasellus non lorem sed lectus vestibulum malesuada.
Curabitur eu mi sit amet lacus ultrices semper. Sed efficitur leo sapien, eget faucibus enim tempor vitae. Etiam sed tincidunt ex, at congue ipsum. Curabitur pretium nisi in nulla ornare, at viverra nisl dictum. Integer placerat a lectus in sagittis. Mauris at sapien odio. Vestibulum pharetra, sapien quis luctus pellentesque, mauris purus blandit nisl, egestas sodales eros risus in nisi. Praesent pellentesque dictum faucibus. Curabitur eu imperdiet nisi. Proin scelerisque eros vel tempor faucibus. Cras vestibulum sagittis diam, quis consequat turpis bibendum quis. Fusce iaculis lacus odio, in facilisis erat luctus et. Integer eget elit sed nulla commodo venenatis id a ante.
Donec eget dolor mattis, malesuada arcu id, blandit lacus. In hac habitasse platea dictumst. Ut lacinia tellus at elit viverra porta. Donec lorem odio, ullamcorper at ultricies vitae, placerat nec risus. Nulla eget mi sollicitudin leo auctor ultricies. Integer rhoncus libero tellus, quis laoreet quam maximus id. Etiam semper, dui sed posuere fringilla, velit ipsum accumsan mauris, at rhoncus justo purus ut felis. Nam nunc lectus, placerat suscipit augue eget, consectetur tristique diam. Vivamus id velit magna. Maecenas pulvinar risus quam, in pharetra massa aliquet vitae.
Integer sed diam justo. In efficitur semper vehicula. Ut a nibh at arcu vehicula dictum. Etiam lobortis enim ut neque interdum convallis. Mauris viverra pretium lacus, et ornare sem condimentum in. Nam tincidunt non nunc in dictum. Curabitur pretium nulla a vehicula placerat. Mauris sodales enim a enim interdum suscipit. Nulla facilisi.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse feugiat lorem magna, non scelerisque mi ultrices sed. Fusce tincidunt nunc at sodales rhoncus. Sed vehicula ligula eget purus euismod, blandit cursus nulla euismod. Sed diam orci, iaculis vitae molestie quis, malesuada vitae est. Nunc dictum finibus pretium. Fusce iaculis eleifend maximus. Donec lectus risus, tristique a turpis quis, sodales porta nulla. Fusce posuere lacus vitae purus accumsan, sit amet tempus ex tincidunt. Nam nec convallis turpis. Fusce diam turpis, consequat et congue non, posuere at neque. Sed massa mauris, consectetur sit amet volutpat non, tempus ac risus. Etiam hendrerit mauris non tincidunt fermentum. Quisque ligula dolor, tempus non diam id, bibendum scelerisque ligula.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean nec risus id sem interdum tempus. Proin blandit sodales metus a porttitor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse ac iaculis urna. Vestibulum suscipit blandit velit, sollicitudin consectetur libero sollicitudin sit amet. Sed suscipit metus quis massa placerat, a congue turpis volutpat. Quisque a suscipit nisl. Pellentesque eget porttitor mi. Phasellus non lorem sed lectus vestibulum malesuada.
""";
private const int ValueUpdateDelayMs = 250;
private string _testName = "all";
private readonly Dictionary<string, Func<Task>> _tests;
private readonly StandaloneEditorConstructionOptions _defaultOptions = new()
{
Language = "javascript",
GlyphMargin = true,
Value = DefaultValue,
ScrollBeyondLastLine = false,
RenderFinalNewline = "on",
SelectOnLineNumbers = true
};
private readonly ILogger<Test> _logger;
private readonly IJSRuntime _jsRuntime;
private StandaloneCodeEditor _editor = null!;
public Test(IJSRuntime jsRuntime, ILogger<Test> logger)
{
_jsRuntime = jsRuntime;
_logger = logger;
_tests = new Dictionary<string, Func<Task>>
{
// ------------------------
// ---- Editor Methods ----
// ------------------------
// public Task DisposeEditor()
// public Task<string> GetEditorType()
// public Task Layout(Dimension dimension = null)
// public Task Focus()
// public Task<bool> HasTextFocus()
// public Task<int> GetVisibleColumnFromPosition(Position position)
// public Task<Position> GetPosition()
// public Task SetPosition(Position position, string source)
// public Task RevealLine(int lineNumber, ScrollType? scrollType = null)
// public Task RevealLineInCenter(int lineNumber, ScrollType? scrollType = null)
// public Task RevealLineInCenterIfOutsideViewport(int lineNumber, ScrollType? scrollType = null)
// public Task RevealPosition(Position position, ScrollType? scrollType = null)
// public Task RevealPositionInCenter(Position position, ScrollType? scrollType = null)
// public Task RevealPositionInCenterIfOutsideViewport(Position position, ScrollType? scrollType = null)
// public Task<Selection> GetSelection()
// public Task<List<Selection>> GetSelections()
// public Task SetSelection(Range selection, string source)
// public Task SetSelection(Selection selection, string source)
// public Task SetSelections(List<Selection> selections, string source)
// public Task RevealLines(int startLineNumber, int endLineNumber, ScrollType? scrollType = null)
// public Task RevealLinesInCenter(int lineNumber, int endLineNumber, ScrollType? scrollType = null)
// public Task RevealLinesInCenterIfOutsideViewport(int lineNumber, int endLineNumber, ScrollType? scrollType = null)
// public Task RevealRange(Range range, ScrollType? scrollType = null)
// public Task RevealRangeInCenter(Range range, ScrollType? scrollType = null)
// public Task RevealRangeAtTop(Range range, ScrollType? scrollType = null)
// public Task RevealRangeInCenterIfOutsideViewport(Range range, ScrollType? scrollType = null)
// public Task Trigger(string source, string handlerId, object payload = null)
// --------------------------------------
// ---- StandaloneCodeEditor Methods ----
// --------------------------------------
// public Task UpdateOptions(EditorUpdateOptions newOptions)
["AddCommand"] = AddCommand,
["AddAction"] = AddAction,
// public Task ResetDeltaDecorations()
// [Parameter] public EventCallback<ModelContentChangedEvent> OnDidChangeModelContent { get; set; }
// [Parameter] public EventCallback<ModelLanguageChangedEvent> OnDidChangeModelLanguage { get; set; }
// [Parameter] public EventCallback<ModelLanguageConfigurationChangedEvent> OnDidChangeModelLanguageConfiguration { get; set; }
// [Parameter] public EventCallback<ModelOptionsChangedEvent> OnDidChangeModelOptions { get; set; }
// [Parameter] public EventCallback<ConfigurationChangedEvent> OnDidChangeConfiguration { get; set; }
["OnDidChangeConfiguration"] = ChangeConfiguration,
// [Parameter] public EventCallback<CursorPositionChangedEvent> OnDidChangeCursorPosition { get; set; }
// [Parameter] public EventCallback<CursorSelectionChangedEvent> OnDidChangeCursorSelection { get; set; }
// [Parameter] public EventCallback<ModelChangedEvent> OnDidChangeModel { get; set; }
// [Parameter] public EventCallback<ModelDecorationsChangedEvent> OnDidChangeModelDecorations { get; set; }
// [Parameter] public EventCallback OnDidFocusEditorText { get; set; }
// [Parameter] public EventCallback OnDidBlurEditorText { get; set; }
// [Parameter] public EventCallback OnDidFocusEditorWidget { get; set; }
// [Parameter] public EventCallback OnDidBlurEditorWidget { get; set; }
// [Parameter] public EventCallback OnDidCompositionStart { get; set; }
// [Parameter] public EventCallback OnDidCompositionEnd { get; set; }
// [Parameter] public EventCallback<PasteEvent> OnDidPaste { get; set; }
// [Parameter] public EventCallback<EditorMouseEvent> OnMouseUp { get; set; }
// [Parameter] public EventCallback<EditorMouseEvent> OnMouseDown { get; set; }
// [Parameter] public EventCallback<EditorMouseEvent> OnContextMenu { get; set; }
// [Parameter] public EventCallback<EditorMouseEvent> OnMouseMove { get; set; }
// [Parameter] public EventCallback<PartialEditorMouseEvent> OnMouseLeave { get; set; }
// [Parameter] public EventCallback<KeyboardEvent> OnKeyUp { get; set; }
// [Parameter] public EventCallback<KeyboardEvent> OnKeyDown { get; set; }
// [Parameter] public EventCallback<EditorLayoutInfo> OnDidLayoutChange { get; set; }
// [Parameter] public EventCallback<ContentSizeChangedEvent> OnDidContentSizeChange { get; set; }
// [Parameter] public EventCallback<ScrollEvent> OnDidScrollChange { get; set; }
["HasWidgetFocus"] = HasWidgetFocus,
// public Task<TextModel> GetModel()
// public Task SetModel(TextModel model)
["GetOptions"] = GetOptions,
["GetOption"] = GetOption,
["GetRawOptions"] = GetRawOptions,
["GetValue"] = GetValue,
["SetValue"] = SetValue,
["GetContentWidth"] = GetContentWidth,
["GetScrollWidth"] = GetScrollWidth,
["GetScrollLeft"] = GetScrollLeft,
["GetContentHeight"] = GetContentHeight,
["GetScrollHeight"] = GetScrollHeight,
["GetScrollTop"] = GetScrollTop,
["SetScrollLeft"] = SetScrollLeft,
["SetScrollTop"] = SetScrollTop,
["SetScrollPosition"] = SetScrollPosition,
// public Task<bool> PushUndoStop()
// public Task<bool> PopUndoStop()
// public Task<bool> ExecuteEdits(string source, List<IdentifiedSingleEditOperation> edits, List<Selection> endCursorState)
// public Task<bool> ExecuteEdits(string source, List<IdentifiedSingleEditOperation> edits, CursorStateComputer endCursorState)
// public async Task<string[]> DeltaDecorations(string[] oldDecorationIds, ModelDeltaDecoration[] newDecorations)
// public Task<EditorLayoutInfo> GetLayoutInfo()
// public Task<List<Range>> GetVisibleRanges()
// public Task<double> GetTopForLineNumber(int lineNumber)
// public Task<double> GetTopForPosition(int lineNumber, int column)
// public Task<string> GetContainerDomNodeId()
// public Task<string> GetDomNodeId()
// public Task<int> GetOffsetForColumn(int lineNumber, int column)
// public Task Render(bool? forceRedraw = null)
// public Task<BaseMouseTarget> GetTargetAtClientPoint(int clientX, int clientY)
["GetScrolledVisiblePosition"] = GetScrolledVisiblePosition,
};
}
private StandaloneEditorConstructionOptions EditorConstructionOptions(StandaloneCodeEditor editor)
{
return _defaultOptions;
}
private async Task RunTest()
{
foreach (var testName in _tests.Keys)
{
if (_testName != testName && _testName != "all")
continue;
if (_tests.TryGetValue(testName, out var testMethod))
await testMethod();
}
}
private async Task AddCommand()
{
// Arrange
var runIsCalled = false;
// Act
await _editor.AddCommand((int)KeyMod.CtrlCmd | (int)KeyCode.Enter, _ =>
{
runIsCalled = true;
});
// Assert
await _editor.Focus();
await _jsRuntime.InvokeVoidAsync("dispatchKeydown", (int)'\r', true, false, false, false);
AssertEquals(runIsCalled, true);
}
private async Task AddAction()
{
// Arrange
var runIsCalled = false;
var actionDescriptor = new ActionDescriptor
{
Id = "testActionId",
Label = "testActionLabel",
Keybindings = [(int)KeyMod.CtrlCmd | (int)KeyCode.KeyE],
Run = _ =>
{
runIsCalled = true;
}
};
// Act
await _editor.AddAction(actionDescriptor);
// Assert
await _editor.Focus();
await _jsRuntime.InvokeVoidAsync("dispatchKeydown", (int)'E', true, false, false, false);
AssertEquals(runIsCalled, true);
}
private ConfigurationChangedEvent? _configurationChangedEvent;
private async Task ChangeConfiguration()
{
// Arrange
var options = new EditorUpdateOptions()
{
ShowFoldingControls = "always"
};
// Act
await _editor.UpdateOptions(options);
// Assert
AssertNotNull(_configurationChangedEvent);
AssertEquals(_configurationChangedEvent?.HasChanged(EditorOption.showFoldingControls) ?? false, true, "showFoldingControls");
AssertEquals(_configurationChangedEvent?.HasChanged(EditorOption.showDeprecated) ?? false, false, "showDeprecated");
}
private void OnDidChangeConfiguration(ConfigurationChangedEvent configurationChangedEvent)
{
_configurationChangedEvent = configurationChangedEvent;
}
private async Task HasWidgetFocus()
{
// Arrange
await _jsRuntime.InvokeVoidAsync("focusElement", "select");
await Task.Delay(ValueUpdateDelayMs);
// Act
var focusBefore = await _editor.HasWidgetFocus();
await _editor.Focus();
var focusAfter = await _editor.HasWidgetFocus();
// Assert
AssertEquals(focusBefore, false, "before");
AssertEquals(focusAfter, true, "after");
}
private async Task GetOptions()
{
// Arrange
// Act
var options = await _editor.GetOptions();
var option1 = options.Get<int>(EditorOption.foldingMaximumRegions);
var option2 = options.Get<string>(EditorOption.renderWhitespace);
var option3 = options.Get<string>(EditorOption.renderFinalNewline);
// Assert
AssertNotNull(options);
AssertEquals(option1, 5000, "foldingMaximumRegions");
AssertEquals(option2, "selection", "renderWhitespace");
AssertEquals(option3, "on", "renderFinalNewline");
}
private async Task GetOption()
{
// Arrange
// Act
var option1 = await _editor.GetOption<int>(EditorOption.foldingMaximumRegions);
var option2 = await _editor.GetOption<string>(EditorOption.renderWhitespace);
var option3 = await _editor.GetOption<string>(EditorOption.renderFinalNewline);
// Assert
AssertEquals(option1, 5000, "foldingMaximumRegions");
AssertEquals(option2, "selection", "renderWhitespace");
AssertEquals(option3, "on", "renderFinalNewline");
}
private async Task GetRawOptions()
{
// Arrange
// Act
var rawOptions = await _editor.GetRawOptions();
// Assert
AssertNotNull(rawOptions);
AssertEquals(rawOptions.ScrollBeyondLastLine ?? false, _defaultOptions.ScrollBeyondLastLine ?? false, "scrollBeyondLastLine");
AssertEquals(rawOptions.RenderFinalNewline ?? "off", _defaultOptions.RenderFinalNewline ?? "off", "renderFinalNewline");
AssertEquals(rawOptions.SelectOnLineNumbers ?? false, _defaultOptions.SelectOnLineNumbers ?? false, "selectOnLineNumbers");
}
private async Task GetValue()
{
// Arrange
await _editor.SetValue(DefaultValue);
// Act
var actual = await _editor.GetValue();
// Assert
AssertEquals(actual, DefaultValue);
}
private async Task SetValue()
{
// Arrange
const string expected = "SetValue test value line 1\ntest line 2";
// Act
await _editor.SetValue(expected);
// Assert
var actual = await _editor.GetValue();
AssertEquals(actual, expected);
}
private async Task GetContentWidth()
{
// Arrange
const int expected = 206;
await _editor.SetValue(DefaultValue);
await Task.Delay(ValueUpdateDelayMs);
// Act
var actual = await _editor.GetContentWidth();
// Assert
AssertEquals(actual, expected);
}
private async Task GetScrollWidth()
{
// Arrange
await _editor.SetValue(DefaultValue);
await Task.Delay(ValueUpdateDelayMs);
// Act
var actual = await _editor.GetScrollWidth();
// Assert
var expected = await _jsRuntime.InvokeAsync<int>("getElementWidth", $"#{_editor.Id} .view-lines");
AssertEquals(actual, expected);
}
private async Task GetScrollLeft()
{
// Arrange
const int expected = 50;
await _editor.SetValue(LoremIpsum);
await _editor.SetScrollLeft(expected, ScrollType.Immediate);
await Task.Delay(ValueUpdateDelayMs);
// Act
var actual = await _editor.GetScrollLeft();
// Assert
AssertEquals(actual, expected);
}
private async Task GetContentHeight()
{
// Arrange
const int expected = 38;
await _editor.SetValue(DefaultValue + "\n" + DefaultValue);
await Task.Delay(ValueUpdateDelayMs);
// Act
var actual = await _editor.GetContentHeight();
// Assert
AssertEquals(actual, expected);
}
private async Task GetScrollHeight()
{
// Arrange
await _editor.SetValue(LoremIpsum);
await Task.Delay(ValueUpdateDelayMs);
// Act
var actual = await _editor.GetScrollHeight();
// Assert
var expected = await _jsRuntime.InvokeAsync<int>("getElementHeight", $"#{_editor.Id} .view-lines");
AssertEquals(actual, expected);
}
private async Task GetScrollTop()
{
// Arrange
const int expected = 75;
await _editor.SetValue(LoremIpsum);
await _editor.SetScrollTop(expected);
await Task.Delay(ValueUpdateDelayMs);
// Act
var actual = await _editor.GetScrollTop();
// Assert
AssertEquals(actual, expected);
}
private async Task SetScrollLeft()
{
// Arrange
const int expected = 50;
await _editor.SetValue(LoremIpsum);
// Act
await _editor.SetScrollLeft(expected, ScrollType.Immediate);
// Assert
await Task.Delay(ValueUpdateDelayMs);
var actual = await _editor.GetScrollLeft();
AssertEquals(actual, expected);
}
private async Task SetScrollTop()
{
// Arrange
const int expected = 75;
await _editor.SetValue(LoremIpsum);
// Act
await _editor.SetScrollTop(expected, ScrollType.Immediate);
// Assert
await Task.Delay(ValueUpdateDelayMs);
var actual = await _editor.GetScrollTop();
AssertEquals(actual, expected);
}
private async Task SetScrollPosition()
{
// Arrange
var expected = new NewScrollPosition
{
ScrollLeft = 50,
ScrollTop = 75
};
await _editor.SetValue(LoremIpsum);
// Act
await _editor.SetScrollPosition(expected, ScrollType.Immediate);
// Assert
await Task.Delay(ValueUpdateDelayMs);
var actualTop = await _editor.GetScrollTop();
var actualLeft = await _editor.GetScrollLeft();
AssertEquals(actualTop, expected.ScrollTop);
AssertEquals(actualLeft, expected.ScrollLeft);
}
private async Task GetScrolledVisiblePosition()
{
// Arrange
var scrollPosition = new NewScrollPosition
{
ScrollLeft = 50,
ScrollTop = 75
};
await _editor.SetValue(LoremIpsum);
await _editor.SetScrollPosition(scrollPosition, ScrollType.Immediate);
await Task.Delay(ValueUpdateDelayMs);
// Act
var position = new Position
{
LineNumber = 8,
Column = 15
};
var actual = await _editor.GetScrolledVisiblePosition(position);
// Assert
AssertEquals(actual.Left, 141);
AssertEquals(actual.Top, 58);
AssertEquals(actual.Height, 19);
}
private void AssertEquals<T>(T actual, T expected, string testName = "", [CallerMemberName] string caller = "")
where T : IComparable
{
testName = string.IsNullOrWhiteSpace(testName)
? caller
: $"{caller}.{testName}";
if (!actual.Equals(expected))
_logger.LogError($"{testName} failed :\n actual is {actual}\n expected is {expected}");
else
_logger.LogInformation($"{testName} succeeded :\n actual is {actual}\n expected is {expected}");
}
private void AssertNotNull<T>(T value, string testName = "", [CallerMemberName] string caller = "")
{
testName = string.IsNullOrWhiteSpace(testName)
? caller
: $"{caller}.{testName}";
if (value is null)
_logger.LogError($"{testName} failed :\n value is {null}");
else
_logger.LogInformation($"{testName} succeeded :\n value is not null and it's {value}");
}
}