MQ: Cleanup to use var
This commit is contained in:
parent
d12bb79714
commit
21d64b4ae2
|
|
@ -23,7 +23,7 @@ namespace Microsoft.Internal.Web.Utils
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int count = 0;
|
var count = 0;
|
||||||
foreach (object o in e)
|
foreach (object o in e)
|
||||||
{
|
{
|
||||||
Add(o);
|
Add(o);
|
||||||
|
|
@ -42,7 +42,7 @@ namespace Microsoft.Internal.Web.Utils
|
||||||
|
|
||||||
public HashCodeCombiner Add(object o)
|
public HashCodeCombiner Add(object o)
|
||||||
{
|
{
|
||||||
int hashCode = (o != null) ? o.GetHashCode() : 0;
|
var hashCode = (o != null) ? o.GetHashCode() : 0;
|
||||||
Add(hashCode);
|
Add(hashCode);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@ namespace Microsoft.AspNet.Razor.Parser.SyntaxTree
|
||||||
|
|
||||||
public override bool Equals(object obj)
|
public override bool Equals(object obj)
|
||||||
{
|
{
|
||||||
AutoCompleteEditHandler other = obj as AutoCompleteEditHandler;
|
var other = obj as AutoCompleteEditHandler;
|
||||||
return base.Equals(obj) &&
|
return base.Equals(obj) &&
|
||||||
other != null &&
|
other != null &&
|
||||||
String.Equals(other.AutoCompleteString, AutoCompleteString, StringComparison.Ordinal) &&
|
String.Equals(other.AutoCompleteString, AutoCompleteString, StringComparison.Ordinal) &&
|
||||||
|
|
|
||||||
|
|
@ -86,19 +86,19 @@ namespace Microsoft.AspNet.Razor.Editor
|
||||||
foreach (TextChange change in changes)
|
foreach (TextChange change in changes)
|
||||||
{
|
{
|
||||||
cancelToken.ThrowIfCancellationRequested();
|
cancelToken.ThrowIfCancellationRequested();
|
||||||
Span changeOwner = leftTree.LocateOwner(change);
|
var changeOwner = leftTree.LocateOwner(change);
|
||||||
|
|
||||||
// Apply the change to the tree
|
// Apply the change to the tree
|
||||||
if (changeOwner == null)
|
if (changeOwner == null)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
EditResult result = changeOwner.EditHandler.ApplyChange(changeOwner, change, force: true);
|
var result = changeOwner.EditHandler.ApplyChange(changeOwner, change, force: true);
|
||||||
changeOwner.ReplaceWith(result.EditedSpan);
|
changeOwner.ReplaceWith(result.EditedSpan);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now compare the trees
|
// Now compare the trees
|
||||||
bool treesDifferent = !leftTree.EquivalentTo(rightTree);
|
var treesDifferent = !leftTree.EquivalentTo(rightTree);
|
||||||
return treesDifferent;
|
return treesDifferent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -143,13 +143,13 @@ namespace Microsoft.AspNet.Razor.Editor
|
||||||
|
|
||||||
private class MainThreadState : ThreadStateBase, IDisposable
|
private class MainThreadState : ThreadStateBase, IDisposable
|
||||||
{
|
{
|
||||||
private CancellationTokenSource _cancelSource = new CancellationTokenSource();
|
private readonly CancellationTokenSource _cancelSource = new CancellationTokenSource();
|
||||||
private ManualResetEventSlim _hasParcel = new ManualResetEventSlim(false);
|
private readonly ManualResetEventSlim _hasParcel = new ManualResetEventSlim(false);
|
||||||
private CancellationTokenSource _currentParcelCancelSource;
|
private CancellationTokenSource _currentParcelCancelSource;
|
||||||
|
|
||||||
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields", Justification = "Field is used in debug code and may be used later")]
|
[SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields", Justification = "Field is used in debug code and may be used later")]
|
||||||
private string _fileName;
|
private string _fileName;
|
||||||
private object _stateLock = new object();
|
private readonly object _stateLock = new object();
|
||||||
private IList<TextChange> _changes = new List<TextChange>();
|
private IList<TextChange> _changes = new List<TextChange>();
|
||||||
|
|
||||||
public MainThreadState(string fileName)
|
public MainThreadState(string fileName)
|
||||||
|
|
@ -299,9 +299,9 @@ namespace Microsoft.AspNet.Razor.Editor
|
||||||
private void WorkerLoop()
|
private void WorkerLoop()
|
||||||
{
|
{
|
||||||
long? elapsedMs = null;
|
long? elapsedMs = null;
|
||||||
string fileNameOnly = Path.GetFileName(_fileName);
|
var fileNameOnly = Path.GetFileName(_fileName);
|
||||||
#if EDITOR_TRACING
|
#if EDITOR_TRACING
|
||||||
Stopwatch sw = new Stopwatch();
|
var sw = new Stopwatch();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
try
|
try
|
||||||
|
|
@ -316,7 +316,7 @@ namespace Microsoft.AspNet.Razor.Editor
|
||||||
while (!_shutdownToken.IsCancellationRequested)
|
while (!_shutdownToken.IsCancellationRequested)
|
||||||
{
|
{
|
||||||
// Grab the parcel of work to do
|
// Grab the parcel of work to do
|
||||||
WorkParcel parcel = _main.GetParcel();
|
var parcel = _main.GetParcel();
|
||||||
if (parcel.Changes.Any())
|
if (parcel.Changes.Any())
|
||||||
{
|
{
|
||||||
RazorEditorTrace.TraceLine(RazorResources.FormatTrace_ChangesArrived(fileNameOnly, parcel.Changes.Count));
|
RazorEditorTrace.TraceLine(RazorResources.FormatTrace_ChangesArrived(fileNameOnly, parcel.Changes.Count));
|
||||||
|
|
@ -345,11 +345,11 @@ namespace Microsoft.AspNet.Razor.Editor
|
||||||
allChanges = parcel.Changes.ToList();
|
allChanges = parcel.Changes.ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
TextChange finalChange = allChanges.Last();
|
var finalChange = allChanges.Last();
|
||||||
#if EDITOR_TRACING
|
#if EDITOR_TRACING
|
||||||
sw.Start();
|
sw.Start();
|
||||||
#endif
|
#endif
|
||||||
GeneratorResults results = ParseChange(finalChange.NewBuffer, linkedCancel.Token);
|
var results = ParseChange(finalChange.NewBuffer, linkedCancel.Token);
|
||||||
#if EDITOR_TRACING
|
#if EDITOR_TRACING
|
||||||
sw.Stop();
|
sw.Stop();
|
||||||
elapsedMs = sw.ElapsedMilliseconds;
|
elapsedMs = sw.ElapsedMilliseconds;
|
||||||
|
|
@ -369,7 +369,7 @@ namespace Microsoft.AspNet.Razor.Editor
|
||||||
#if EDITOR_TRACING
|
#if EDITOR_TRACING
|
||||||
sw.Start();
|
sw.Start();
|
||||||
#endif
|
#endif
|
||||||
bool treeStructureChanged = _currentParseTree == null || TreesAreDifferent(_currentParseTree, results.Document, allChanges, parcel.CancelToken);
|
var treeStructureChanged = _currentParseTree == null || TreesAreDifferent(_currentParseTree, results.Document, allChanges, parcel.CancelToken);
|
||||||
#if EDITOR_TRACING
|
#if EDITOR_TRACING
|
||||||
sw.Stop();
|
sw.Stop();
|
||||||
elapsedMs = sw.ElapsedMilliseconds;
|
elapsedMs = sw.ElapsedMilliseconds;
|
||||||
|
|
@ -401,7 +401,7 @@ namespace Microsoft.AspNet.Razor.Editor
|
||||||
{
|
{
|
||||||
// Rewind the buffer and sanity check the line mappings
|
// Rewind the buffer and sanity check the line mappings
|
||||||
finalChange.NewBuffer.Position = 0;
|
finalChange.NewBuffer.Position = 0;
|
||||||
int lineCount = finalChange.NewBuffer.ReadToEnd().Split(new string[] { Environment.NewLine, "\r", "\n" }, StringSplitOptions.None).Count();
|
var lineCount = finalChange.NewBuffer.ReadToEnd().Split(new string[] { Environment.NewLine, "\r", "\n" }, StringSplitOptions.None).Count();
|
||||||
Debug.Assert(
|
Debug.Assert(
|
||||||
!args.GeneratorResults.DesignTimeLineMappings.Any(pair => pair.Value.StartLine > lineCount),
|
!args.GeneratorResults.DesignTimeLineMappings.Any(pair => pair.Value.StartLine > lineCount),
|
||||||
"Found a design-time line mapping referring to a line outside the source file!");
|
"Found a design-time line mapping referring to a line outside the source file!");
|
||||||
|
|
@ -456,7 +456,7 @@ namespace Microsoft.AspNet.Razor.Editor
|
||||||
EnsureOnThread();
|
EnsureOnThread();
|
||||||
|
|
||||||
// Create a template engine
|
// Create a template engine
|
||||||
RazorTemplateEngine engine = new RazorTemplateEngine(_host);
|
var engine = new RazorTemplateEngine(_host);
|
||||||
|
|
||||||
// Seek the buffer to the beginning
|
// Seek the buffer to the beginning
|
||||||
buffer.Position = 0;
|
buffer.Position = 0;
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ namespace Microsoft.AspNet.Razor.Editor
|
||||||
|
|
||||||
public override bool Equals(object obj)
|
public override bool Equals(object obj)
|
||||||
{
|
{
|
||||||
ImplicitExpressionEditHandler other = obj as ImplicitExpressionEditHandler;
|
var other = obj as ImplicitExpressionEditHandler;
|
||||||
return other != null &&
|
return other != null &&
|
||||||
base.Equals(other) &&
|
base.Equals(other) &&
|
||||||
Keywords.SetEquals(other.Keywords) &&
|
Keywords.SetEquals(other.Keywords) &&
|
||||||
|
|
@ -74,7 +74,7 @@ namespace Microsoft.AspNet.Razor.Editor
|
||||||
{
|
{
|
||||||
return HandleReplacement(target, normalizedChange);
|
return HandleReplacement(target, normalizedChange);
|
||||||
}
|
}
|
||||||
int changeRelativePosition = normalizedChange.OldPosition - target.Start.AbsoluteIndex;
|
var changeRelativePosition = normalizedChange.OldPosition - target.Start.AbsoluteIndex;
|
||||||
|
|
||||||
// Get the edit context
|
// Get the edit context
|
||||||
char? lastChar = null;
|
char? lastChar = null;
|
||||||
|
|
@ -186,13 +186,13 @@ namespace Microsoft.AspNet.Razor.Editor
|
||||||
|
|
||||||
private static bool RemainingIsWhitespace(Span target, TextChange change)
|
private static bool RemainingIsWhitespace(Span target, TextChange change)
|
||||||
{
|
{
|
||||||
int offset = (change.OldPosition - target.Start.AbsoluteIndex) + change.OldLength;
|
var offset = (change.OldPosition - target.Start.AbsoluteIndex) + change.OldLength;
|
||||||
return String.IsNullOrWhiteSpace(target.Content.Substring(offset));
|
return String.IsNullOrWhiteSpace(target.Content.Substring(offset));
|
||||||
}
|
}
|
||||||
|
|
||||||
private PartialParseResult HandleDotlessCommitInsertion(Span target)
|
private PartialParseResult HandleDotlessCommitInsertion(Span target)
|
||||||
{
|
{
|
||||||
PartialParseResult result = PartialParseResult.Accepted;
|
var result = PartialParseResult.Accepted;
|
||||||
if (!AcceptTrailingDot && target.Content.LastOrDefault() == '.')
|
if (!AcceptTrailingDot && target.Content.LastOrDefault() == '.')
|
||||||
{
|
{
|
||||||
result |= PartialParseResult.Provisional;
|
result |= PartialParseResult.Provisional;
|
||||||
|
|
@ -207,9 +207,9 @@ namespace Microsoft.AspNet.Razor.Editor
|
||||||
// 1. Insert "." at the end of this span
|
// 1. Insert "." at the end of this span
|
||||||
// 2. Replace the "Date." at the end of the span with "DateTime."
|
// 2. Replace the "Date." at the end of the span with "DateTime."
|
||||||
// We need partial parsing to accept case #2.
|
// We need partial parsing to accept case #2.
|
||||||
string oldText = GetOldText(target, change);
|
var oldText = GetOldText(target, change);
|
||||||
|
|
||||||
PartialParseResult result = PartialParseResult.Rejected;
|
var result = PartialParseResult.Rejected;
|
||||||
if (EndsWithDot(oldText) && EndsWithDot(change.NewText))
|
if (EndsWithDot(oldText) && EndsWithDot(change.NewText))
|
||||||
{
|
{
|
||||||
result = PartialParseResult.Accepted;
|
result = PartialParseResult.Accepted;
|
||||||
|
|
@ -265,7 +265,7 @@ namespace Microsoft.AspNet.Razor.Editor
|
||||||
else if (EndsWithDot(change.NewText))
|
else if (EndsWithDot(change.NewText))
|
||||||
{
|
{
|
||||||
// Accept it, possibly provisionally
|
// Accept it, possibly provisionally
|
||||||
PartialParseResult result = PartialParseResult.Accepted;
|
var result = PartialParseResult.Accepted;
|
||||||
if (!AcceptTrailingDot)
|
if (!AcceptTrailingDot)
|
||||||
{
|
{
|
||||||
result |= PartialParseResult.Provisional;
|
result |= PartialParseResult.Provisional;
|
||||||
|
|
@ -297,7 +297,7 @@ namespace Microsoft.AspNet.Razor.Editor
|
||||||
|
|
||||||
private PartialParseResult TryAcceptChange(Span target, TextChange change, PartialParseResult acceptResult = PartialParseResult.Accepted)
|
private PartialParseResult TryAcceptChange(Span target, TextChange change, PartialParseResult acceptResult = PartialParseResult.Accepted)
|
||||||
{
|
{
|
||||||
string content = change.ApplyChange(target);
|
var content = change.ApplyChange(target);
|
||||||
if (StartsWithKeyword(content))
|
if (StartsWithKeyword(content))
|
||||||
{
|
{
|
||||||
return PartialParseResult.Rejected | PartialParseResult.SpanContextChanged;
|
return PartialParseResult.Rejected | PartialParseResult.SpanContextChanged;
|
||||||
|
|
@ -308,7 +308,7 @@ namespace Microsoft.AspNet.Razor.Editor
|
||||||
|
|
||||||
private bool StartsWithKeyword(string newContent)
|
private bool StartsWithKeyword(string newContent)
|
||||||
{
|
{
|
||||||
using (StringReader reader = new StringReader(newContent))
|
using (var reader = new StringReader(newContent))
|
||||||
{
|
{
|
||||||
return Keywords.Contains(reader.ReadWhile(ParserHelpers.IsIdentifierPart));
|
return Keywords.Contains(reader.ReadWhile(ParserHelpers.IsIdentifierPart));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -56,8 +56,8 @@ namespace Microsoft.AspNet.Razor.Editor
|
||||||
|
|
||||||
public virtual EditResult ApplyChange(Span target, TextChange change, bool force)
|
public virtual EditResult ApplyChange(Span target, TextChange change, bool force)
|
||||||
{
|
{
|
||||||
PartialParseResult result = PartialParseResult.Accepted;
|
var result = PartialParseResult.Accepted;
|
||||||
TextChange normalized = change.Normalize();
|
var normalized = change.Normalize();
|
||||||
if (!force)
|
if (!force)
|
||||||
{
|
{
|
||||||
result = CanAcceptChange(target, normalized);
|
result = CanAcceptChange(target, normalized);
|
||||||
|
|
@ -73,8 +73,8 @@ namespace Microsoft.AspNet.Razor.Editor
|
||||||
|
|
||||||
public virtual bool OwnsChange(Span target, TextChange change)
|
public virtual bool OwnsChange(Span target, TextChange change)
|
||||||
{
|
{
|
||||||
int end = target.Start.AbsoluteIndex + target.Length;
|
var end = target.Start.AbsoluteIndex + target.Length;
|
||||||
int changeOldEnd = change.OldPosition + change.OldLength;
|
var changeOldEnd = change.OldPosition + change.OldLength;
|
||||||
return change.OldPosition >= target.Start.AbsoluteIndex &&
|
return change.OldPosition >= target.Start.AbsoluteIndex &&
|
||||||
(changeOldEnd < end || (changeOldEnd == end && AcceptedCharacters != AcceptedCharacters.None));
|
(changeOldEnd < end || (changeOldEnd == end && AcceptedCharacters != AcceptedCharacters.None));
|
||||||
}
|
}
|
||||||
|
|
@ -86,8 +86,8 @@ namespace Microsoft.AspNet.Razor.Editor
|
||||||
|
|
||||||
protected virtual SpanBuilder UpdateSpan(Span target, TextChange normalizedChange)
|
protected virtual SpanBuilder UpdateSpan(Span target, TextChange normalizedChange)
|
||||||
{
|
{
|
||||||
string newContent = normalizedChange.ApplyChange(target);
|
var newContent = normalizedChange.ApplyChange(target);
|
||||||
SpanBuilder newSpan = new SpanBuilder(target);
|
var newSpan = new SpanBuilder(target);
|
||||||
newSpan.ClearSymbols();
|
newSpan.ClearSymbols();
|
||||||
foreach (ISymbol sym in Tokenizer(newContent))
|
foreach (ISymbol sym in Tokenizer(newContent))
|
||||||
{
|
{
|
||||||
|
|
@ -96,7 +96,7 @@ namespace Microsoft.AspNet.Razor.Editor
|
||||||
}
|
}
|
||||||
if (target.Next != null)
|
if (target.Next != null)
|
||||||
{
|
{
|
||||||
SourceLocation newEnd = SourceLocationTracker.CalculateNewLocation(target.Start, newContent);
|
var newEnd = SourceLocationTracker.CalculateNewLocation(target.Start, newContent);
|
||||||
target.Next.ChangeStart(newEnd);
|
target.Next.ChangeStart(newEnd);
|
||||||
}
|
}
|
||||||
return newSpan;
|
return newSpan;
|
||||||
|
|
@ -104,7 +104,7 @@ namespace Microsoft.AspNet.Razor.Editor
|
||||||
|
|
||||||
protected internal static bool IsAtEndOfFirstLine(Span target, TextChange change)
|
protected internal static bool IsAtEndOfFirstLine(Span target, TextChange change)
|
||||||
{
|
{
|
||||||
int endOfFirstLine = target.Content.IndexOfAny(new char[] { (char)0x000d, (char)0x000a, (char)0x2028, (char)0x2029 });
|
var endOfFirstLine = target.Content.IndexOfAny(new char[] { (char)0x000d, (char)0x000a, (char)0x2028, (char)0x2029 });
|
||||||
return (endOfFirstLine == -1 || (change.OldPosition - target.Start.AbsoluteIndex) <= endOfFirstLine);
|
return (endOfFirstLine == -1 || (change.OldPosition - target.Start.AbsoluteIndex) <= endOfFirstLine);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -168,7 +168,7 @@ namespace Microsoft.AspNet.Razor.Editor
|
||||||
|
|
||||||
public override bool Equals(object obj)
|
public override bool Equals(object obj)
|
||||||
{
|
{
|
||||||
SpanEditHandler other = obj as SpanEditHandler;
|
var other = obj as SpanEditHandler;
|
||||||
return other != null &&
|
return other != null &&
|
||||||
AcceptedCharacters == other.AcceptedCharacters &&
|
AcceptedCharacters == other.AcceptedCharacters &&
|
||||||
EditorHints == other.EditorHints;
|
EditorHints == other.EditorHints;
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ namespace Microsoft.AspNet.Razor.Generator
|
||||||
|
|
||||||
public override void GenerateCode(Span target, CodeGeneratorContext context)
|
public override void GenerateCode(Span target, CodeGeneratorContext context)
|
||||||
{
|
{
|
||||||
string ns = Namespace;
|
var ns = Namespace;
|
||||||
|
|
||||||
if (!String.IsNullOrEmpty(ns) && Char.IsWhiteSpace(ns[0]))
|
if (!String.IsNullOrEmpty(ns) && Char.IsWhiteSpace(ns[0]))
|
||||||
{
|
{
|
||||||
|
|
@ -37,7 +37,7 @@ namespace Microsoft.AspNet.Razor.Generator
|
||||||
|
|
||||||
public override bool Equals(object obj)
|
public override bool Equals(object obj)
|
||||||
{
|
{
|
||||||
AddImportCodeGenerator other = obj as AddImportCodeGenerator;
|
var other = obj as AddImportCodeGenerator;
|
||||||
return other != null &&
|
return other != null &&
|
||||||
String.Equals(Namespace, other.Namespace, StringComparison.Ordinal) &&
|
String.Equals(Namespace, other.Namespace, StringComparison.Ordinal) &&
|
||||||
NamespaceKeywordLength == other.NamespaceKeywordLength;
|
NamespaceKeywordLength == other.NamespaceKeywordLength;
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ namespace Microsoft.AspNet.Razor.Generator
|
||||||
|
|
||||||
public override bool Equals(object obj)
|
public override bool Equals(object obj)
|
||||||
{
|
{
|
||||||
AttributeBlockCodeGenerator other = obj as AttributeBlockCodeGenerator;
|
var other = obj as AttributeBlockCodeGenerator;
|
||||||
return other != null &&
|
return other != null &&
|
||||||
String.Equals(other.Name, Name, StringComparison.Ordinal) &&
|
String.Equals(other.Name, Name, StringComparison.Ordinal) &&
|
||||||
Equals(other.Prefix, Prefix) &&
|
Equals(other.Prefix, Prefix) &&
|
||||||
|
|
|
||||||
|
|
@ -120,7 +120,7 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler.CSharp
|
||||||
writer.WriteUsing(import);
|
writer.WriteUsing(import);
|
||||||
}
|
}
|
||||||
|
|
||||||
string taskNamespace = typeof(Task).Namespace;
|
var taskNamespace = typeof(Task).Namespace;
|
||||||
|
|
||||||
// We need to add the task namespace but ONLY if it hasn't been added by the default imports or using imports yet.
|
// We need to add the task namespace but ONLY if it hasn't been added by the default imports or using imports yet.
|
||||||
if (!defaultImports.Contains(taskNamespace) && !usingVisitor.ImportedUsings.Contains(taskNamespace))
|
if (!defaultImports.Contains(taskNamespace) && !usingVisitor.ImportedUsings.Contains(taskNamespace))
|
||||||
|
|
|
||||||
|
|
@ -93,7 +93,7 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler.CSharp
|
||||||
{
|
{
|
||||||
// Need to add an additional line at the end IF there wasn't one already written.
|
// Need to add an additional line at the end IF there wasn't one already written.
|
||||||
// This is needed to work with the C# editor's handling of #line ...
|
// This is needed to work with the C# editor's handling of #line ...
|
||||||
bool endsWithNewline = _writer.GenerateCode().EndsWith("\n");
|
var endsWithNewline = _writer.GenerateCode().EndsWith("\n");
|
||||||
|
|
||||||
// Always write at least 1 empty line to potentially separate code from pragmas.
|
// Always write at least 1 empty line to potentially separate code from pragmas.
|
||||||
_writer.WriteLine();
|
_writer.WriteLine();
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler.CSharp
|
||||||
throw new ArgumentNullException("target");
|
throw new ArgumentNullException("target");
|
||||||
}
|
}
|
||||||
|
|
||||||
int padding = CalculatePadding(target, generatedStart: 0);
|
var padding = CalculatePadding(target, generatedStart: 0);
|
||||||
|
|
||||||
// We treat statement padding specially so for brace positioning, so that in the following example:
|
// We treat statement padding specially so for brace positioning, so that in the following example:
|
||||||
// @if (foo > 0)
|
// @if (foo > 0)
|
||||||
|
|
@ -42,7 +42,7 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler.CSharp
|
||||||
padding--;
|
padding--;
|
||||||
}
|
}
|
||||||
|
|
||||||
string generatedCode = BuildPaddingInternal(padding);
|
var generatedCode = BuildPaddingInternal(padding);
|
||||||
|
|
||||||
return generatedCode;
|
return generatedCode;
|
||||||
}
|
}
|
||||||
|
|
@ -54,7 +54,7 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler.CSharp
|
||||||
|
|
||||||
public string BuildExpressionPadding(Span target, int generatedStart)
|
public string BuildExpressionPadding(Span target, int generatedStart)
|
||||||
{
|
{
|
||||||
int padding = CalculatePadding(target, generatedStart);
|
var padding = CalculatePadding(target, generatedStart);
|
||||||
|
|
||||||
return BuildPaddingInternal(padding);
|
return BuildPaddingInternal(padding);
|
||||||
}
|
}
|
||||||
|
|
@ -91,8 +91,8 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler.CSharp
|
||||||
{
|
{
|
||||||
if (_host.DesignTimeMode && _host.IsIndentingWithTabs)
|
if (_host.DesignTimeMode && _host.IsIndentingWithTabs)
|
||||||
{
|
{
|
||||||
int spaces = padding % _host.TabSize;
|
var spaces = padding % _host.TabSize;
|
||||||
int tabs = padding / _host.TabSize;
|
var tabs = padding / _host.TabSize;
|
||||||
|
|
||||||
return new string('\t', tabs) + new string(' ', spaces);
|
return new string('\t', tabs) + new string(' ', spaces);
|
||||||
}
|
}
|
||||||
|
|
@ -104,7 +104,7 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler.CSharp
|
||||||
|
|
||||||
private static int CollectSpacesAndTabs(Span target, int tabSize)
|
private static int CollectSpacesAndTabs(Span target, int tabSize)
|
||||||
{
|
{
|
||||||
Span firstSpanInLine = target;
|
var firstSpanInLine = target;
|
||||||
|
|
||||||
string currentContent = null;
|
string currentContent = null;
|
||||||
|
|
||||||
|
|
@ -113,9 +113,9 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler.CSharp
|
||||||
// When scanning previous spans we need to be break down the spans with spaces. The parser combines
|
// When scanning previous spans we need to be break down the spans with spaces. The parser combines
|
||||||
// whitespace into existing spans so you'll see tabs, newlines etc. within spans. We only care about
|
// whitespace into existing spans so you'll see tabs, newlines etc. within spans. We only care about
|
||||||
// the \t in existing spans.
|
// the \t in existing spans.
|
||||||
String previousContent = firstSpanInLine.Previous.Content ?? String.Empty;
|
var previousContent = firstSpanInLine.Previous.Content ?? String.Empty;
|
||||||
|
|
||||||
int lastNewLineIndex = previousContent.LastIndexOfAny(_newLineChars);
|
var lastNewLineIndex = previousContent.LastIndexOfAny(_newLineChars);
|
||||||
|
|
||||||
if (lastNewLineIndex < 0)
|
if (lastNewLineIndex < 0)
|
||||||
{
|
{
|
||||||
|
|
@ -134,14 +134,14 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler.CSharp
|
||||||
}
|
}
|
||||||
|
|
||||||
// We need to walk from the beginning of the line, because space + tab(tabSize) = tabSize columns, but tab(tabSize) + space = tabSize+1 columns.
|
// We need to walk from the beginning of the line, because space + tab(tabSize) = tabSize columns, but tab(tabSize) + space = tabSize+1 columns.
|
||||||
Span currentSpanInLine = firstSpanInLine;
|
var currentSpanInLine = firstSpanInLine;
|
||||||
|
|
||||||
if (currentContent == null)
|
if (currentContent == null)
|
||||||
{
|
{
|
||||||
currentContent = currentSpanInLine.Content;
|
currentContent = currentSpanInLine.Content;
|
||||||
}
|
}
|
||||||
|
|
||||||
int padding = 0;
|
var padding = 0;
|
||||||
while (currentSpanInLine != target)
|
while (currentSpanInLine != target)
|
||||||
{
|
{
|
||||||
if (currentContent != null)
|
if (currentContent != null)
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler.CSharp
|
||||||
Writer.Write(ItemParameterName).Write(" => ")
|
Writer.Write(ItemParameterName).Write(" => ")
|
||||||
.WriteStartNewObject(Context.Host.GeneratedClassContext.TemplateTypeName);
|
.WriteStartNewObject(Context.Host.GeneratedClassContext.TemplateTypeName);
|
||||||
|
|
||||||
string currentTargetWriterName = Context.TargetWriterName;
|
var currentTargetWriterName = Context.TargetWriterName;
|
||||||
Context.TargetWriterName = TemplateWriterName;
|
Context.TargetWriterName = TemplateWriterName;
|
||||||
|
|
||||||
using (Writer.BuildLambda(endLine: false, parameterNames: TemplateWriterName))
|
using (Writer.BuildLambda(endLine: false, parameterNames: TemplateWriterName))
|
||||||
|
|
@ -184,8 +184,8 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler.CSharp
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ExpressionRenderingMode currentRenderingMode = Context.ExpressionRenderingMode;
|
var currentRenderingMode = Context.ExpressionRenderingMode;
|
||||||
string currentTargetWriterName = Context.TargetWriterName;
|
var currentTargetWriterName = Context.TargetWriterName;
|
||||||
|
|
||||||
Context.TargetWriterName = ValueWriterName;
|
Context.TargetWriterName = ValueWriterName;
|
||||||
|
|
||||||
|
|
@ -261,7 +261,7 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler.CSharp
|
||||||
{
|
{
|
||||||
Writer.WriteStartMethodInvocation("Tuple.Create", new string[] { "System.Object", "System.Int32" });
|
Writer.WriteStartMethodInvocation("Tuple.Create", new string[] { "System.Object", "System.Int32" });
|
||||||
|
|
||||||
ExpressionRenderingMode currentRenderingMode = Context.ExpressionRenderingMode;
|
var currentRenderingMode = Context.ExpressionRenderingMode;
|
||||||
Context.ExpressionRenderingMode = ExpressionRenderingMode.InjectCode;
|
Context.ExpressionRenderingMode = ExpressionRenderingMode.InjectCode;
|
||||||
|
|
||||||
Accept(chunk.Children);
|
Accept(chunk.Children);
|
||||||
|
|
@ -339,8 +339,8 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler.CSharp
|
||||||
|
|
||||||
if (firstChild != null)
|
if (firstChild != null)
|
||||||
{
|
{
|
||||||
int currentIndent = Writer.CurrentIndent;
|
var currentIndent = Writer.CurrentIndent;
|
||||||
string designTimeAssignment = "__o = ";
|
var designTimeAssignment = "__o = ";
|
||||||
Writer.ResetIndent();
|
Writer.ResetIndent();
|
||||||
|
|
||||||
var documentLocation = firstChild.Association.Start;
|
var documentLocation = firstChild.Association.Start;
|
||||||
|
|
|
||||||
|
|
@ -23,10 +23,10 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler.CSharp
|
||||||
{
|
{
|
||||||
IDisposable lambdaScope = null;
|
IDisposable lambdaScope = null;
|
||||||
|
|
||||||
string accessibility = "public " + (Context.Host.StaticHelpers ? "static" : String.Empty);
|
var accessibility = "public " + (Context.Host.StaticHelpers ? "static" : String.Empty);
|
||||||
|
|
||||||
// We want to write the method signature at 0 indentation so if helper's are formatted they format correctly.
|
// We want to write the method signature at 0 indentation so if helper's are formatted they format correctly.
|
||||||
int currentIndentation = Writer.CurrentIndent;
|
var currentIndentation = Writer.CurrentIndent;
|
||||||
Writer.ResetIndent();
|
Writer.ResetIndent();
|
||||||
Writer.Write(accessibility).Write(" ").Write(Context.Host.GeneratedClassContext.TemplateTypeName).Write(" ");
|
Writer.Write(accessibility).Write(" ").Write(Context.Host.GeneratedClassContext.TemplateTypeName).Write(" ");
|
||||||
Writer.SetIndent(currentIndentation);
|
Writer.SetIndent(currentIndentation);
|
||||||
|
|
@ -44,7 +44,7 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler.CSharp
|
||||||
lambdaScope = Writer.BuildLambda(endLine: false, parameterNames: HelperWriterName);
|
lambdaScope = Writer.BuildLambda(endLine: false, parameterNames: HelperWriterName);
|
||||||
}
|
}
|
||||||
|
|
||||||
string currentTargetWriterName = Context.TargetWriterName;
|
var currentTargetWriterName = Context.TargetWriterName;
|
||||||
Context.TargetWriterName = HelperWriterName;
|
Context.TargetWriterName = HelperWriterName;
|
||||||
|
|
||||||
// Generate children code
|
// Generate children code
|
||||||
|
|
|
||||||
|
|
@ -23,8 +23,8 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler.CSharp
|
||||||
|
|
||||||
protected override void Visit(UsingChunk chunk)
|
protected override void Visit(UsingChunk chunk)
|
||||||
{
|
{
|
||||||
string documentContent = ((Span)chunk.Association).Content.Trim();
|
var documentContent = ((Span)chunk.Association).Content.Trim();
|
||||||
bool mapSemicolon = false;
|
var mapSemicolon = false;
|
||||||
|
|
||||||
if (documentContent.LastOrDefault() == ';')
|
if (documentContent.LastOrDefault() == ';')
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler
|
||||||
|
|
||||||
public override bool Equals(object obj)
|
public override bool Equals(object obj)
|
||||||
{
|
{
|
||||||
LineMapping other = obj as LineMapping;
|
var other = obj as LineMapping;
|
||||||
return DocumentLocation.Equals(other.DocumentLocation) &&
|
return DocumentLocation.Equals(other.DocumentLocation) &&
|
||||||
GeneratedLocation.Equals(other.GeneratedLocation);
|
GeneratedLocation.Equals(other.GeneratedLocation);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler
|
||||||
|
|
||||||
public override bool Equals(object obj)
|
public override bool Equals(object obj)
|
||||||
{
|
{
|
||||||
MappingLocation other = obj as MappingLocation;
|
var other = obj as MappingLocation;
|
||||||
|
|
||||||
return AbsoluteIndex == other.AbsoluteIndex &&
|
return AbsoluteIndex == other.AbsoluteIndex &&
|
||||||
ContentLength == other.ContentLength &&
|
ContentLength == other.ContentLength &&
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ namespace Microsoft.AspNet.Razor.Generator
|
||||||
|
|
||||||
public override bool Equals(object obj)
|
public override bool Equals(object obj)
|
||||||
{
|
{
|
||||||
DynamicAttributeBlockCodeGenerator other = obj as DynamicAttributeBlockCodeGenerator;
|
var other = obj as DynamicAttributeBlockCodeGenerator;
|
||||||
return other != null &&
|
return other != null &&
|
||||||
Equals(other.Prefix, Prefix);
|
Equals(other.Prefix, Prefix);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ namespace Microsoft.AspNet.Razor.Generator
|
||||||
|
|
||||||
public override bool Equals(object obj)
|
public override bool Equals(object obj)
|
||||||
{
|
{
|
||||||
HelperCodeGenerator other = obj as HelperCodeGenerator;
|
var other = obj as HelperCodeGenerator;
|
||||||
return other != null &&
|
return other != null &&
|
||||||
base.Equals(other) &&
|
base.Equals(other) &&
|
||||||
HeaderComplete == other.HeaderComplete &&
|
HeaderComplete == other.HeaderComplete &&
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,7 @@ namespace Microsoft.AspNet.Razor.Generator
|
||||||
|
|
||||||
public override bool Equals(object obj)
|
public override bool Equals(object obj)
|
||||||
{
|
{
|
||||||
LiteralAttributeCodeGenerator other = obj as LiteralAttributeCodeGenerator;
|
var other = obj as LiteralAttributeCodeGenerator;
|
||||||
return other != null &&
|
return other != null &&
|
||||||
Equals(other.Prefix, Prefix) &&
|
Equals(other.Prefix, Prefix) &&
|
||||||
Equals(other.Value, Value) &&
|
Equals(other.Value, Value) &&
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ namespace Microsoft.AspNet.Razor.Generator
|
||||||
|
|
||||||
public override bool Equals(object obj)
|
public override bool Equals(object obj)
|
||||||
{
|
{
|
||||||
RazorDirectiveAttributeCodeGenerator other = obj as RazorDirectiveAttributeCodeGenerator;
|
var other = obj as RazorDirectiveAttributeCodeGenerator;
|
||||||
return other != null &&
|
return other != null &&
|
||||||
Name.Equals(other.Name, StringComparison.OrdinalIgnoreCase) &&
|
Name.Equals(other.Name, StringComparison.OrdinalIgnoreCase) &&
|
||||||
Value.Equals(other.Value, StringComparison.OrdinalIgnoreCase);
|
Value.Equals(other.Value, StringComparison.OrdinalIgnoreCase);
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ namespace Microsoft.AspNet.Razor.Generator
|
||||||
|
|
||||||
public override bool Equals(object obj)
|
public override bool Equals(object obj)
|
||||||
{
|
{
|
||||||
SectionCodeGenerator other = obj as SectionCodeGenerator;
|
var other = obj as SectionCodeGenerator;
|
||||||
return other != null &&
|
return other != null &&
|
||||||
base.Equals(other) &&
|
base.Equals(other) &&
|
||||||
String.Equals(SectionName, other.SectionName, StringComparison.Ordinal);
|
String.Equals(SectionName, other.SectionName, StringComparison.Ordinal);
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ namespace Microsoft.AspNet.Razor.Generator
|
||||||
|
|
||||||
public override bool Equals(object obj)
|
public override bool Equals(object obj)
|
||||||
{
|
{
|
||||||
SetBaseTypeCodeGenerator other = obj as SetBaseTypeCodeGenerator;
|
var other = obj as SetBaseTypeCodeGenerator;
|
||||||
return other != null &&
|
return other != null &&
|
||||||
String.Equals(BaseType, other.BaseType, StringComparison.Ordinal);
|
String.Equals(BaseType, other.BaseType, StringComparison.Ordinal);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ namespace Microsoft.AspNet.Razor.Generator
|
||||||
|
|
||||||
public override bool Equals(object obj)
|
public override bool Equals(object obj)
|
||||||
{
|
{
|
||||||
SetLayoutCodeGenerator other = obj as SetLayoutCodeGenerator;
|
var other = obj as SetLayoutCodeGenerator;
|
||||||
return other != null && String.Equals(other.LayoutPath, LayoutPath, StringComparison.Ordinal);
|
return other != null && String.Equals(other.LayoutPath, LayoutPath, StringComparison.Ordinal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
Context.CurrentBlock.Type = BlockType.Directive;
|
Context.CurrentBlock.Type = BlockType.Directive;
|
||||||
|
|
||||||
// Accept spaces, but not newlines
|
// Accept spaces, but not newlines
|
||||||
bool foundSomeWhitespace = At(CSharpSymbolType.WhiteSpace);
|
var foundSomeWhitespace = At(CSharpSymbolType.WhiteSpace);
|
||||||
AcceptWhile(CSharpSymbolType.WhiteSpace);
|
AcceptWhile(CSharpSymbolType.WhiteSpace);
|
||||||
Output(SpanKind.MetaCode, foundSomeWhitespace ? AcceptedCharacters.None : AcceptedCharacters.Any);
|
Output(SpanKind.MetaCode, foundSomeWhitespace ? AcceptedCharacters.None : AcceptedCharacters.Any);
|
||||||
|
|
||||||
|
|
@ -51,7 +51,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
AcceptUntil(CSharpSymbolType.NewLine);
|
AcceptUntil(CSharpSymbolType.NewLine);
|
||||||
Span.CodeGenerator = new SetLayoutCodeGenerator(Span.GetContent());
|
Span.CodeGenerator = new SetLayoutCodeGenerator(Span.GetContent());
|
||||||
Span.EditHandler.EditorHints = EditorHints.LayoutPage | EditorHints.VirtualPath;
|
Span.EditHandler.EditorHints = EditorHints.LayoutPage | EditorHints.VirtualPath;
|
||||||
bool foundNewline = Optional(CSharpSymbolType.NewLine);
|
var foundNewline = Optional(CSharpSymbolType.NewLine);
|
||||||
AddMarkerSymbolIfNecessary();
|
AddMarkerSymbolIfNecessary();
|
||||||
Output(SpanKind.MetaCode, foundNewline ? AcceptedCharacters.None : AcceptedCharacters.Any);
|
Output(SpanKind.MetaCode, foundNewline ? AcceptedCharacters.None : AcceptedCharacters.Any);
|
||||||
}
|
}
|
||||||
|
|
@ -75,7 +75,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
Context.CurrentBlock.Type = BlockType.Directive;
|
Context.CurrentBlock.Type = BlockType.Directive;
|
||||||
|
|
||||||
// Accept whitespace
|
// Accept whitespace
|
||||||
CSharpSymbol remainingWs = AcceptSingleWhiteSpaceCharacter();
|
var remainingWs = AcceptSingleWhiteSpaceCharacter();
|
||||||
|
|
||||||
if (Span.Symbols.Count > 1)
|
if (Span.Symbols.Count > 1)
|
||||||
{
|
{
|
||||||
|
|
@ -97,7 +97,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pull out the type name
|
// Pull out the type name
|
||||||
string sessionStateValue = String.Concat(
|
var sessionStateValue = String.Concat(
|
||||||
Span.Symbols
|
Span.Symbols
|
||||||
.Cast<CSharpSymbol>()
|
.Cast<CSharpSymbol>()
|
||||||
.Select(sym => sym.Content)).Trim();
|
.Select(sym => sym.Content)).Trim();
|
||||||
|
|
@ -119,14 +119,14 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
[SuppressMessage("Microsoft.Globalization", "CA1308:NormalizeStringsToUppercase", Justification = "C# Keywords are always lower-case")]
|
[SuppressMessage("Microsoft.Globalization", "CA1308:NormalizeStringsToUppercase", Justification = "C# Keywords are always lower-case")]
|
||||||
protected virtual void HelperDirective()
|
protected virtual void HelperDirective()
|
||||||
{
|
{
|
||||||
bool nested = Context.IsWithin(BlockType.Helper);
|
var nested = Context.IsWithin(BlockType.Helper);
|
||||||
|
|
||||||
// Set the block and span type
|
// Set the block and span type
|
||||||
Context.CurrentBlock.Type = BlockType.Helper;
|
Context.CurrentBlock.Type = BlockType.Helper;
|
||||||
|
|
||||||
// Verify we're on "helper" and accept
|
// Verify we're on "helper" and accept
|
||||||
AssertDirective(SyntaxConstants.CSharp.HelperKeyword);
|
AssertDirective(SyntaxConstants.CSharp.HelperKeyword);
|
||||||
Block block = new Block(CurrentSymbol.Content.ToString().ToLowerInvariant(), CurrentLocation);
|
var block = new Block(CurrentSymbol.Content.ToString().ToLowerInvariant(), CurrentLocation);
|
||||||
AcceptAndMoveNext();
|
AcceptAndMoveNext();
|
||||||
|
|
||||||
if (nested)
|
if (nested)
|
||||||
|
|
@ -159,7 +159,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
CSharpSymbol remainingWs = AcceptSingleWhiteSpaceCharacter();
|
var remainingWs = AcceptSingleWhiteSpaceCharacter();
|
||||||
|
|
||||||
// Output metacode and continue
|
// Output metacode and continue
|
||||||
Output(SpanKind.MetaCode);
|
Output(SpanKind.MetaCode);
|
||||||
|
|
@ -170,7 +170,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
AcceptWhile(IsSpacingToken(includeNewLines: false, includeComments: true)); // Don't accept newlines.
|
AcceptWhile(IsSpacingToken(includeNewLines: false, includeComments: true)); // Don't accept newlines.
|
||||||
|
|
||||||
// Expecting an identifier (helper name)
|
// Expecting an identifier (helper name)
|
||||||
bool errorReported = !Required(CSharpSymbolType.Identifier, errorIfNotFound: true, errorBase: RazorResources.FormatParseError_Unexpected_Character_At_Helper_Name_Start);
|
var errorReported = !Required(CSharpSymbolType.Identifier, errorIfNotFound: true, errorBase: RazorResources.FormatParseError_Unexpected_Character_At_Helper_Name_Start);
|
||||||
if (!errorReported)
|
if (!errorReported)
|
||||||
{
|
{
|
||||||
Assert(CSharpSymbolType.Identifier);
|
Assert(CSharpSymbolType.Identifier);
|
||||||
|
|
@ -180,7 +180,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
AcceptWhile(IsSpacingToken(includeNewLines: false, includeComments: true));
|
AcceptWhile(IsSpacingToken(includeNewLines: false, includeComments: true));
|
||||||
|
|
||||||
// Expecting parameter list start: "("
|
// Expecting parameter list start: "("
|
||||||
SourceLocation bracketErrorPos = CurrentLocation;
|
var bracketErrorPos = CurrentLocation;
|
||||||
if (!Optional(CSharpSymbolType.LeftParenthesis))
|
if (!Optional(CSharpSymbolType.LeftParenthesis))
|
||||||
{
|
{
|
||||||
if (!errorReported)
|
if (!errorReported)
|
||||||
|
|
@ -193,7 +193,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SourceLocation bracketStart = CurrentLocation;
|
var bracketStart = CurrentLocation;
|
||||||
if (!Balance(BalancingModes.NoErrorOnFailure,
|
if (!Balance(BalancingModes.NoErrorOnFailure,
|
||||||
CSharpSymbolType.LeftParenthesis,
|
CSharpSymbolType.LeftParenthesis,
|
||||||
CSharpSymbolType.RightParenthesis,
|
CSharpSymbolType.RightParenthesis,
|
||||||
|
|
@ -207,12 +207,12 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
Optional(CSharpSymbolType.RightParenthesis);
|
Optional(CSharpSymbolType.RightParenthesis);
|
||||||
}
|
}
|
||||||
|
|
||||||
int bookmark = CurrentLocation.AbsoluteIndex;
|
var bookmark = CurrentLocation.AbsoluteIndex;
|
||||||
IEnumerable<CSharpSymbol> ws = ReadWhile(IsSpacingToken(includeNewLines: true, includeComments: true));
|
IEnumerable<CSharpSymbol> ws = ReadWhile(IsSpacingToken(includeNewLines: true, includeComments: true));
|
||||||
|
|
||||||
// Expecting a "{"
|
// Expecting a "{"
|
||||||
SourceLocation errorLocation = CurrentLocation;
|
var errorLocation = CurrentLocation;
|
||||||
bool headerComplete = At(CSharpSymbolType.LeftBrace);
|
var headerComplete = At(CSharpSymbolType.LeftBrace);
|
||||||
if (headerComplete)
|
if (headerComplete)
|
||||||
{
|
{
|
||||||
Accept(ws);
|
Accept(ws);
|
||||||
|
|
@ -235,7 +235,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
// Grab the signature and build the code generator
|
// Grab the signature and build the code generator
|
||||||
AddMarkerSymbolIfNecessary();
|
AddMarkerSymbolIfNecessary();
|
||||||
LocationTagged<string> signature = Span.GetContent();
|
LocationTagged<string> signature = Span.GetContent();
|
||||||
HelperCodeGenerator blockGen = new HelperCodeGenerator(signature, headerComplete);
|
var blockGen = new HelperCodeGenerator(signature, headerComplete);
|
||||||
Context.CurrentBlock.CodeGenerator = blockGen;
|
Context.CurrentBlock.CodeGenerator = blockGen;
|
||||||
|
|
||||||
// The block will generate appropriate code,
|
// The block will generate appropriate code,
|
||||||
|
|
@ -254,7 +254,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
}
|
}
|
||||||
|
|
||||||
// We're valid, so parse the nested block
|
// We're valid, so parse the nested block
|
||||||
AutoCompleteEditHandler bodyEditHandler = new AutoCompleteEditHandler(Language.TokenizeString);
|
var bodyEditHandler = new AutoCompleteEditHandler(Language.TokenizeString);
|
||||||
using (PushSpanConfig(DefaultSpanConfig))
|
using (PushSpanConfig(DefaultSpanConfig))
|
||||||
{
|
{
|
||||||
using (Context.StartBlock(BlockType.Statement))
|
using (Context.StartBlock(BlockType.Statement))
|
||||||
|
|
@ -289,8 +289,8 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
|
|
||||||
protected virtual void SectionDirective()
|
protected virtual void SectionDirective()
|
||||||
{
|
{
|
||||||
bool nested = Context.IsWithin(BlockType.Section);
|
var nested = Context.IsWithin(BlockType.Section);
|
||||||
bool errorReported = false;
|
var errorReported = false;
|
||||||
|
|
||||||
// Set the block and span type
|
// Set the block and span type
|
||||||
Context.CurrentBlock.Type = BlockType.Section;
|
Context.CurrentBlock.Type = BlockType.Section;
|
||||||
|
|
@ -308,7 +308,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
IEnumerable<CSharpSymbol> ws = ReadWhile(IsSpacingToken(includeNewLines: true, includeComments: false));
|
IEnumerable<CSharpSymbol> ws = ReadWhile(IsSpacingToken(includeNewLines: true, includeComments: false));
|
||||||
|
|
||||||
// Get the section name
|
// Get the section name
|
||||||
string sectionName = String.Empty;
|
var sectionName = String.Empty;
|
||||||
if (!Required(CSharpSymbolType.Identifier,
|
if (!Required(CSharpSymbolType.Identifier,
|
||||||
errorIfNotFound: true,
|
errorIfNotFound: true,
|
||||||
errorBase: RazorResources.FormatParseError_Unexpected_Character_At_Section_Name_Start))
|
errorBase: RazorResources.FormatParseError_Unexpected_Character_At_Section_Name_Start))
|
||||||
|
|
@ -330,11 +330,11 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
}
|
}
|
||||||
Context.CurrentBlock.CodeGenerator = new SectionCodeGenerator(sectionName);
|
Context.CurrentBlock.CodeGenerator = new SectionCodeGenerator(sectionName);
|
||||||
|
|
||||||
SourceLocation errorLocation = CurrentLocation;
|
var errorLocation = CurrentLocation;
|
||||||
ws = ReadWhile(IsSpacingToken(includeNewLines: true, includeComments: false));
|
ws = ReadWhile(IsSpacingToken(includeNewLines: true, includeComments: false));
|
||||||
|
|
||||||
// Get the starting brace
|
// Get the starting brace
|
||||||
bool sawStartingBrace = At(CSharpSymbolType.LeftBrace);
|
var sawStartingBrace = At(CSharpSymbolType.LeftBrace);
|
||||||
if (!sawStartingBrace)
|
if (!sawStartingBrace)
|
||||||
{
|
{
|
||||||
if (!errorReported)
|
if (!errorReported)
|
||||||
|
|
@ -357,7 +357,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set up edit handler
|
// Set up edit handler
|
||||||
AutoCompleteEditHandler editHandler = new AutoCompleteEditHandler(Language.TokenizeString) { AutoCompleteAtEndOfSpan = true };
|
var editHandler = new AutoCompleteEditHandler(Language.TokenizeString) { AutoCompleteAtEndOfSpan = true };
|
||||||
|
|
||||||
Span.EditHandler = editHandler;
|
Span.EditHandler = editHandler;
|
||||||
Span.Accept(CurrentSymbol);
|
Span.Accept(CurrentSymbol);
|
||||||
|
|
@ -391,7 +391,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
|
|
||||||
// Verify we're on "functions" and accept
|
// Verify we're on "functions" and accept
|
||||||
AssertDirective(SyntaxConstants.CSharp.FunctionsKeyword);
|
AssertDirective(SyntaxConstants.CSharp.FunctionsKeyword);
|
||||||
Block block = new Block(CurrentSymbol);
|
var block = new Block(CurrentSymbol);
|
||||||
AcceptAndMoveNext();
|
AcceptAndMoveNext();
|
||||||
|
|
||||||
AcceptWhile(IsSpacingToken(includeNewLines: true, includeComments: false));
|
AcceptWhile(IsSpacingToken(includeNewLines: true, includeComments: false));
|
||||||
|
|
@ -410,13 +410,13 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
}
|
}
|
||||||
|
|
||||||
// Capture start point and continue
|
// Capture start point and continue
|
||||||
SourceLocation blockStart = CurrentLocation;
|
var blockStart = CurrentLocation;
|
||||||
AcceptAndMoveNext();
|
AcceptAndMoveNext();
|
||||||
|
|
||||||
// Output what we've seen and continue
|
// Output what we've seen and continue
|
||||||
Output(SpanKind.MetaCode);
|
Output(SpanKind.MetaCode);
|
||||||
|
|
||||||
AutoCompleteEditHandler editHandler = new AutoCompleteEditHandler(Language.TokenizeString);
|
var editHandler = new AutoCompleteEditHandler(Language.TokenizeString);
|
||||||
Span.EditHandler = editHandler;
|
Span.EditHandler = editHandler;
|
||||||
|
|
||||||
Balance(BalancingModes.NoErrorOnFailure, CSharpSymbolType.LeftBrace, CSharpSymbolType.RightBrace, blockStart);
|
Balance(BalancingModes.NoErrorOnFailure, CSharpSymbolType.LeftBrace, CSharpSymbolType.RightBrace, blockStart);
|
||||||
|
|
@ -469,7 +469,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
Context.CurrentBlock.Type = BlockType.Directive;
|
Context.CurrentBlock.Type = BlockType.Directive;
|
||||||
|
|
||||||
// Accept whitespace
|
// Accept whitespace
|
||||||
CSharpSymbol remainingWs = AcceptSingleWhiteSpaceCharacter();
|
var remainingWs = AcceptSingleWhiteSpaceCharacter();
|
||||||
|
|
||||||
if (Span.Symbols.Count > 1)
|
if (Span.Symbols.Count > 1)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -94,7 +94,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
private void UsingKeyword(bool topLevel)
|
private void UsingKeyword(bool topLevel)
|
||||||
{
|
{
|
||||||
Assert(CSharpKeyword.Using);
|
Assert(CSharpKeyword.Using);
|
||||||
Block block = new Block(CurrentSymbol);
|
var block = new Block(CurrentSymbol);
|
||||||
AcceptAndMoveNext();
|
AcceptAndMoveNext();
|
||||||
AcceptWhile(IsSpacingToken(includeNewLines: false, includeComments: true));
|
AcceptWhile(IsSpacingToken(includeNewLines: false, includeComments: true));
|
||||||
|
|
||||||
|
|
@ -293,7 +293,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Block block = new Block(CurrentSymbol);
|
var block = new Block(CurrentSymbol);
|
||||||
|
|
||||||
AcceptAndMoveNext();
|
AcceptAndMoveNext();
|
||||||
AcceptWhile(IsSpacingToken(includeNewLines: true, includeComments: true));
|
AcceptWhile(IsSpacingToken(includeNewLines: true, includeComments: true));
|
||||||
|
|
@ -332,7 +332,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
private void UnconditionalBlock()
|
private void UnconditionalBlock()
|
||||||
{
|
{
|
||||||
Assert(CSharpSymbolType.Keyword);
|
Assert(CSharpSymbolType.Keyword);
|
||||||
Block block = new Block(CurrentSymbol);
|
var block = new Block(CurrentSymbol);
|
||||||
AcceptAndMoveNext();
|
AcceptAndMoveNext();
|
||||||
AcceptWhile(IsSpacingToken(includeNewLines: true, includeComments: true));
|
AcceptWhile(IsSpacingToken(includeNewLines: true, includeComments: true));
|
||||||
ExpectCodeBlock(block);
|
ExpectCodeBlock(block);
|
||||||
|
|
@ -341,7 +341,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
private void ConditionalBlock(bool topLevel)
|
private void ConditionalBlock(bool topLevel)
|
||||||
{
|
{
|
||||||
Assert(CSharpSymbolType.Keyword);
|
Assert(CSharpSymbolType.Keyword);
|
||||||
Block block = new Block(CurrentSymbol);
|
var block = new Block(CurrentSymbol);
|
||||||
ConditionalBlock(block);
|
ConditionalBlock(block);
|
||||||
if (topLevel)
|
if (topLevel)
|
||||||
{
|
{
|
||||||
|
|
@ -366,7 +366,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
{
|
{
|
||||||
if (At(CSharpSymbolType.LeftParenthesis))
|
if (At(CSharpSymbolType.LeftParenthesis))
|
||||||
{
|
{
|
||||||
bool complete = Balance(BalancingModes.BacktrackOnFailure | BalancingModes.AllowCommentsAndTemplates);
|
var complete = Balance(BalancingModes.BacktrackOnFailure | BalancingModes.AllowCommentsAndTemplates);
|
||||||
if (!complete)
|
if (!complete)
|
||||||
{
|
{
|
||||||
AcceptUntil(CSharpSymbolType.NewLine);
|
AcceptUntil(CSharpSymbolType.NewLine);
|
||||||
|
|
@ -390,7 +390,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
Span.EditHandler.AcceptedCharacters = AcceptedCharacters.Any;
|
Span.EditHandler.AcceptedCharacters = AcceptedCharacters.Any;
|
||||||
|
|
||||||
// Accept whitespace but always keep the last whitespace node so we can put it back if necessary
|
// Accept whitespace but always keep the last whitespace node so we can put it back if necessary
|
||||||
CSharpSymbol lastWs = AcceptWhiteSpaceInLines();
|
var lastWs = AcceptWhiteSpaceInLines();
|
||||||
Debug.Assert(lastWs == null || (lastWs.Start.AbsoluteIndex + lastWs.Content.Length == CurrentLocation.AbsoluteIndex));
|
Debug.Assert(lastWs == null || (lastWs.Start.AbsoluteIndex + lastWs.Content.Length == CurrentLocation.AbsoluteIndex));
|
||||||
|
|
||||||
if (EndOfFile)
|
if (EndOfFile)
|
||||||
|
|
@ -402,13 +402,13 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
CSharpSymbolType type = CurrentSymbol.Type;
|
var type = CurrentSymbol.Type;
|
||||||
SourceLocation loc = CurrentLocation;
|
var loc = CurrentLocation;
|
||||||
|
|
||||||
bool isSingleLineMarkup = type == CSharpSymbolType.Transition && NextIs(CSharpSymbolType.Colon);
|
var isSingleLineMarkup = type == CSharpSymbolType.Transition && NextIs(CSharpSymbolType.Colon);
|
||||||
bool isMarkup = isSingleLineMarkup ||
|
var isMarkup = isSingleLineMarkup ||
|
||||||
type == CSharpSymbolType.LessThan ||
|
type == CSharpSymbolType.LessThan ||
|
||||||
(type == CSharpSymbolType.Transition && NextIs(CSharpSymbolType.LessThan));
|
(type == CSharpSymbolType.Transition && NextIs(CSharpSymbolType.LessThan));
|
||||||
|
|
||||||
if (Context.DesignTimeMode || !isMarkup)
|
if (Context.DesignTimeMode || !isMarkup)
|
||||||
{
|
{
|
||||||
|
|
@ -487,7 +487,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
{
|
{
|
||||||
// First, verify the type of the block
|
// First, verify the type of the block
|
||||||
Assert(CSharpSymbolType.Transition);
|
Assert(CSharpSymbolType.Transition);
|
||||||
CSharpSymbol transition = CurrentSymbol;
|
var transition = CurrentSymbol;
|
||||||
NextToken();
|
NextToken();
|
||||||
|
|
||||||
if (At(CSharpSymbolType.Transition))
|
if (At(CSharpSymbolType.Transition))
|
||||||
|
|
@ -527,7 +527,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
{
|
{
|
||||||
while (!EndOfFile)
|
while (!EndOfFile)
|
||||||
{
|
{
|
||||||
int bookmark = CurrentLocation.AbsoluteIndex;
|
var bookmark = CurrentLocation.AbsoluteIndex;
|
||||||
IEnumerable<CSharpSymbol> read = ReadWhile(sym => sym.Type != CSharpSymbolType.Semicolon &&
|
IEnumerable<CSharpSymbol> read = ReadWhile(sym => sym.Type != CSharpSymbolType.Semicolon &&
|
||||||
sym.Type != CSharpSymbolType.RazorCommentTransition &&
|
sym.Type != CSharpSymbolType.RazorCommentTransition &&
|
||||||
sym.Type != CSharpSymbolType.Transition &&
|
sym.Type != CSharpSymbolType.Transition &&
|
||||||
|
|
|
||||||
|
|
@ -147,7 +147,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
|
|
||||||
AcceptWhile(IsSpacingToken(includeNewLines: true, includeComments: true));
|
AcceptWhile(IsSpacingToken(includeNewLines: true, includeComments: true));
|
||||||
|
|
||||||
CSharpSymbol current = CurrentSymbol;
|
var current = CurrentSymbol;
|
||||||
if (At(CSharpSymbolType.StringLiteral) && CurrentSymbol.Content.Length > 0 && CurrentSymbol.Content[0] == SyntaxConstants.TransitionCharacter)
|
if (At(CSharpSymbolType.StringLiteral) && CurrentSymbol.Content.Length > 0 && CurrentSymbol.Content[0] == SyntaxConstants.TransitionCharacter)
|
||||||
{
|
{
|
||||||
Tuple<CSharpSymbol, CSharpSymbol> split = Language.SplitSymbol(CurrentSymbol, 1, CSharpSymbolType.Transition);
|
Tuple<CSharpSymbol, CSharpSymbol> split = Language.SplitSymbol(CurrentSymbol, 1, CSharpSymbolType.Transition);
|
||||||
|
|
@ -279,7 +279,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
private void VerbatimBlock()
|
private void VerbatimBlock()
|
||||||
{
|
{
|
||||||
Assert(CSharpSymbolType.LeftBrace);
|
Assert(CSharpSymbolType.LeftBrace);
|
||||||
Block block = new Block(RazorResources.BlockName_Code, CurrentLocation);
|
var block = new Block(RazorResources.BlockName_Code, CurrentLocation);
|
||||||
AcceptAndMoveNext();
|
AcceptAndMoveNext();
|
||||||
|
|
||||||
// Set up the "{" span and output
|
// Set up the "{" span and output
|
||||||
|
|
@ -288,7 +288,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
Output(SpanKind.MetaCode);
|
Output(SpanKind.MetaCode);
|
||||||
|
|
||||||
// Set up auto-complete and parse the code block
|
// Set up auto-complete and parse the code block
|
||||||
AutoCompleteEditHandler editHandler = new AutoCompleteEditHandler(Language.TokenizeString);
|
var editHandler = new AutoCompleteEditHandler(Language.TokenizeString);
|
||||||
Span.EditHandler = editHandler;
|
Span.EditHandler = editHandler;
|
||||||
CodeBlock(false, block);
|
CodeBlock(false, block);
|
||||||
|
|
||||||
|
|
@ -391,7 +391,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
}
|
}
|
||||||
if (CurrentSymbol.Type == CSharpSymbolType.Dot)
|
if (CurrentSymbol.Type == CSharpSymbolType.Dot)
|
||||||
{
|
{
|
||||||
CSharpSymbol dot = CurrentSymbol;
|
var dot = CurrentSymbol;
|
||||||
if (NextToken())
|
if (NextToken())
|
||||||
{
|
{
|
||||||
if (At(CSharpSymbolType.Identifier) || At(CSharpSymbolType.Keyword))
|
if (At(CSharpSymbolType.Identifier) || At(CSharpSymbolType.Keyword))
|
||||||
|
|
@ -485,7 +485,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
|
|
||||||
private void ExplicitExpression()
|
private void ExplicitExpression()
|
||||||
{
|
{
|
||||||
Block block = new Block(RazorResources.BlockName_ExplicitExpression, CurrentLocation);
|
var block = new Block(RazorResources.BlockName_ExplicitExpression, CurrentLocation);
|
||||||
Assert(CSharpSymbolType.LeftParenthesis);
|
Assert(CSharpSymbolType.LeftParenthesis);
|
||||||
AcceptAndMoveNext();
|
AcceptAndMoveNext();
|
||||||
Span.EditHandler.AcceptedCharacters = AcceptedCharacters.None;
|
Span.EditHandler.AcceptedCharacters = AcceptedCharacters.None;
|
||||||
|
|
@ -493,7 +493,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
Output(SpanKind.MetaCode);
|
Output(SpanKind.MetaCode);
|
||||||
using (PushSpanConfig(ConfigureExplicitExpressionSpan))
|
using (PushSpanConfig(ConfigureExplicitExpressionSpan))
|
||||||
{
|
{
|
||||||
bool success = Balance(
|
var success = Balance(
|
||||||
BalancingModes.BacktrackOnFailure | BalancingModes.NoErrorOnFailure | BalancingModes.AllowCommentsAndTemplates,
|
BalancingModes.BacktrackOnFailure | BalancingModes.NoErrorOnFailure | BalancingModes.AllowCommentsAndTemplates,
|
||||||
CSharpSymbolType.LeftParenthesis,
|
CSharpSymbolType.LeftParenthesis,
|
||||||
CSharpSymbolType.RightParenthesis,
|
CSharpSymbolType.RightParenthesis,
|
||||||
|
|
@ -553,7 +553,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
private void NestedBlock()
|
private void NestedBlock()
|
||||||
{
|
{
|
||||||
Output(SpanKind.Code);
|
Output(SpanKind.Code);
|
||||||
bool wasNested = IsNested;
|
var wasNested = IsNested;
|
||||||
IsNested = true;
|
IsNested = true;
|
||||||
using (PushSpanConfig())
|
using (PushSpanConfig())
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -20,17 +20,17 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
|
|
||||||
protected override bool CanRewrite(Block block)
|
protected override bool CanRewrite(Block block)
|
||||||
{
|
{
|
||||||
AttributeBlockCodeGenerator gen = block.CodeGenerator as AttributeBlockCodeGenerator;
|
var gen = block.CodeGenerator as AttributeBlockCodeGenerator;
|
||||||
return gen != null && block.Children.Any() && block.Children.All(IsLiteralAttributeValue);
|
return gen != null && block.Children.Any() && block.Children.All(IsLiteralAttributeValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override SyntaxTreeNode RewriteBlock(BlockBuilder parent, Block block)
|
protected override SyntaxTreeNode RewriteBlock(BlockBuilder parent, Block block)
|
||||||
{
|
{
|
||||||
// Collect the content of this node
|
// Collect the content of this node
|
||||||
string content = String.Concat(block.Children.Cast<Span>().Select(s => s.Content));
|
var content = String.Concat(block.Children.Cast<Span>().Select(s => s.Content));
|
||||||
|
|
||||||
// Create a new span containing this content
|
// Create a new span containing this content
|
||||||
SpanBuilder span = new SpanBuilder();
|
var span = new SpanBuilder();
|
||||||
span.EditHandler = new SpanEditHandler(HtmlTokenizer.Tokenize);
|
span.EditHandler = new SpanEditHandler(HtmlTokenizer.Tokenize);
|
||||||
FillSpan(span, block.Children.Cast<Span>().First().Start, content);
|
FillSpan(span, block.Children.Cast<Span>().First().Start, content);
|
||||||
return span.Build();
|
return span.Build();
|
||||||
|
|
@ -42,10 +42,10 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
Span span = node as Span;
|
var span = node as Span;
|
||||||
Debug.Assert(span != null);
|
Debug.Assert(span != null);
|
||||||
|
|
||||||
LiteralAttributeCodeGenerator litGen = span.CodeGenerator as LiteralAttributeCodeGenerator;
|
var litGen = span.CodeGenerator as LiteralAttributeCodeGenerator;
|
||||||
|
|
||||||
return span != null &&
|
return span != null &&
|
||||||
((litGen != null && litGen.ValueGenerator == null) ||
|
((litGen != null && litGen.ValueGenerator == null) ||
|
||||||
|
|
|
||||||
|
|
@ -104,7 +104,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
{
|
{
|
||||||
// Parse until a newline, it's that simple!
|
// Parse until a newline, it's that simple!
|
||||||
// First, signal to code parser that whitespace is significant to us.
|
// First, signal to code parser that whitespace is significant to us.
|
||||||
bool old = Context.WhiteSpaceIsSignificantToAncestorBlock;
|
var old = Context.WhiteSpaceIsSignificantToAncestorBlock;
|
||||||
Context.WhiteSpaceIsSignificantToAncestorBlock = true;
|
Context.WhiteSpaceIsSignificantToAncestorBlock = true;
|
||||||
Span.EditHandler = new SingleLineMarkupEditHandler(Language.TokenizeString);
|
Span.EditHandler = new SingleLineMarkupEditHandler(Language.TokenizeString);
|
||||||
SkipToAndParseCode(HtmlSymbolType.NewLine);
|
SkipToAndParseCode(HtmlSymbolType.NewLine);
|
||||||
|
|
@ -121,7 +121,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
private void TagBlock(Stack<Tuple<HtmlSymbol, SourceLocation>> tags)
|
private void TagBlock(Stack<Tuple<HtmlSymbol, SourceLocation>> tags)
|
||||||
{
|
{
|
||||||
// Skip Whitespace and Text
|
// Skip Whitespace and Text
|
||||||
bool complete = false;
|
var complete = false;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
SkipToAndParseCode(HtmlSymbolType.OpenAngle);
|
SkipToAndParseCode(HtmlSymbolType.OpenAngle);
|
||||||
|
|
@ -149,7 +149,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
_lastTagStart = CurrentLocation;
|
_lastTagStart = CurrentLocation;
|
||||||
Assert(HtmlSymbolType.OpenAngle);
|
Assert(HtmlSymbolType.OpenAngle);
|
||||||
_bufferedOpenAngle = CurrentSymbol;
|
_bufferedOpenAngle = CurrentSymbol;
|
||||||
SourceLocation tagStart = CurrentLocation;
|
var tagStart = CurrentLocation;
|
||||||
if (!NextToken())
|
if (!NextToken())
|
||||||
{
|
{
|
||||||
Accept(_bufferedOpenAngle);
|
Accept(_bufferedOpenAngle);
|
||||||
|
|
@ -275,7 +275,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
{
|
{
|
||||||
// Accept "/" and move next
|
// Accept "/" and move next
|
||||||
Assert(HtmlSymbolType.ForwardSlash);
|
Assert(HtmlSymbolType.ForwardSlash);
|
||||||
HtmlSymbol solidus = CurrentSymbol;
|
var solidus = CurrentSymbol;
|
||||||
if (!NextToken())
|
if (!NextToken())
|
||||||
{
|
{
|
||||||
Accept(_bufferedOpenAngle);
|
Accept(_bufferedOpenAngle);
|
||||||
|
|
@ -284,12 +284,12 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
string tagName = String.Empty;
|
var tagName = String.Empty;
|
||||||
if (At(HtmlSymbolType.Text))
|
if (At(HtmlSymbolType.Text))
|
||||||
{
|
{
|
||||||
tagName = CurrentSymbol.Content;
|
tagName = CurrentSymbol.Content;
|
||||||
}
|
}
|
||||||
bool matched = RemoveTag(tags, tagName, tagStart);
|
var matched = RemoveTag(tags, tagName, tagStart);
|
||||||
|
|
||||||
if (tags.Count == 0 &&
|
if (tags.Count == 0 &&
|
||||||
String.Equals(tagName, SyntaxConstants.TextTagName, StringComparison.OrdinalIgnoreCase) &&
|
String.Equals(tagName, SyntaxConstants.TextTagName, StringComparison.OrdinalIgnoreCase) &&
|
||||||
|
|
@ -318,7 +318,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
|
|
||||||
private bool EndTextTag(HtmlSymbol solidus, IDisposable tagBlockWrapper)
|
private bool EndTextTag(HtmlSymbol solidus, IDisposable tagBlockWrapper)
|
||||||
{
|
{
|
||||||
SourceLocation start = _bufferedOpenAngle.Start;
|
var start = _bufferedOpenAngle.Start;
|
||||||
|
|
||||||
Accept(_bufferedOpenAngle);
|
Accept(_bufferedOpenAngle);
|
||||||
Accept(solidus);
|
Accept(solidus);
|
||||||
|
|
@ -326,7 +326,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
Assert(HtmlSymbolType.Text);
|
Assert(HtmlSymbolType.Text);
|
||||||
AcceptAndMoveNext();
|
AcceptAndMoveNext();
|
||||||
|
|
||||||
bool seenCloseAngle = Optional(HtmlSymbolType.CloseAngle);
|
var seenCloseAngle = Optional(HtmlSymbolType.CloseAngle);
|
||||||
|
|
||||||
if (!seenCloseAngle)
|
if (!seenCloseAngle)
|
||||||
{
|
{
|
||||||
|
|
@ -456,14 +456,14 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
{
|
{
|
||||||
// First, determine if this is a 'data-' attribute (since those can't use conditional attributes)
|
// First, determine if this is a 'data-' attribute (since those can't use conditional attributes)
|
||||||
LocationTagged<string> name = nameSymbols.GetContent(Span.Start);
|
LocationTagged<string> name = nameSymbols.GetContent(Span.Start);
|
||||||
bool attributeCanBeConditional = !name.Value.StartsWith("data-", StringComparison.OrdinalIgnoreCase);
|
var attributeCanBeConditional = !name.Value.StartsWith("data-", StringComparison.OrdinalIgnoreCase);
|
||||||
|
|
||||||
// Accept the whitespace and name
|
// Accept the whitespace and name
|
||||||
Accept(whitespace);
|
Accept(whitespace);
|
||||||
Accept(nameSymbols);
|
Accept(nameSymbols);
|
||||||
Assert(HtmlSymbolType.Equals); // We should be at "="
|
Assert(HtmlSymbolType.Equals); // We should be at "="
|
||||||
AcceptAndMoveNext();
|
AcceptAndMoveNext();
|
||||||
HtmlSymbolType quote = HtmlSymbolType.Unknown;
|
var quote = HtmlSymbolType.Unknown;
|
||||||
if (At(HtmlSymbolType.SingleQuote) || At(HtmlSymbolType.DoubleQuote))
|
if (At(HtmlSymbolType.SingleQuote) || At(HtmlSymbolType.DoubleQuote))
|
||||||
{
|
{
|
||||||
quote = CurrentSymbol.Type;
|
quote = CurrentSymbol.Type;
|
||||||
|
|
@ -516,13 +516,13 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
|
|
||||||
private void AttributeValue(HtmlSymbolType quote)
|
private void AttributeValue(HtmlSymbolType quote)
|
||||||
{
|
{
|
||||||
SourceLocation prefixStart = CurrentLocation;
|
var prefixStart = CurrentLocation;
|
||||||
var prefix = ReadWhile(sym => sym.Type == HtmlSymbolType.WhiteSpace || sym.Type == HtmlSymbolType.NewLine);
|
var prefix = ReadWhile(sym => sym.Type == HtmlSymbolType.WhiteSpace || sym.Type == HtmlSymbolType.NewLine);
|
||||||
Accept(prefix);
|
Accept(prefix);
|
||||||
|
|
||||||
if (At(HtmlSymbolType.Transition))
|
if (At(HtmlSymbolType.Transition))
|
||||||
{
|
{
|
||||||
SourceLocation valueStart = CurrentLocation;
|
var valueStart = CurrentLocation;
|
||||||
PutCurrentBack();
|
PutCurrentBack();
|
||||||
|
|
||||||
// Output the prefix but as a null-span. DynamicAttributeBlockCodeGenerator will render it
|
// Output the prefix but as a null-span. DynamicAttributeBlockCodeGenerator will render it
|
||||||
|
|
@ -543,7 +543,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
NextIs(HtmlSymbolType.ForwardSlash))
|
NextIs(HtmlSymbolType.ForwardSlash))
|
||||||
{
|
{
|
||||||
// Virtual Path value
|
// Virtual Path value
|
||||||
SourceLocation valueStart = CurrentLocation;
|
var valueStart = CurrentLocation;
|
||||||
VirtualPath();
|
VirtualPath();
|
||||||
Span.CodeGenerator = new LiteralAttributeCodeGenerator(
|
Span.CodeGenerator = new LiteralAttributeCodeGenerator(
|
||||||
prefix.GetContent(prefixStart),
|
prefix.GetContent(prefixStart),
|
||||||
|
|
@ -634,7 +634,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
|
|
||||||
private void ParseQuoted()
|
private void ParseQuoted()
|
||||||
{
|
{
|
||||||
HtmlSymbolType type = CurrentSymbol.Type;
|
var type = CurrentSymbol.Type;
|
||||||
AcceptAndMoveNext();
|
AcceptAndMoveNext();
|
||||||
ParseQuoted(type);
|
ParseQuoted(type);
|
||||||
}
|
}
|
||||||
|
|
@ -674,9 +674,9 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
|
|
||||||
AcceptAndMoveNext();
|
AcceptAndMoveNext();
|
||||||
|
|
||||||
int bookmark = CurrentLocation.AbsoluteIndex;
|
var bookmark = CurrentLocation.AbsoluteIndex;
|
||||||
IEnumerable<HtmlSymbol> tokens = ReadWhile(IsSpacingToken(includeNewLines: true));
|
IEnumerable<HtmlSymbol> tokens = ReadWhile(IsSpacingToken(includeNewLines: true));
|
||||||
bool empty = At(HtmlSymbolType.ForwardSlash);
|
var empty = At(HtmlSymbolType.ForwardSlash);
|
||||||
if (empty)
|
if (empty)
|
||||||
{
|
{
|
||||||
Accept(tokens);
|
Accept(tokens);
|
||||||
|
|
@ -727,7 +727,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isEmpty = At(HtmlSymbolType.ForwardSlash);
|
var isEmpty = At(HtmlSymbolType.ForwardSlash);
|
||||||
// Found a solidus, so don't accept it but DON'T push the tag to the stack
|
// Found a solidus, so don't accept it but DON'T push the tag to the stack
|
||||||
if (isEmpty)
|
if (isEmpty)
|
||||||
{
|
{
|
||||||
|
|
@ -735,7 +735,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check for the '>' to determine if the tag is finished
|
// Check for the '>' to determine if the tag is finished
|
||||||
bool seenClose = Optional(HtmlSymbolType.CloseAngle);
|
var seenClose = Optional(HtmlSymbolType.CloseAngle);
|
||||||
if (!seenClose)
|
if (!seenClose)
|
||||||
{
|
{
|
||||||
Context.OnError(tag.Item2, RazorResources.FormatParseError_UnfinishedTag(tag.Item1.Content));
|
Context.OnError(tag.Item2, RazorResources.FormatParseError_UnfinishedTag(tag.Item1.Content));
|
||||||
|
|
@ -745,7 +745,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
if (!isEmpty)
|
if (!isEmpty)
|
||||||
{
|
{
|
||||||
// Is this a void element?
|
// Is this a void element?
|
||||||
string tagName = tag.Item1.Content.Trim();
|
var tagName = tag.Item1.Content.Trim();
|
||||||
if (VoidElements.Contains(tagName))
|
if (VoidElements.Contains(tagName))
|
||||||
{
|
{
|
||||||
CompleteTagBlockWithSpan(tagBlockWrapper, AcceptedCharacters.None, SpanKind.Markup);
|
CompleteTagBlockWithSpan(tagBlockWrapper, AcceptedCharacters.None, SpanKind.Markup);
|
||||||
|
|
@ -753,7 +753,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
// Technically, void elements like "meta" are not allowed to have end tags. Just in case they do,
|
// Technically, void elements like "meta" are not allowed to have end tags. Just in case they do,
|
||||||
// we need to look ahead at the next set of tokens. If we see "<", "/", tag name, accept it and the ">" following it
|
// we need to look ahead at the next set of tokens. If we see "<", "/", tag name, accept it and the ">" following it
|
||||||
// Place a bookmark
|
// Place a bookmark
|
||||||
int bookmark = CurrentLocation.AbsoluteIndex;
|
var bookmark = CurrentLocation.AbsoluteIndex;
|
||||||
|
|
||||||
// Skip whitespace
|
// Skip whitespace
|
||||||
IEnumerable<HtmlSymbol> whiteSpace = ReadWhile(IsSpacingToken(includeNewLines: true));
|
IEnumerable<HtmlSymbol> whiteSpace = ReadWhile(IsSpacingToken(includeNewLines: true));
|
||||||
|
|
@ -761,10 +761,10 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
// Open Angle
|
// Open Angle
|
||||||
if (At(HtmlSymbolType.OpenAngle) && NextIs(HtmlSymbolType.ForwardSlash))
|
if (At(HtmlSymbolType.OpenAngle) && NextIs(HtmlSymbolType.ForwardSlash))
|
||||||
{
|
{
|
||||||
HtmlSymbol openAngle = CurrentSymbol;
|
var openAngle = CurrentSymbol;
|
||||||
NextToken();
|
NextToken();
|
||||||
Assert(HtmlSymbolType.ForwardSlash);
|
Assert(HtmlSymbolType.ForwardSlash);
|
||||||
HtmlSymbol solidus = CurrentSymbol;
|
var solidus = CurrentSymbol;
|
||||||
NextToken();
|
NextToken();
|
||||||
if (At(HtmlSymbolType.Text) && string.Equals(CurrentSymbol.Content, tagName, StringComparison.OrdinalIgnoreCase))
|
if (At(HtmlSymbolType.Text) && string.Equals(CurrentSymbol.Content, tagName, StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
|
|
@ -819,12 +819,12 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
private void SkipToEndScriptAndParseCode(AcceptedCharacters endTagAcceptedCharacters = AcceptedCharacters.Any)
|
private void SkipToEndScriptAndParseCode(AcceptedCharacters endTagAcceptedCharacters = AcceptedCharacters.Any)
|
||||||
{
|
{
|
||||||
// Special case for <script>: Skip to end of script tag and parse code
|
// Special case for <script>: Skip to end of script tag and parse code
|
||||||
bool seenEndScript = false;
|
var seenEndScript = false;
|
||||||
|
|
||||||
while (!seenEndScript && !EndOfFile)
|
while (!seenEndScript && !EndOfFile)
|
||||||
{
|
{
|
||||||
SkipToAndParseCode(HtmlSymbolType.OpenAngle);
|
SkipToAndParseCode(HtmlSymbolType.OpenAngle);
|
||||||
SourceLocation tagStart = CurrentLocation;
|
var tagStart = CurrentLocation;
|
||||||
|
|
||||||
if (NextIs(HtmlSymbolType.ForwardSlash))
|
if (NextIs(HtmlSymbolType.ForwardSlash))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
|
|
||||||
private void NestingSection(Tuple<string, string> nestingSequences)
|
private void NestingSection(Tuple<string, string> nestingSequences)
|
||||||
{
|
{
|
||||||
int nesting = 1;
|
var nesting = 1;
|
||||||
while (nesting > 0 && !EndOfFile)
|
while (nesting > 0 && !EndOfFile)
|
||||||
{
|
{
|
||||||
SkipToAndParseCode(sym =>
|
SkipToAndParseCode(sym =>
|
||||||
|
|
@ -92,7 +92,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
EnsureCurrent();
|
EnsureCurrent();
|
||||||
if (String.Equals(CurrentSymbol.Content, nestingSequenceComponents[0], Comparison))
|
if (String.Equals(CurrentSymbol.Content, nestingSequenceComponents[0], Comparison))
|
||||||
{
|
{
|
||||||
int bookmark = CurrentSymbol.Start.AbsoluteIndex;
|
var bookmark = CurrentSymbol.Start.AbsoluteIndex;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
foreach (string component in nestingSequenceComponents)
|
foreach (string component in nestingSequenceComponents)
|
||||||
|
|
@ -122,7 +122,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
{
|
{
|
||||||
for (int i = 0; i < CurrentSymbol.Content.Length; i++)
|
for (int i = 0; i < CurrentSymbol.Content.Length; i++)
|
||||||
{
|
{
|
||||||
int nestingDelta = HandleNestingSequence(nestingSequences.Item1, i, currentNesting, 1);
|
var nestingDelta = HandleNestingSequence(nestingSequences.Item1, i, currentNesting, 1);
|
||||||
if (nestingDelta == 0)
|
if (nestingDelta == 0)
|
||||||
{
|
{
|
||||||
nestingDelta = HandleNestingSequence(nestingSequences.Item2, i, currentNesting, -1);
|
nestingDelta = HandleNestingSequence(nestingSequences.Item2, i, currentNesting, -1);
|
||||||
|
|
@ -142,21 +142,21 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
CurrentSymbol.Content[position] == sequence[0] &&
|
CurrentSymbol.Content[position] == sequence[0] &&
|
||||||
position + sequence.Length <= CurrentSymbol.Content.Length)
|
position + sequence.Length <= CurrentSymbol.Content.Length)
|
||||||
{
|
{
|
||||||
string possibleStart = CurrentSymbol.Content.Substring(position, sequence.Length);
|
var possibleStart = CurrentSymbol.Content.Substring(position, sequence.Length);
|
||||||
if (String.Equals(possibleStart, sequence, Comparison))
|
if (String.Equals(possibleStart, sequence, Comparison))
|
||||||
{
|
{
|
||||||
// Capture the current symbol and "put it back" (really we just want to clear CurrentSymbol)
|
// Capture the current symbol and "put it back" (really we just want to clear CurrentSymbol)
|
||||||
int bookmark = Context.Source.Position;
|
var bookmark = Context.Source.Position;
|
||||||
HtmlSymbol sym = CurrentSymbol;
|
var sym = CurrentSymbol;
|
||||||
PutCurrentBack();
|
PutCurrentBack();
|
||||||
|
|
||||||
// Carve up the symbol
|
// Carve up the symbol
|
||||||
Tuple<HtmlSymbol, HtmlSymbol> pair = Language.SplitSymbol(sym, position, HtmlSymbolType.Text);
|
Tuple<HtmlSymbol, HtmlSymbol> pair = Language.SplitSymbol(sym, position, HtmlSymbolType.Text);
|
||||||
HtmlSymbol preSequence = pair.Item1;
|
var preSequence = pair.Item1;
|
||||||
Debug.Assert(pair.Item2 != null);
|
Debug.Assert(pair.Item2 != null);
|
||||||
pair = Language.SplitSymbol(pair.Item2, sequence.Length, HtmlSymbolType.Text);
|
pair = Language.SplitSymbol(pair.Item2, sequence.Length, HtmlSymbolType.Text);
|
||||||
HtmlSymbol sequenceToken = pair.Item1;
|
var sequenceToken = pair.Item1;
|
||||||
HtmlSymbol postSequence = pair.Item2;
|
var postSequence = pair.Item2;
|
||||||
|
|
||||||
// Accept the first chunk (up to the nesting sequence we just saw)
|
// Accept the first chunk (up to the nesting sequence we just saw)
|
||||||
if (!String.IsNullOrEmpty(preSequence.Content))
|
if (!String.IsNullOrEmpty(preSequence.Content))
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
protected void SkipToAndParseCode(Func<HtmlSymbol, bool> condition)
|
protected void SkipToAndParseCode(Func<HtmlSymbol, bool> condition)
|
||||||
{
|
{
|
||||||
HtmlSymbol last = null;
|
HtmlSymbol last = null;
|
||||||
bool startOfLine = false;
|
var startOfLine = false;
|
||||||
while (!EndOfFile && !condition(CurrentSymbol))
|
while (!EndOfFile && !condition(CurrentSymbol))
|
||||||
{
|
{
|
||||||
if (At(HtmlSymbolType.NewLine))
|
if (At(HtmlSymbolType.NewLine))
|
||||||
|
|
@ -86,7 +86,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
}
|
}
|
||||||
else if (At(HtmlSymbolType.Transition))
|
else if (At(HtmlSymbolType.Transition))
|
||||||
{
|
{
|
||||||
HtmlSymbol transition = CurrentSymbol;
|
var transition = CurrentSymbol;
|
||||||
NextToken();
|
NextToken();
|
||||||
if (At(HtmlSymbolType.Transition))
|
if (At(HtmlSymbolType.Transition))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
{
|
{
|
||||||
using (SeekableTextReader reader = new SeekableTextReader(input))
|
using (SeekableTextReader reader = new SeekableTextReader(input))
|
||||||
{
|
{
|
||||||
TTokenizer tok = CreateTokenizer(reader);
|
var tok = CreateTokenizer(reader);
|
||||||
TSymbol sym;
|
TSymbol sym;
|
||||||
while ((sym = tok.NextSymbol()) != null)
|
while ((sym = tok.NextSymbol()) != null)
|
||||||
{
|
{
|
||||||
|
|
@ -93,7 +93,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
|
|
||||||
public virtual Tuple<TSymbol, TSymbol> SplitSymbol(TSymbol symbol, int splitAt, TSymbolType leftType)
|
public virtual Tuple<TSymbol, TSymbol> SplitSymbol(TSymbol symbol, int splitAt, TSymbolType leftType)
|
||||||
{
|
{
|
||||||
TSymbol left = CreateSymbol(symbol.Start, symbol.Content.Substring(0, splitAt), leftType, Enumerable.Empty<RazorError>());
|
var left = CreateSymbol(symbol.Start, symbol.Content.Substring(0, splitAt), leftType, Enumerable.Empty<RazorError>());
|
||||||
TSymbol right = null;
|
TSymbol right = null;
|
||||||
if (splitAt < symbol.Content.Length)
|
if (splitAt < symbol.Content.Length)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
protected override SyntaxTreeNode RewriteSpan(BlockBuilder parent, Span span)
|
protected override SyntaxTreeNode RewriteSpan(BlockBuilder parent, Span span)
|
||||||
{
|
{
|
||||||
// Only rewrite if we have a previous that is also markup (CanRewrite does this check for us!)
|
// Only rewrite if we have a previous that is also markup (CanRewrite does this check for us!)
|
||||||
Span previous = parent.Children.LastOrDefault() as Span;
|
var previous = parent.Children.LastOrDefault() as Span;
|
||||||
if (previous == null || !CanRewrite(previous))
|
if (previous == null || !CanRewrite(previous))
|
||||||
{
|
{
|
||||||
return span;
|
return span;
|
||||||
|
|
@ -31,7 +31,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
|
|
||||||
// Merge spans
|
// Merge spans
|
||||||
parent.Children.Remove(previous);
|
parent.Children.Remove(previous);
|
||||||
SpanBuilder merged = new SpanBuilder();
|
var merged = new SpanBuilder();
|
||||||
FillSpan(merged, previous.Start, previous.Content + span.Content);
|
FillSpan(merged, previous.Start, previous.Content + span.Content);
|
||||||
return merged.Build();
|
return merged.Build();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
{
|
{
|
||||||
if (CanRewrite(block))
|
if (CanRewrite(block))
|
||||||
{
|
{
|
||||||
SyntaxTreeNode newNode = RewriteBlock(_blocks.Peek(), block);
|
var newNode = RewriteBlock(_blocks.Peek(), block);
|
||||||
if (newNode != null)
|
if (newNode != null)
|
||||||
{
|
{
|
||||||
_blocks.Peek().Children.Add(newNode);
|
_blocks.Peek().Children.Add(newNode);
|
||||||
|
|
@ -48,7 +48,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Not rewritable.
|
// Not rewritable.
|
||||||
BlockBuilder builder = new BlockBuilder(block);
|
var builder = new BlockBuilder(block);
|
||||||
builder.Children.Clear();
|
builder.Children.Clear();
|
||||||
_blocks.Push(builder);
|
_blocks.Push(builder);
|
||||||
base.VisitBlock(block);
|
base.VisitBlock(block);
|
||||||
|
|
@ -66,7 +66,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
{
|
{
|
||||||
if (CanRewrite(span))
|
if (CanRewrite(span))
|
||||||
{
|
{
|
||||||
SyntaxTreeNode newNode = RewriteSpan(_blocks.Peek(), span);
|
var newNode = RewriteSpan(_blocks.Peek(), span);
|
||||||
if (newNode != null)
|
if (newNode != null)
|
||||||
{
|
{
|
||||||
_blocks.Peek().Children.Add(newNode);
|
_blocks.Peek().Children.Add(newNode);
|
||||||
|
|
|
||||||
|
|
@ -100,7 +100,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
return '\0';
|
return '\0';
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
int ch = Source.Peek();
|
var ch = Source.Peek();
|
||||||
if (ch == -1)
|
if (ch == -1)
|
||||||
{
|
{
|
||||||
return '\0';
|
return '\0';
|
||||||
|
|
@ -162,7 +162,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
}
|
}
|
||||||
if (_blockStack.Count > 1)
|
if (_blockStack.Count > 1)
|
||||||
{
|
{
|
||||||
BlockBuilder block = _blockStack.Pop();
|
var block = _blockStack.Pop();
|
||||||
_blockStack.Peek().Children.Add(block.Build());
|
_blockStack.Peek().Children.Add(block.Build());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -269,7 +269,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
string remaining = Source.ReadToEnd();
|
var remaining = Source.ReadToEnd();
|
||||||
Source.Position -= remaining.Length;
|
Source.Position -= remaining.Length;
|
||||||
return remaining;
|
return remaining;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -99,7 +99,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
|
|
||||||
public static bool IsLetter(char value)
|
public static bool IsLetter(char value)
|
||||||
{
|
{
|
||||||
UnicodeCategory cat = CharUnicodeInfo.GetUnicodeCategory(value);
|
var cat = CharUnicodeInfo.GetUnicodeCategory(value);
|
||||||
|
|
||||||
return cat == UnicodeCategory.UppercaseLetter
|
return cat == UnicodeCategory.UppercaseLetter
|
||||||
|| cat == UnicodeCategory.LowercaseLetter
|
|| cat == UnicodeCategory.LowercaseLetter
|
||||||
|
|
|
||||||
|
|
@ -92,7 +92,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
[Obsolete("Lookahead-based readers have been deprecated, use overrides which accept a TextReader or ITextDocument instead")]
|
[Obsolete("Lookahead-based readers have been deprecated, use overrides which accept a TextReader or ITextDocument instead")]
|
||||||
public virtual void Parse(LookaheadTextReader input, ParserVisitor visitor)
|
public virtual void Parse(LookaheadTextReader input, ParserVisitor visitor)
|
||||||
{
|
{
|
||||||
ParserResults results = ParseCore(new SeekableTextReader(input));
|
var results = ParseCore(new SeekableTextReader(input));
|
||||||
|
|
||||||
// Replay the results on the visitor
|
// Replay the results on the visitor
|
||||||
visitor.Visit(results);
|
visitor.Visit(results);
|
||||||
|
|
@ -149,7 +149,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
private ParserResults ParseCore(ITextDocument input)
|
private ParserResults ParseCore(ITextDocument input)
|
||||||
{
|
{
|
||||||
// Setup the parser context
|
// Setup the parser context
|
||||||
ParserContext context = new ParserContext(input, CodeParser, MarkupParser, MarkupParser)
|
var context = new ParserContext(input, CodeParser, MarkupParser, MarkupParser)
|
||||||
{
|
{
|
||||||
DesignTimeMode = DesignTimeMode
|
DesignTimeMode = DesignTimeMode
|
||||||
};
|
};
|
||||||
|
|
@ -161,7 +161,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
MarkupParser.ParseDocument();
|
MarkupParser.ParseDocument();
|
||||||
|
|
||||||
// Get the result
|
// Get the result
|
||||||
ParserResults results = context.CompleteParse();
|
var results = context.CompleteParse();
|
||||||
|
|
||||||
// Rewrite whitespace if supported
|
// Rewrite whitespace if supported
|
||||||
var rewritingContext = new RewritingContext(results.Document);
|
var rewritingContext = new RewritingContext(results.Document);
|
||||||
|
|
|
||||||
|
|
@ -109,7 +109,7 @@ namespace Microsoft.AspNet.Razor.Parser.SyntaxTree
|
||||||
|
|
||||||
public override bool Equals(object obj)
|
public override bool Equals(object obj)
|
||||||
{
|
{
|
||||||
Block other = obj as Block;
|
var other = obj as Block;
|
||||||
return other != null &&
|
return other != null &&
|
||||||
Type == other.Type &&
|
Type == other.Type &&
|
||||||
Equals(CodeGenerator, other.CodeGenerator) &&
|
Equals(CodeGenerator, other.CodeGenerator) &&
|
||||||
|
|
@ -126,14 +126,14 @@ namespace Microsoft.AspNet.Razor.Parser.SyntaxTree
|
||||||
// Create an enumerable that flattens the tree for use by syntax highlighters, etc.
|
// Create an enumerable that flattens the tree for use by syntax highlighters, etc.
|
||||||
foreach (SyntaxTreeNode element in Children)
|
foreach (SyntaxTreeNode element in Children)
|
||||||
{
|
{
|
||||||
Span span = element as Span;
|
var span = element as Span;
|
||||||
if (span != null)
|
if (span != null)
|
||||||
{
|
{
|
||||||
yield return span;
|
yield return span;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Block block = element as Block;
|
var block = element as Block;
|
||||||
foreach (Span childSpan in block.Flatten())
|
foreach (Span childSpan in block.Flatten())
|
||||||
{
|
{
|
||||||
yield return childSpan;
|
yield return childSpan;
|
||||||
|
|
@ -148,7 +148,7 @@ namespace Microsoft.AspNet.Razor.Parser.SyntaxTree
|
||||||
Span owner = null;
|
Span owner = null;
|
||||||
foreach (SyntaxTreeNode element in Children)
|
foreach (SyntaxTreeNode element in Children)
|
||||||
{
|
{
|
||||||
Span span = element as Span;
|
var span = element as Span;
|
||||||
if (span == null)
|
if (span == null)
|
||||||
{
|
{
|
||||||
owner = ((Block)element).LocateOwner(change);
|
owner = ((Block)element).LocateOwner(change);
|
||||||
|
|
@ -196,7 +196,7 @@ namespace Microsoft.AspNet.Razor.Parser.SyntaxTree
|
||||||
|
|
||||||
public override bool EquivalentTo(SyntaxTreeNode node)
|
public override bool EquivalentTo(SyntaxTreeNode node)
|
||||||
{
|
{
|
||||||
Block other = node as Block;
|
var other = node as Block;
|
||||||
if (other == null || other.Type != Type)
|
if (other == null || other.Type != Type)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ namespace Microsoft.AspNet.Razor.Parser.SyntaxTree
|
||||||
|
|
||||||
public override bool Equals(object obj)
|
public override bool Equals(object obj)
|
||||||
{
|
{
|
||||||
RazorError err = obj as RazorError;
|
var err = obj as RazorError;
|
||||||
return (err != null) && (Equals(err));
|
return (err != null) && (Equals(err));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ namespace Microsoft.AspNet.Razor.Parser.SyntaxTree
|
||||||
|
|
||||||
public void Change(Action<SpanBuilder> changes)
|
public void Change(Action<SpanBuilder> changes)
|
||||||
{
|
{
|
||||||
SpanBuilder builder = new SpanBuilder(this);
|
var builder = new SpanBuilder(this);
|
||||||
changes(builder);
|
changes(builder);
|
||||||
ReplaceWith(builder);
|
ReplaceWith(builder);
|
||||||
}
|
}
|
||||||
|
|
@ -87,7 +87,7 @@ namespace Microsoft.AspNet.Razor.Parser.SyntaxTree
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
StringBuilder builder = new StringBuilder();
|
var builder = new StringBuilder();
|
||||||
builder.Append(Kind);
|
builder.Append(Kind);
|
||||||
builder.AppendFormat(" Span at {0}::{1} - [{2}]", Start, Length, Content);
|
builder.AppendFormat(" Span at {0}::{1} - [{2}]", Start, Length, Content);
|
||||||
builder.Append(" Edit: <");
|
builder.Append(" Edit: <");
|
||||||
|
|
@ -104,8 +104,8 @@ namespace Microsoft.AspNet.Razor.Parser.SyntaxTree
|
||||||
public void ChangeStart(SourceLocation newStart)
|
public void ChangeStart(SourceLocation newStart)
|
||||||
{
|
{
|
||||||
_start = newStart;
|
_start = newStart;
|
||||||
Span current = this;
|
var current = this;
|
||||||
SourceLocationTracker tracker = new SourceLocationTracker(newStart);
|
var tracker = new SourceLocationTracker(newStart);
|
||||||
tracker.UpdateLocation(Content);
|
tracker.UpdateLocation(Content);
|
||||||
while ((current = current.Next) != null)
|
while ((current = current.Next) != null)
|
||||||
{
|
{
|
||||||
|
|
@ -124,7 +124,7 @@ namespace Microsoft.AspNet.Razor.Parser.SyntaxTree
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public override bool EquivalentTo(SyntaxTreeNode node)
|
public override bool EquivalentTo(SyntaxTreeNode node)
|
||||||
{
|
{
|
||||||
Span other = node as Span;
|
var other = node as Span;
|
||||||
return other != null &&
|
return other != null &&
|
||||||
Kind.Equals(other.Kind) &&
|
Kind.Equals(other.Kind) &&
|
||||||
Start.Equals(other.Start) &&
|
Start.Equals(other.Start) &&
|
||||||
|
|
@ -134,7 +134,7 @@ namespace Microsoft.AspNet.Razor.Parser.SyntaxTree
|
||||||
|
|
||||||
public override bool Equals(object obj)
|
public override bool Equals(object obj)
|
||||||
{
|
{
|
||||||
Span other = obj as Span;
|
var other = obj as Span;
|
||||||
return other != null &&
|
return other != null &&
|
||||||
Kind.Equals(other.Kind) &&
|
Kind.Equals(other.Kind) &&
|
||||||
EditHandler.Equals(other.EditHandler) &&
|
EditHandler.Equals(other.EditHandler) &&
|
||||||
|
|
|
||||||
|
|
@ -62,8 +62,8 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
throw new ArgumentNullException("condition");
|
throw new ArgumentNullException("condition");
|
||||||
}
|
}
|
||||||
|
|
||||||
StringBuilder builder = new StringBuilder();
|
var builder = new StringBuilder();
|
||||||
int ch = -1;
|
var ch = -1;
|
||||||
while ((ch = reader.Peek()) != -1 && !condition((char)ch))
|
while ((ch = reader.Peek()) != -1 && !condition((char)ch))
|
||||||
{
|
{
|
||||||
reader.Read(); // Advance the reader
|
reader.Read(); // Advance the reader
|
||||||
|
|
|
||||||
|
|
@ -66,9 +66,9 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
|
|
||||||
protected internal bool Balance(BalancingModes mode)
|
protected internal bool Balance(BalancingModes mode)
|
||||||
{
|
{
|
||||||
TSymbolType left = CurrentSymbol.Type;
|
var left = CurrentSymbol.Type;
|
||||||
TSymbolType right = Language.FlipBracket(left);
|
var right = Language.FlipBracket(left);
|
||||||
SourceLocation start = CurrentLocation;
|
var start = CurrentLocation;
|
||||||
AcceptAndMoveNext();
|
AcceptAndMoveNext();
|
||||||
if (EndOfFile && ((mode & BalancingModes.NoErrorOnFailure) != BalancingModes.NoErrorOnFailure))
|
if (EndOfFile && ((mode & BalancingModes.NoErrorOnFailure) != BalancingModes.NoErrorOnFailure))
|
||||||
{
|
{
|
||||||
|
|
@ -83,8 +83,8 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
|
|
||||||
protected internal bool Balance(BalancingModes mode, TSymbolType left, TSymbolType right, SourceLocation start)
|
protected internal bool Balance(BalancingModes mode, TSymbolType left, TSymbolType right, SourceLocation start)
|
||||||
{
|
{
|
||||||
int startPosition = CurrentLocation.AbsoluteIndex;
|
var startPosition = CurrentLocation.AbsoluteIndex;
|
||||||
int nesting = 1;
|
var nesting = 1;
|
||||||
if (!EndOfFile)
|
if (!EndOfFile)
|
||||||
{
|
{
|
||||||
IList<TSymbol> syms = new List<TSymbol>();
|
IList<TSymbol> syms = new List<TSymbol>();
|
||||||
|
|
@ -156,9 +156,9 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
|
|
||||||
protected internal bool NextIs(Func<TSymbol, bool> condition)
|
protected internal bool NextIs(Func<TSymbol, bool> condition)
|
||||||
{
|
{
|
||||||
TSymbol cur = CurrentSymbol;
|
var cur = CurrentSymbol;
|
||||||
NextToken();
|
NextToken();
|
||||||
bool result = condition(CurrentSymbol);
|
var result = condition(CurrentSymbol);
|
||||||
PutCurrentBack();
|
PutCurrentBack();
|
||||||
PutBack(cur);
|
PutBack(cur);
|
||||||
EnsureCurrent();
|
EnsureCurrent();
|
||||||
|
|
@ -335,7 +335,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
|
|
||||||
protected internal bool Required(TSymbolType expected, bool errorIfNotFound, Func<string, string> errorBase)
|
protected internal bool Required(TSymbolType expected, bool errorIfNotFound, Func<string, string> errorBase)
|
||||||
{
|
{
|
||||||
bool found = At(expected);
|
var found = At(expected);
|
||||||
if (!found && errorIfNotFound)
|
if (!found && errorIfNotFound)
|
||||||
{
|
{
|
||||||
string error;
|
string error;
|
||||||
|
|
@ -506,7 +506,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
using (Context.StartBlock(BlockType.Comment))
|
using (Context.StartBlock(BlockType.Comment))
|
||||||
{
|
{
|
||||||
Context.CurrentBlock.CodeGenerator = new RazorCommentCodeGenerator();
|
Context.CurrentBlock.CodeGenerator = new RazorCommentCodeGenerator();
|
||||||
SourceLocation start = CurrentLocation;
|
var start = CurrentLocation;
|
||||||
|
|
||||||
Expected(KnownSymbolType.CommentStart);
|
Expected(KnownSymbolType.CommentStart);
|
||||||
Output(SpanKind.Transition, AcceptedCharacters.None);
|
Output(SpanKind.Transition, AcceptedCharacters.None);
|
||||||
|
|
@ -518,7 +518,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
AddMarkerSymbolIfNecessary();
|
AddMarkerSymbolIfNecessary();
|
||||||
Output(SpanKind.Comment);
|
Output(SpanKind.Comment);
|
||||||
|
|
||||||
bool errorReported = false;
|
var errorReported = false;
|
||||||
if (!Optional(KnownSymbolType.CommentStar))
|
if (!Optional(KnownSymbolType.CommentStar))
|
||||||
{
|
{
|
||||||
errorReported = true;
|
errorReported = true;
|
||||||
|
|
|
||||||
|
|
@ -52,14 +52,14 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
|
|
||||||
protected override SyntaxTreeNode RewriteBlock(BlockBuilder parent, Block block)
|
protected override SyntaxTreeNode RewriteBlock(BlockBuilder parent, Block block)
|
||||||
{
|
{
|
||||||
BlockBuilder newBlock = new BlockBuilder(block);
|
var newBlock = new BlockBuilder(block);
|
||||||
newBlock.Children.Clear();
|
newBlock.Children.Clear();
|
||||||
Span ws = block.Children.FirstOrDefault() as Span;
|
var ws = block.Children.FirstOrDefault() as Span;
|
||||||
IEnumerable<SyntaxTreeNode> newNodes = block.Children;
|
IEnumerable<SyntaxTreeNode> newNodes = block.Children;
|
||||||
if (ws.Content.All(Char.IsWhiteSpace))
|
if (ws.Content.All(Char.IsWhiteSpace))
|
||||||
{
|
{
|
||||||
// Add this node to the parent
|
// Add this node to the parent
|
||||||
SpanBuilder builder = new SpanBuilder(ws);
|
var builder = new SpanBuilder(ws);
|
||||||
builder.ClearSymbols();
|
builder.ClearSymbols();
|
||||||
FillSpan(builder, ws.Start, ws.Content);
|
FillSpan(builder, ws.Start, ws.Content);
|
||||||
parent.Children.Add(builder.Build());
|
parent.Children.Add(builder.Build());
|
||||||
|
|
|
||||||
|
|
@ -48,8 +48,8 @@ namespace Microsoft.AspNet.Razor
|
||||||
|
|
||||||
RunTask(() =>
|
RunTask(() =>
|
||||||
{
|
{
|
||||||
string outputFileName = Normalize(sourceFile) + "_tree";
|
var outputFileName = Normalize(sourceFile) + "_tree";
|
||||||
string outputPath = Path.Combine(Path.GetDirectoryName(sourceFile), outputFileName);
|
var outputPath = Path.Combine(Path.GetDirectoryName(sourceFile), outputFileName);
|
||||||
|
|
||||||
var treeBuilder = new StringBuilder();
|
var treeBuilder = new StringBuilder();
|
||||||
WriteTree(document, treeBuilder);
|
WriteTree(document, treeBuilder);
|
||||||
|
|
@ -140,7 +140,7 @@ namespace Microsoft.AspNet.Razor
|
||||||
|
|
||||||
private static string ConvertEscapseSequences(string value)
|
private static string ConvertEscapseSequences(string value)
|
||||||
{
|
{
|
||||||
StringBuilder sb = new StringBuilder();
|
var sb = new StringBuilder();
|
||||||
foreach (var ch in value)
|
foreach (var ch in value)
|
||||||
{
|
{
|
||||||
sb.Append(GetCharValue(ch));
|
sb.Append(GetCharValue(ch));
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ namespace Microsoft.AspNet.Razor
|
||||||
|
|
||||||
public override bool Equals(object obj)
|
public override bool Equals(object obj)
|
||||||
{
|
{
|
||||||
RazorDirectiveAttribute attribute = obj as RazorDirectiveAttribute;
|
var attribute = obj as RazorDirectiveAttribute;
|
||||||
return attribute != null &&
|
return attribute != null &&
|
||||||
Name.Equals(attribute.Name, StringComparison.OrdinalIgnoreCase) &&
|
Name.Equals(attribute.Name, StringComparison.OrdinalIgnoreCase) &&
|
||||||
StringComparer.OrdinalIgnoreCase.Equals(Value, attribute.Value);
|
StringComparer.OrdinalIgnoreCase.Equals(Value, attribute.Value);
|
||||||
|
|
|
||||||
|
|
@ -104,7 +104,7 @@ namespace Microsoft.AspNet.Razor
|
||||||
{
|
{
|
||||||
if (_lastAutoCompleteSpan != null)
|
if (_lastAutoCompleteSpan != null)
|
||||||
{
|
{
|
||||||
AutoCompleteEditHandler editHandler = _lastAutoCompleteSpan.EditHandler as AutoCompleteEditHandler;
|
var editHandler = _lastAutoCompleteSpan.EditHandler as AutoCompleteEditHandler;
|
||||||
if (editHandler != null)
|
if (editHandler != null)
|
||||||
{
|
{
|
||||||
return editHandler.AutoCompleteString;
|
return editHandler.AutoCompleteString;
|
||||||
|
|
@ -128,7 +128,7 @@ namespace Microsoft.AspNet.Razor
|
||||||
// Validate the change
|
// Validate the change
|
||||||
long? elapsedMs = null;
|
long? elapsedMs = null;
|
||||||
#if EDITOR_TRACING
|
#if EDITOR_TRACING
|
||||||
Stopwatch sw = new Stopwatch();
|
var sw = new Stopwatch();
|
||||||
sw.Start();
|
sw.Start();
|
||||||
#endif
|
#endif
|
||||||
RazorEditorTrace.TraceLine(RazorResources.FormatTrace_EditorReceivedChange(Path.GetFileName(FileName), change));
|
RazorEditorTrace.TraceLine(RazorResources.FormatTrace_EditorReceivedChange(Path.GetFileName(FileName), change));
|
||||||
|
|
@ -139,10 +139,10 @@ namespace Microsoft.AspNet.Razor
|
||||||
"TextChange"), "change");
|
"TextChange"), "change");
|
||||||
}
|
}
|
||||||
|
|
||||||
PartialParseResult result = PartialParseResult.Rejected;
|
var result = PartialParseResult.Rejected;
|
||||||
|
|
||||||
// If there isn't already a parse underway, try partial-parsing
|
// If there isn't already a parse underway, try partial-parsing
|
||||||
string changeString = String.Empty;
|
var changeString = String.Empty;
|
||||||
using (_parser.SynchronizeMainThreadState())
|
using (_parser.SynchronizeMainThreadState())
|
||||||
{
|
{
|
||||||
// Capture the string value of the change while we're synchronized
|
// Capture the string value of the change while we're synchronized
|
||||||
|
|
@ -199,12 +199,12 @@ namespace Microsoft.AspNet.Razor
|
||||||
|
|
||||||
private PartialParseResult TryPartialParse(TextChange change)
|
private PartialParseResult TryPartialParse(TextChange change)
|
||||||
{
|
{
|
||||||
PartialParseResult result = PartialParseResult.Rejected;
|
var result = PartialParseResult.Rejected;
|
||||||
|
|
||||||
// Try the last change owner
|
// Try the last change owner
|
||||||
if (_lastChangeOwner != null && _lastChangeOwner.EditHandler.OwnsChange(_lastChangeOwner, change))
|
if (_lastChangeOwner != null && _lastChangeOwner.EditHandler.OwnsChange(_lastChangeOwner, change))
|
||||||
{
|
{
|
||||||
EditResult editResult = _lastChangeOwner.EditHandler.ApplyChange(_lastChangeOwner, change);
|
var editResult = _lastChangeOwner.EditHandler.ApplyChange(_lastChangeOwner, change);
|
||||||
result = editResult.Result;
|
result = editResult.Result;
|
||||||
if ((editResult.Result & PartialParseResult.Rejected) != PartialParseResult.Rejected)
|
if ((editResult.Result & PartialParseResult.Rejected) != PartialParseResult.Rejected)
|
||||||
{
|
{
|
||||||
|
|
@ -224,7 +224,7 @@ namespace Microsoft.AspNet.Razor
|
||||||
}
|
}
|
||||||
else if (_lastChangeOwner != null)
|
else if (_lastChangeOwner != null)
|
||||||
{
|
{
|
||||||
EditResult editResult = _lastChangeOwner.EditHandler.ApplyChange(_lastChangeOwner, change);
|
var editResult = _lastChangeOwner.EditHandler.ApplyChange(_lastChangeOwner, change);
|
||||||
result = editResult.Result;
|
result = editResult.Result;
|
||||||
if ((editResult.Result & PartialParseResult.Rejected) != PartialParseResult.Rejected)
|
if ((editResult.Result & PartialParseResult.Rejected) != PartialParseResult.Rejected)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ namespace Microsoft.AspNet.Razor.Text
|
||||||
|
|
||||||
public override int Read()
|
public override int Read()
|
||||||
{
|
{
|
||||||
int ch = CurrentCharacter;
|
var ch = CurrentCharacter;
|
||||||
NextCharacter();
|
NextCharacter();
|
||||||
return ch;
|
return ch;
|
||||||
}
|
}
|
||||||
|
|
@ -85,7 +85,7 @@ namespace Microsoft.AspNet.Razor.Text
|
||||||
|
|
||||||
// Mark the position to return to when we backtrack
|
// Mark the position to return to when we backtrack
|
||||||
// Use the closures and the "using" statement rather than an explicit stack
|
// Use the closures and the "using" statement rather than an explicit stack
|
||||||
BacktrackContext context = new BacktrackContext()
|
var context = new BacktrackContext()
|
||||||
{
|
{
|
||||||
BufferIndex = _currentBufferPosition,
|
BufferIndex = _currentBufferPosition,
|
||||||
Location = CurrentLocation
|
Location = CurrentLocation
|
||||||
|
|
@ -123,7 +123,7 @@ namespace Microsoft.AspNet.Razor.Text
|
||||||
|
|
||||||
protected virtual void NextCharacter()
|
protected virtual void NextCharacter()
|
||||||
{
|
{
|
||||||
int prevChar = CurrentCharacter;
|
var prevChar = CurrentCharacter;
|
||||||
if (prevChar == -1)
|
if (prevChar == -1)
|
||||||
{
|
{
|
||||||
return; // We're at the end of the source
|
return; // We're at the end of the source
|
||||||
|
|
@ -166,7 +166,7 @@ namespace Microsoft.AspNet.Razor.Text
|
||||||
protected bool ExpandBuffer()
|
protected bool ExpandBuffer()
|
||||||
{
|
{
|
||||||
// Pull another character into the buffer and update the position
|
// Pull another character into the buffer and update the position
|
||||||
int ch = InnerReader.Read();
|
var ch = InnerReader.Read();
|
||||||
|
|
||||||
// Only append the character to the buffer if there actually is one
|
// Only append the character to the buffer if there actually is one
|
||||||
if (ch != -1)
|
if (ch != -1)
|
||||||
|
|
|
||||||
|
|
@ -48,12 +48,12 @@ namespace Microsoft.AspNet.Razor.Text
|
||||||
|
|
||||||
public CharacterReference CharAt(int absoluteIndex)
|
public CharacterReference CharAt(int absoluteIndex)
|
||||||
{
|
{
|
||||||
TextLine line = FindLine(absoluteIndex);
|
var line = FindLine(absoluteIndex);
|
||||||
if (line == null)
|
if (line == null)
|
||||||
{
|
{
|
||||||
throw new ArgumentOutOfRangeException("absoluteIndex");
|
throw new ArgumentOutOfRangeException("absoluteIndex");
|
||||||
}
|
}
|
||||||
int idx = absoluteIndex - line.Start;
|
var idx = absoluteIndex - line.Start;
|
||||||
return new CharacterReference(line.Content[idx], new SourceLocation(absoluteIndex, line.Index, idx));
|
return new CharacterReference(line.Content[idx], new SourceLocation(absoluteIndex, line.Index, idx));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -103,7 +103,7 @@ namespace Microsoft.AspNet.Razor.Text
|
||||||
{
|
{
|
||||||
for (int i = 0; i < _lines.Count; i++)
|
for (int i = 0; i < _lines.Count; i++)
|
||||||
{
|
{
|
||||||
int idx = (i + startPos) % _lines.Count;
|
var idx = (i + startPos) % _lines.Count;
|
||||||
Debug.Assert(idx >= 0 && idx < _lines.Count);
|
Debug.Assert(idx >= 0 && idx < _lines.Count);
|
||||||
|
|
||||||
if (_lines[idx].Contains(absoluteIndex))
|
if (_lines[idx].Contains(absoluteIndex))
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,7 @@ namespace Microsoft.AspNet.Razor.Text
|
||||||
{
|
{
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
char chr = _current.Value;
|
var chr = _current.Value;
|
||||||
_position++;
|
_position++;
|
||||||
UpdateState();
|
UpdateState();
|
||||||
return chr;
|
return chr;
|
||||||
|
|
|
||||||
|
|
@ -74,7 +74,7 @@ namespace Microsoft.AspNet.Razor.Text
|
||||||
|
|
||||||
public static SourceLocation Advance(SourceLocation left, string text)
|
public static SourceLocation Advance(SourceLocation left, string text)
|
||||||
{
|
{
|
||||||
SourceLocationTracker tracker = new SourceLocationTracker(left);
|
var tracker = new SourceLocationTracker(left);
|
||||||
tracker.UpdateLocation(text);
|
tracker.UpdateLocation(text);
|
||||||
return tracker.CurrentLocation;
|
return tracker.CurrentLocation;
|
||||||
}
|
}
|
||||||
|
|
@ -101,7 +101,7 @@ namespace Microsoft.AspNet.Razor.Text
|
||||||
|
|
||||||
private static SourceLocation CreateUndefined()
|
private static SourceLocation CreateUndefined()
|
||||||
{
|
{
|
||||||
SourceLocation sl = new SourceLocation();
|
var sl = new SourceLocation();
|
||||||
sl._absoluteIndex = -1;
|
sl._absoluteIndex = -1;
|
||||||
sl._lineIndex = -1;
|
sl._lineIndex = -1;
|
||||||
sl._characterIndex = -1;
|
sl._characterIndex = -1;
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ namespace Microsoft.AspNet.Razor.Text
|
||||||
{
|
{
|
||||||
for (int i = 0; i < content.Length; i++)
|
for (int i = 0; i < content.Length; i++)
|
||||||
{
|
{
|
||||||
char nextCharacter = '\0';
|
var nextCharacter = '\0';
|
||||||
if (i < content.Length - 1)
|
if (i < content.Length - 1)
|
||||||
{
|
{
|
||||||
nextCharacter = content[i + 1];
|
nextCharacter = content[i + 1];
|
||||||
|
|
|
||||||
|
|
@ -36,11 +36,11 @@ namespace Microsoft.AspNet.Razor.Text
|
||||||
|
|
||||||
public override int Read()
|
public override int Read()
|
||||||
{
|
{
|
||||||
int read = InnerBuffer.Read();
|
var read = InnerBuffer.Read();
|
||||||
if (read != -1)
|
if (read != -1)
|
||||||
{
|
{
|
||||||
char nextChar = '\0';
|
var nextChar = '\0';
|
||||||
int next = Peek();
|
var next = Peek();
|
||||||
if (next != -1)
|
if (next != -1)
|
||||||
{
|
{
|
||||||
nextChar = (char)next;
|
nextChar = (char)next;
|
||||||
|
|
@ -54,7 +54,7 @@ namespace Microsoft.AspNet.Razor.Text
|
||||||
{
|
{
|
||||||
if (disposing)
|
if (disposing)
|
||||||
{
|
{
|
||||||
IDisposable disposable = InnerBuffer as IDisposable;
|
var disposable = InnerBuffer as IDisposable;
|
||||||
if (disposable != null)
|
if (disposable != null)
|
||||||
{
|
{
|
||||||
disposable.Dispose();
|
disposable.Dispose();
|
||||||
|
|
@ -65,7 +65,7 @@ namespace Microsoft.AspNet.Razor.Text
|
||||||
|
|
||||||
public override IDisposable BeginLookahead()
|
public override IDisposable BeginLookahead()
|
||||||
{
|
{
|
||||||
BacktrackContext context = new BacktrackContext() { Location = CurrentLocation };
|
var context = new BacktrackContext() { Location = CurrentLocation };
|
||||||
_bookmarks.Push(context);
|
_bookmarks.Push(context);
|
||||||
return new DisposableAction(() =>
|
return new DisposableAction(() =>
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -121,7 +121,7 @@ namespace Microsoft.AspNet.Razor.Text
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
TextChange change = (TextChange)obj;
|
var change = (TextChange)obj;
|
||||||
return (change.OldPosition == OldPosition) &&
|
return (change.OldPosition == OldPosition) &&
|
||||||
(change.NewPosition == NewPosition) &&
|
(change.NewPosition == NewPosition) &&
|
||||||
(change.OldLength == OldLength) &&
|
(change.OldLength == OldLength) &&
|
||||||
|
|
@ -132,7 +132,7 @@ namespace Microsoft.AspNet.Razor.Text
|
||||||
|
|
||||||
public string ApplyChange(string content, int changeOffset)
|
public string ApplyChange(string content, int changeOffset)
|
||||||
{
|
{
|
||||||
int changeRelativePosition = OldPosition - changeOffset;
|
var changeRelativePosition = OldPosition - changeOffset;
|
||||||
|
|
||||||
Debug.Assert(changeRelativePosition >= 0);
|
Debug.Assert(changeRelativePosition >= 0);
|
||||||
return content.Remove(changeRelativePosition, OldLength)
|
return content.Remove(changeRelativePosition, OldLength)
|
||||||
|
|
@ -185,7 +185,7 @@ namespace Microsoft.AspNet.Razor.Text
|
||||||
return String.Empty;
|
return String.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
int oldPosition = buffer.Position;
|
var oldPosition = buffer.Position;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
buffer.Position = position;
|
buffer.Position = position;
|
||||||
|
|
@ -200,7 +200,7 @@ namespace Microsoft.AspNet.Razor.Text
|
||||||
var builder = new StringBuilder();
|
var builder = new StringBuilder();
|
||||||
for (int i = 0; i < length; i++)
|
for (int i = 0; i < length; i++)
|
||||||
{
|
{
|
||||||
char c = (char)buffer.Read();
|
var c = (char)buffer.Read();
|
||||||
builder.Append(c);
|
builder.Append(c);
|
||||||
|
|
||||||
// This check is probably not necessary, will revisit when fixing https://aspnetwebstack.codeplex.com/workitem/1317
|
// This check is probably not necessary, will revisit when fixing https://aspnetwebstack.codeplex.com/workitem/1317
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ namespace Microsoft.AspNet.Razor.Text
|
||||||
[SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope", Justification = "The consumer is expected to dispose this object")]
|
[SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope", Justification = "The consumer is expected to dispose this object")]
|
||||||
public static ITextDocument ToDocument(this ITextBuffer self)
|
public static ITextDocument ToDocument(this ITextBuffer self)
|
||||||
{
|
{
|
||||||
ITextDocument ret = self as ITextDocument;
|
var ret = self as ITextDocument;
|
||||||
if (ret == null)
|
if (ret == null)
|
||||||
{
|
{
|
||||||
ret = new SeekableTextReader(self);
|
ret = new SeekableTextReader(self);
|
||||||
|
|
@ -26,7 +26,7 @@ namespace Microsoft.AspNet.Razor.Text
|
||||||
|
|
||||||
public static LookaheadToken BeginLookahead(this ITextBuffer self)
|
public static LookaheadToken BeginLookahead(this ITextBuffer self)
|
||||||
{
|
{
|
||||||
int start = self.Position;
|
var start = self.Position;
|
||||||
return new LookaheadToken(() =>
|
return new LookaheadToken(() =>
|
||||||
{
|
{
|
||||||
self.Position = start;
|
self.Position = start;
|
||||||
|
|
@ -35,7 +35,7 @@ namespace Microsoft.AspNet.Razor.Text
|
||||||
|
|
||||||
public static string ReadToEnd(this ITextBuffer self)
|
public static string ReadToEnd(this ITextBuffer self)
|
||||||
{
|
{
|
||||||
StringBuilder builder = new StringBuilder();
|
var builder = new StringBuilder();
|
||||||
int read;
|
int read;
|
||||||
while ((read = self.Read()) != -1)
|
while ((read = self.Read()) != -1)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ namespace Microsoft.AspNet.Razor.Tokenizer
|
||||||
|
|
||||||
private static bool IsIdentifierPartByUnicodeCategory(char character)
|
private static bool IsIdentifierPartByUnicodeCategory(char character)
|
||||||
{
|
{
|
||||||
UnicodeCategory category = CharUnicodeInfo.GetUnicodeCategory(character);
|
var category = CharUnicodeInfo.GetUnicodeCategory(character);
|
||||||
|
|
||||||
return category == UnicodeCategory.NonSpacingMark || // Mn
|
return category == UnicodeCategory.NonSpacingMark || // Mn
|
||||||
category == UnicodeCategory.SpacingCombiningMark || // Mc
|
category == UnicodeCategory.SpacingCombiningMark || // Mc
|
||||||
|
|
|
||||||
|
|
@ -78,7 +78,7 @@ namespace Microsoft.AspNet.Razor.Tokenizer
|
||||||
if (ParserHelpers.IsNewLine(CurrentCharacter))
|
if (ParserHelpers.IsNewLine(CurrentCharacter))
|
||||||
{
|
{
|
||||||
// CSharp Spec §2.3.1
|
// CSharp Spec §2.3.1
|
||||||
bool checkTwoCharNewline = CurrentCharacter == '\r';
|
var checkTwoCharNewline = CurrentCharacter == '\r';
|
||||||
TakeCurrent();
|
TakeCurrent();
|
||||||
if (checkTwoCharNewline && CurrentCharacter == '\n')
|
if (checkTwoCharNewline && CurrentCharacter == '\n')
|
||||||
{
|
{
|
||||||
|
|
@ -168,7 +168,7 @@ namespace Microsoft.AspNet.Razor.Tokenizer
|
||||||
|
|
||||||
private CSharpSymbolType Operator()
|
private CSharpSymbolType Operator()
|
||||||
{
|
{
|
||||||
char first = CurrentCharacter;
|
var first = CurrentCharacter;
|
||||||
TakeCurrent();
|
TakeCurrent();
|
||||||
Func<CSharpSymbolType> handler;
|
Func<CSharpSymbolType> handler;
|
||||||
if (_operatorHandlers.TryGetValue(first, out handler))
|
if (_operatorHandlers.TryGetValue(first, out handler))
|
||||||
|
|
@ -418,8 +418,8 @@ namespace Microsoft.AspNet.Razor.Tokenizer
|
||||||
CSharpSymbol sym = null;
|
CSharpSymbol sym = null;
|
||||||
if (HaveContent)
|
if (HaveContent)
|
||||||
{
|
{
|
||||||
CSharpKeyword? kwd = CSharpKeywordDetector.SymbolTypeForIdentifier(Buffer.ToString());
|
var kwd = CSharpKeywordDetector.SymbolTypeForIdentifier(Buffer.ToString());
|
||||||
CSharpSymbolType type = CSharpSymbolType.Identifier;
|
var type = CSharpSymbolType.Identifier;
|
||||||
if (kwd != null)
|
if (kwd != null)
|
||||||
{
|
{
|
||||||
type = CSharpSymbolType.Keyword;
|
type = CSharpSymbolType.Keyword;
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ namespace Microsoft.AspNet.Razor.Tokenizer
|
||||||
{
|
{
|
||||||
using (SeekableTextReader reader = new SeekableTextReader(content))
|
using (SeekableTextReader reader = new SeekableTextReader(content))
|
||||||
{
|
{
|
||||||
HtmlTokenizer tok = new HtmlTokenizer(reader);
|
var tok = new HtmlTokenizer(reader);
|
||||||
HtmlSymbol sym;
|
HtmlSymbol sym;
|
||||||
while ((sym = tok.NextSymbol()) != null)
|
while ((sym = tok.NextSymbol()) != null)
|
||||||
{
|
{
|
||||||
|
|
@ -100,7 +100,7 @@ namespace Microsoft.AspNet.Razor.Tokenizer
|
||||||
|
|
||||||
private StateResult Text()
|
private StateResult Text()
|
||||||
{
|
{
|
||||||
char prev = '\0';
|
var prev = '\0';
|
||||||
while (!EndOfFile && !ParserHelpers.IsWhitespaceOrNewLine(CurrentCharacter) && !AtSymbol())
|
while (!EndOfFile && !ParserHelpers.IsWhitespaceOrNewLine(CurrentCharacter) && !AtSymbol())
|
||||||
{
|
{
|
||||||
prev = CurrentCharacter;
|
prev = CurrentCharacter;
|
||||||
|
|
@ -109,7 +109,7 @@ namespace Microsoft.AspNet.Razor.Tokenizer
|
||||||
|
|
||||||
if (CurrentCharacter == '@')
|
if (CurrentCharacter == '@')
|
||||||
{
|
{
|
||||||
char next = Peek();
|
var next = Peek();
|
||||||
if (ParserHelpers.IsLetterOrDecimalDigit(prev) && ParserHelpers.IsLetterOrDecimalDigit(next))
|
if (ParserHelpers.IsLetterOrDecimalDigit(prev) && ParserHelpers.IsLetterOrDecimalDigit(next))
|
||||||
{
|
{
|
||||||
TakeCurrent(); // Take the "@"
|
TakeCurrent(); // Take the "@"
|
||||||
|
|
@ -124,7 +124,7 @@ namespace Microsoft.AspNet.Razor.Tokenizer
|
||||||
private HtmlSymbol Symbol()
|
private HtmlSymbol Symbol()
|
||||||
{
|
{
|
||||||
Debug.Assert(AtSymbol());
|
Debug.Assert(AtSymbol());
|
||||||
char sym = CurrentCharacter;
|
var sym = CurrentCharacter;
|
||||||
TakeCurrent();
|
TakeCurrent();
|
||||||
switch (sym)
|
switch (sym)
|
||||||
{
|
{
|
||||||
|
|
@ -177,7 +177,7 @@ namespace Microsoft.AspNet.Razor.Tokenizer
|
||||||
{
|
{
|
||||||
Debug.Assert(ParserHelpers.IsNewLine(CurrentCharacter));
|
Debug.Assert(ParserHelpers.IsNewLine(CurrentCharacter));
|
||||||
// CSharp Spec §2.3.1
|
// CSharp Spec §2.3.1
|
||||||
bool checkTwoCharNewline = CurrentCharacter == '\r';
|
var checkTwoCharNewline = CurrentCharacter == '\r';
|
||||||
TakeCurrent();
|
TakeCurrent();
|
||||||
if (checkTwoCharNewline && CurrentCharacter == '\n')
|
if (checkTwoCharNewline && CurrentCharacter == '\n')
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ namespace Microsoft.AspNet.Razor.Tokenizer.Symbols
|
||||||
|
|
||||||
public override bool Equals(object obj)
|
public override bool Equals(object obj)
|
||||||
{
|
{
|
||||||
CSharpSymbol other = obj as CSharpSymbol;
|
var other = obj as CSharpSymbol;
|
||||||
return base.Equals(obj) && other.Keyword == Keyword;
|
return base.Equals(obj) && other.Keyword == Keyword;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ namespace Microsoft.AspNet.Razor.Tokenizer
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
int peek = Source.Peek();
|
var peek = Source.Peek();
|
||||||
return peek == -1 ? '\0' : (char)peek;
|
return peek == -1 ? '\0' : (char)peek;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -77,7 +77,7 @@ namespace Microsoft.AspNet.Razor.Tokenizer
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
TSymbol sym = Turn();
|
var sym = Turn();
|
||||||
|
|
||||||
// Post-Condition: Buffer should be empty at the end of Next()
|
// Post-Condition: Buffer should be empty at the end of Next()
|
||||||
Debug.Assert(Buffer.Length == 0);
|
Debug.Assert(Buffer.Length == 0);
|
||||||
|
|
@ -100,7 +100,7 @@ namespace Microsoft.AspNet.Razor.Tokenizer
|
||||||
|
|
||||||
protected bool TakeString(string input, bool caseSensitive)
|
protected bool TakeString(string input, bool caseSensitive)
|
||||||
{
|
{
|
||||||
int position = 0;
|
var position = 0;
|
||||||
Func<char, char> charFilter = c => c;
|
Func<char, char> charFilter = c => c;
|
||||||
if (caseSensitive)
|
if (caseSensitive)
|
||||||
{
|
{
|
||||||
|
|
@ -148,7 +148,7 @@ namespace Microsoft.AspNet.Razor.Tokenizer
|
||||||
CurrentStart = previous.Start;
|
CurrentStart = previous.Start;
|
||||||
|
|
||||||
// Capture the current buffer content
|
// Capture the current buffer content
|
||||||
string newContent = Buffer.ToString();
|
var newContent = Buffer.ToString();
|
||||||
|
|
||||||
// Clear the buffer, then put the old content back and add the new content to the end
|
// Clear the buffer, then put the old content back and add the new content to the end
|
||||||
Buffer.Clear();
|
Buffer.Clear();
|
||||||
|
|
@ -227,8 +227,8 @@ namespace Microsoft.AspNet.Razor.Tokenizer
|
||||||
TakeUntil(c => c == '*');
|
TakeUntil(c => c == '*');
|
||||||
if (CurrentCharacter == '*')
|
if (CurrentCharacter == '*')
|
||||||
{
|
{
|
||||||
char star = CurrentCharacter;
|
var star = CurrentCharacter;
|
||||||
SourceLocation start = CurrentLocation;
|
var start = CurrentLocation;
|
||||||
MoveNext();
|
MoveNext();
|
||||||
if (!EndOfFile && CurrentCharacter == '@')
|
if (!EndOfFile && CurrentCharacter == '@')
|
||||||
{
|
{
|
||||||
|
|
@ -351,7 +351,7 @@ namespace Microsoft.AspNet.Razor.Tokenizer
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
string remaining = Source.ReadToEnd();
|
var remaining = Source.ReadToEnd();
|
||||||
Source.Seek(-remaining.Length);
|
Source.Seek(-remaining.Length);
|
||||||
return remaining;
|
return remaining;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,10 +14,10 @@ namespace Microsoft.AspNet.Razor.Test
|
||||||
public void CreateCodeParserReturnsNewCSharpCodeParser()
|
public void CreateCodeParserReturnsNewCSharpCodeParser()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
RazorCodeLanguage service = new CSharpRazorCodeLanguage();
|
var service = new CSharpRazorCodeLanguage();
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
ParserBase parser = service.CreateCodeParser();
|
var parser = service.CreateCodeParser();
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.NotNull(parser);
|
Assert.NotNull(parser);
|
||||||
|
|
@ -28,11 +28,11 @@ namespace Microsoft.AspNet.Razor.Test
|
||||||
public void CreateCodeGeneratorParserListenerReturnsNewCSharpCodeGeneratorParserListener()
|
public void CreateCodeGeneratorParserListenerReturnsNewCSharpCodeGeneratorParserListener()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
RazorCodeLanguage service = new CSharpRazorCodeLanguage();
|
var service = new CSharpRazorCodeLanguage();
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
RazorEngineHost host = new RazorEngineHost(service);
|
var host = new RazorEngineHost(service);
|
||||||
RazorCodeGenerator generator = service.CreateCodeGenerator("Foo", "Bar", "Baz", host);
|
var generator = service.CreateCodeGenerator("Foo", "Bar", "Baz", host);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.NotNull(generator);
|
Assert.NotNull(generator);
|
||||||
|
|
|
||||||
|
|
@ -43,20 +43,20 @@ namespace Microsoft.AspNet.Razor.Test.Editor
|
||||||
public void TreesAreDifferentReturnsTrueIfTreeStructureIsDifferent()
|
public void TreesAreDifferentReturnsTrueIfTreeStructureIsDifferent()
|
||||||
{
|
{
|
||||||
var factory = SpanFactory.CreateCsHtml();
|
var factory = SpanFactory.CreateCsHtml();
|
||||||
Block original = new MarkupBlock(
|
var original = new MarkupBlock(
|
||||||
factory.Markup("<p>"),
|
factory.Markup("<p>"),
|
||||||
new ExpressionBlock(
|
new ExpressionBlock(
|
||||||
factory.CodeTransition()),
|
factory.CodeTransition()),
|
||||||
factory.Markup("</p>"));
|
factory.Markup("</p>"));
|
||||||
Block modified = new MarkupBlock(
|
var modified = new MarkupBlock(
|
||||||
factory.Markup("<p>"),
|
factory.Markup("<p>"),
|
||||||
new ExpressionBlock(
|
new ExpressionBlock(
|
||||||
factory.CodeTransition("@"),
|
factory.CodeTransition("@"),
|
||||||
factory.Code("f")
|
factory.Code("f")
|
||||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords, acceptTrailingDot: false)),
|
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords, acceptTrailingDot: false)),
|
||||||
factory.Markup("</p>"));
|
factory.Markup("</p>"));
|
||||||
ITextBuffer oldBuffer = new StringTextBuffer("<p>@</p>");
|
var oldBuffer = new StringTextBuffer("<p>@</p>");
|
||||||
ITextBuffer newBuffer = new StringTextBuffer("<p>@f</p>");
|
var newBuffer = new StringTextBuffer("<p>@f</p>");
|
||||||
Assert.True(BackgroundParser.TreesAreDifferent(
|
Assert.True(BackgroundParser.TreesAreDifferent(
|
||||||
original, modified, new[] {
|
original, modified, new[] {
|
||||||
new TextChange(position: 4, oldLength: 0, oldBuffer: oldBuffer, newLength: 1, newBuffer: newBuffer)
|
new TextChange(position: 4, oldLength: 0, oldBuffer: oldBuffer, newLength: 1, newBuffer: newBuffer)
|
||||||
|
|
@ -67,7 +67,7 @@ namespace Microsoft.AspNet.Razor.Test.Editor
|
||||||
public void TreesAreDifferentReturnsFalseIfTreeStructureIsSame()
|
public void TreesAreDifferentReturnsFalseIfTreeStructureIsSame()
|
||||||
{
|
{
|
||||||
var factory = SpanFactory.CreateCsHtml();
|
var factory = SpanFactory.CreateCsHtml();
|
||||||
Block original = new MarkupBlock(
|
var original = new MarkupBlock(
|
||||||
factory.Markup("<p>"),
|
factory.Markup("<p>"),
|
||||||
new ExpressionBlock(
|
new ExpressionBlock(
|
||||||
factory.CodeTransition(),
|
factory.CodeTransition(),
|
||||||
|
|
@ -75,7 +75,7 @@ namespace Microsoft.AspNet.Razor.Test.Editor
|
||||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords, acceptTrailingDot: false)),
|
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords, acceptTrailingDot: false)),
|
||||||
factory.Markup("</p>"));
|
factory.Markup("</p>"));
|
||||||
factory.Reset();
|
factory.Reset();
|
||||||
Block modified = new MarkupBlock(
|
var modified = new MarkupBlock(
|
||||||
factory.Markup("<p>"),
|
factory.Markup("<p>"),
|
||||||
new ExpressionBlock(
|
new ExpressionBlock(
|
||||||
factory.CodeTransition(),
|
factory.CodeTransition(),
|
||||||
|
|
@ -84,8 +84,8 @@ namespace Microsoft.AspNet.Razor.Test.Editor
|
||||||
factory.Markup("</p>"));
|
factory.Markup("</p>"));
|
||||||
original.LinkNodes();
|
original.LinkNodes();
|
||||||
modified.LinkNodes();
|
modified.LinkNodes();
|
||||||
ITextBuffer oldBuffer = new StringTextBuffer("<p>@f</p>");
|
var oldBuffer = new StringTextBuffer("<p>@f</p>");
|
||||||
ITextBuffer newBuffer = new StringTextBuffer("<p>@foo</p>");
|
var newBuffer = new StringTextBuffer("<p>@foo</p>");
|
||||||
Assert.False(BackgroundParser.TreesAreDifferent(
|
Assert.False(BackgroundParser.TreesAreDifferent(
|
||||||
original, modified, new[] {
|
original, modified, new[] {
|
||||||
new TextChange(position: 5, oldLength: 0, oldBuffer: oldBuffer, newLength: 2, newBuffer: newBuffer)
|
new TextChange(position: 5, oldLength: 0, oldBuffer: oldBuffer, newLength: 2, newBuffer: newBuffer)
|
||||||
|
|
@ -95,7 +95,7 @@ namespace Microsoft.AspNet.Razor.Test.Editor
|
||||||
[Fact]
|
[Fact]
|
||||||
public void CheckForStructureChangesRequiresNonNullBufferInChange()
|
public void CheckForStructureChangesRequiresNonNullBufferInChange()
|
||||||
{
|
{
|
||||||
TextChange change = new TextChange();
|
var change = new TextChange();
|
||||||
var parameterName = "change";
|
var parameterName = "change";
|
||||||
var exception = Assert.Throws<ArgumentException>(
|
var exception = Assert.Throws<ArgumentException>(
|
||||||
parameterName,
|
parameterName,
|
||||||
|
|
@ -117,10 +117,10 @@ namespace Microsoft.AspNet.Razor.Test.Editor
|
||||||
// Arrange
|
// Arrange
|
||||||
using (RazorEditorParser parser = CreateClientParser())
|
using (RazorEditorParser parser = CreateClientParser())
|
||||||
{
|
{
|
||||||
StringTextBuffer input = new StringTextBuffer(SimpleCSHTMLDocument.ReadAllText());
|
var input = new StringTextBuffer(SimpleCSHTMLDocument.ReadAllText());
|
||||||
|
|
||||||
DocumentParseCompleteEventArgs capturedArgs = null;
|
DocumentParseCompleteEventArgs capturedArgs = null;
|
||||||
ManualResetEventSlim parseComplete = new ManualResetEventSlim(false);
|
var parseComplete = new ManualResetEventSlim(false);
|
||||||
|
|
||||||
parser.DocumentParseComplete += (sender, args) =>
|
parser.DocumentParseComplete += (sender, args) =>
|
||||||
{
|
{
|
||||||
|
|
@ -144,13 +144,13 @@ namespace Microsoft.AspNet.Razor.Test.Editor
|
||||||
public void CheckForStructureChangesStartsFullReparseIfChangeOverlapsMultipleSpans()
|
public void CheckForStructureChangesStartsFullReparseIfChangeOverlapsMultipleSpans()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
RazorEditorParser parser = new RazorEditorParser(CreateHost(), TestLinePragmaFileName);
|
var parser = new RazorEditorParser(CreateHost(), TestLinePragmaFileName);
|
||||||
ITextBuffer original = new StringTextBuffer("Foo @bar Baz");
|
var original = new StringTextBuffer("Foo @bar Baz");
|
||||||
ITextBuffer changed = new StringTextBuffer("Foo @bap Daz");
|
var changed = new StringTextBuffer("Foo @bap Daz");
|
||||||
TextChange change = new TextChange(7, 3, original, 3, changed);
|
var change = new TextChange(7, 3, original, 3, changed);
|
||||||
|
|
||||||
ManualResetEventSlim parseComplete = new ManualResetEventSlim();
|
var parseComplete = new ManualResetEventSlim();
|
||||||
int parseCount = 0;
|
var parseCount = 0;
|
||||||
parser.DocumentParseComplete += (sender, args) =>
|
parser.DocumentParseComplete += (sender, args) =>
|
||||||
{
|
{
|
||||||
Interlocked.Increment(ref parseCount);
|
Interlocked.Increment(ref parseCount);
|
||||||
|
|
@ -162,7 +162,7 @@ namespace Microsoft.AspNet.Razor.Test.Editor
|
||||||
parseComplete.Reset();
|
parseComplete.Reset();
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
PartialParseResult result = parser.CheckForStructureChanges(change);
|
var result = parser.CheckForStructureChanges(change);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(PartialParseResult.Rejected, result);
|
Assert.Equal(PartialParseResult.Rejected, result);
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,7 @@ namespace Microsoft.AspNet.Razor.Test.Framework
|
||||||
|
|
||||||
protected override void SingleSpanBlockTest(string document, string spanContent, BlockType blockType, SpanKind spanType, AcceptedCharacters acceptedCharacters, params RazorError[] expectedErrors)
|
protected override void SingleSpanBlockTest(string document, string spanContent, BlockType blockType, SpanKind spanType, AcceptedCharacters acceptedCharacters, params RazorError[] expectedErrors)
|
||||||
{
|
{
|
||||||
Block b = CreateSimpleBlockAndSpan(spanContent, blockType, spanType, acceptedCharacters);
|
var b = CreateSimpleBlockAndSpan(spanContent, blockType, spanType, acceptedCharacters);
|
||||||
ParseBlockTest(document, b, expectedErrors ?? new RazorError[0]);
|
ParseBlockTest(document, b, expectedErrors ?? new RazorError[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ namespace Microsoft.AspNet.Razor.Test.Framework
|
||||||
|
|
||||||
protected virtual void SingleSpanDocumentTest(string document, BlockType blockType, SpanKind spanType)
|
protected virtual void SingleSpanDocumentTest(string document, BlockType blockType, SpanKind spanType)
|
||||||
{
|
{
|
||||||
Block b = CreateSimpleBlockAndSpan(document, blockType, spanType);
|
var b = CreateSimpleBlockAndSpan(document, blockType, spanType);
|
||||||
ParseDocumentTest(document, b);
|
ParseDocumentTest(document, b);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -110,7 +110,7 @@ namespace Microsoft.AspNet.Razor.Test.Framework
|
||||||
|
|
||||||
protected virtual void SingleSpanBlockTest(string document, string spanContent, BlockType blockType, SpanKind spanType, AcceptedCharacters acceptedCharacters, params RazorError[] expectedErrors)
|
protected virtual void SingleSpanBlockTest(string document, string spanContent, BlockType blockType, SpanKind spanType, AcceptedCharacters acceptedCharacters, params RazorError[] expectedErrors)
|
||||||
{
|
{
|
||||||
BlockBuilder builder = new BlockBuilder();
|
var builder = new BlockBuilder();
|
||||||
builder.Type = blockType;
|
builder.Type = blockType;
|
||||||
ParseBlockTest(
|
ParseBlockTest(
|
||||||
document,
|
document,
|
||||||
|
|
@ -167,13 +167,13 @@ namespace Microsoft.AspNet.Razor.Test.Framework
|
||||||
|
|
||||||
// Create the source
|
// Create the source
|
||||||
ParserResults results = null;
|
ParserResults results = null;
|
||||||
using (SeekableTextReader reader = new SeekableTextReader(document))
|
using (var reader = new SeekableTextReader(document))
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
ParserBase codeParser = CreateCodeParser();
|
var codeParser = CreateCodeParser();
|
||||||
ParserBase markupParser = CreateMarkupParser();
|
var markupParser = CreateMarkupParser();
|
||||||
ParserContext context = CreateParserContext(reader, codeParser, markupParser);
|
var context = CreateParserContext(reader, codeParser, markupParser);
|
||||||
context.DesignTimeMode = designTimeParser;
|
context.DesignTimeMode = designTimeParser;
|
||||||
|
|
||||||
codeParser.Context = context;
|
codeParser.Context = context;
|
||||||
|
|
@ -199,7 +199,7 @@ namespace Microsoft.AspNet.Razor.Test.Framework
|
||||||
protected virtual void RunParseTest(string document, Func<ParserBase, Action> parserActionSelector, Block expectedRoot, IList<RazorError> expectedErrors, bool designTimeParser, Func<ParserContext, ParserBase> parserSelector = null)
|
protected virtual void RunParseTest(string document, Func<ParserBase, Action> parserActionSelector, Block expectedRoot, IList<RazorError> expectedErrors, bool designTimeParser, Func<ParserContext, ParserBase> parserSelector = null)
|
||||||
{
|
{
|
||||||
// Create the source
|
// Create the source
|
||||||
ParserResults results = RunParse(document, parserActionSelector, designTimeParser, parserSelector);
|
var results = RunParse(document, parserActionSelector, designTimeParser, parserSelector);
|
||||||
|
|
||||||
// Evaluate the results
|
// Evaluate the results
|
||||||
if (!ReferenceEquals(expectedRoot, IgnoreOutput))
|
if (!ReferenceEquals(expectedRoot, IgnoreOutput))
|
||||||
|
|
@ -211,7 +211,7 @@ namespace Microsoft.AspNet.Razor.Test.Framework
|
||||||
[Conditional("PARSER_TRACE")]
|
[Conditional("PARSER_TRACE")]
|
||||||
private void WriteNode(int indent, SyntaxTreeNode node)
|
private void WriteNode(int indent, SyntaxTreeNode node)
|
||||||
{
|
{
|
||||||
string content = node.ToString().Replace("\r", "\\r")
|
var content = node.ToString().Replace("\r", "\\r")
|
||||||
.Replace("\n", "\\n")
|
.Replace("\n", "\\n")
|
||||||
.Replace("{", "{{")
|
.Replace("{", "{{")
|
||||||
.Replace("}", "}}");
|
.Replace("}", "}}");
|
||||||
|
|
@ -220,7 +220,7 @@ namespace Microsoft.AspNet.Razor.Test.Framework
|
||||||
content = new String('.', indent * 2) + content;
|
content = new String('.', indent * 2) + content;
|
||||||
}
|
}
|
||||||
WriteTraceLine(content);
|
WriteTraceLine(content);
|
||||||
Block block = node as Block;
|
var block = node as Block;
|
||||||
if (block != null)
|
if (block != null)
|
||||||
{
|
{
|
||||||
foreach (SyntaxTreeNode child in block.Children)
|
foreach (SyntaxTreeNode child in block.Children)
|
||||||
|
|
@ -244,7 +244,7 @@ namespace Microsoft.AspNet.Razor.Test.Framework
|
||||||
public static void EvaluateParseTree(Block actualRoot, Block expectedRoot)
|
public static void EvaluateParseTree(Block actualRoot, Block expectedRoot)
|
||||||
{
|
{
|
||||||
// Evaluate the result
|
// Evaluate the result
|
||||||
ErrorCollector collector = new ErrorCollector();
|
var collector = new ErrorCollector();
|
||||||
|
|
||||||
// Link all the nodes
|
// Link all the nodes
|
||||||
expectedRoot.LinkNodes();
|
expectedRoot.LinkNodes();
|
||||||
|
|
@ -429,7 +429,7 @@ namespace Microsoft.AspNet.Razor.Test.Framework
|
||||||
return "\t<< No Errors >>";
|
return "\t<< No Errors >>";
|
||||||
}
|
}
|
||||||
|
|
||||||
StringBuilder builder = new StringBuilder();
|
var builder = new StringBuilder();
|
||||||
foreach (RazorError err in errors)
|
foreach (RazorError err in errors)
|
||||||
{
|
{
|
||||||
builder.AppendFormat("\t{0}", err);
|
builder.AppendFormat("\t{0}", err);
|
||||||
|
|
@ -446,8 +446,8 @@ namespace Microsoft.AspNet.Razor.Test.Framework
|
||||||
|
|
||||||
protected virtual Block CreateSimpleBlockAndSpan(string spanContent, BlockType blockType, SpanKind spanType, AcceptedCharacters acceptedCharacters = AcceptedCharacters.Any)
|
protected virtual Block CreateSimpleBlockAndSpan(string spanContent, BlockType blockType, SpanKind spanType, AcceptedCharacters acceptedCharacters = AcceptedCharacters.Any)
|
||||||
{
|
{
|
||||||
SpanConstructor span = Factory.Span(spanType, spanContent, spanType == SpanKind.Markup).Accepts(acceptedCharacters);
|
var span = Factory.Span(spanType, spanContent, spanType == SpanKind.Markup).Accepts(acceptedCharacters);
|
||||||
BlockBuilder b = new BlockBuilder()
|
var b = new BlockBuilder()
|
||||||
{
|
{
|
||||||
Type = blockType
|
Type = blockType
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ namespace Microsoft.AspNet.Razor.Test.Framework
|
||||||
|
|
||||||
public override bool Equals(object obj)
|
public override bool Equals(object obj)
|
||||||
{
|
{
|
||||||
RawTextSymbol other = obj as RawTextSymbol;
|
var other = obj as RawTextSymbol;
|
||||||
return Equals(Start, other.Start) && Equals(Content, other.Content);
|
return Equals(Start, other.Start) && Equals(Content, other.Content);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -116,7 +116,7 @@ namespace Microsoft.AspNet.Razor.Test.Framework
|
||||||
|
|
||||||
public static SourceLocation GetLocationAndAdvance(this SourceLocationTracker self, string content)
|
public static SourceLocation GetLocationAndAdvance(this SourceLocationTracker self, string content)
|
||||||
{
|
{
|
||||||
SourceLocation ret = self.CurrentLocation;
|
var ret = self.CurrentLocation;
|
||||||
self.UpdateLocation(content);
|
self.UpdateLocation(content);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
@ -169,7 +169,7 @@ namespace Microsoft.AspNet.Razor.Test.Framework
|
||||||
|
|
||||||
private SpanConstructor CreateSymbolSpan(SpanKind kind, string content, Func<SourceLocation, ISymbol> ctor)
|
private SpanConstructor CreateSymbolSpan(SpanKind kind, string content, Func<SourceLocation, ISymbol> ctor)
|
||||||
{
|
{
|
||||||
SourceLocation start = LocationTracker.CurrentLocation;
|
var start = LocationTracker.CurrentLocation;
|
||||||
LocationTracker.UpdateLocation(content);
|
LocationTracker.UpdateLocation(content);
|
||||||
return new SpanConstructor(kind, new[] { ctor(start) });
|
return new SpanConstructor(kind, new[] { ctor(start) });
|
||||||
}
|
}
|
||||||
|
|
@ -186,7 +186,7 @@ namespace Microsoft.AspNet.Razor.Test.Framework
|
||||||
|
|
||||||
private IEnumerable<ISymbol> Tokenize(string content, bool markup)
|
private IEnumerable<ISymbol> Tokenize(string content, bool markup)
|
||||||
{
|
{
|
||||||
ITokenizer tok = MakeTokenizer(markup, new SeekableTextReader(content));
|
var tok = MakeTokenizer(markup, new SeekableTextReader(content));
|
||||||
ISymbol sym;
|
ISymbol sym;
|
||||||
ISymbol last = null;
|
ISymbol last = null;
|
||||||
while ((sym = tok.NextSymbol()) != null)
|
while ((sym = tok.NextSymbol()) != null)
|
||||||
|
|
|
||||||
|
|
@ -456,7 +456,7 @@ namespace Microsoft.AspNet.Razor.Test.Generator
|
||||||
|
|
||||||
private void OpenedIf(bool withTabs)
|
private void OpenedIf(bool withTabs)
|
||||||
{
|
{
|
||||||
int tabOffsetForMapping = 7;
|
var tabOffsetForMapping = 7;
|
||||||
|
|
||||||
// where the test is running with tabs, the offset into the CS buffer changes for the whitespace mapping
|
// where the test is running with tabs, the offset into the CS buffer changes for the whitespace mapping
|
||||||
// with spaces we get 7xspace -> offset of 8 (column = offset+1)
|
// with spaces we get 7xspace -> offset of 8 (column = offset+1)
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ namespace Microsoft.AspNet.Razor.Test.Generator
|
||||||
var paddingBuilder = new CSharpPaddingBuilder(host);
|
var paddingBuilder = new CSharpPaddingBuilder(host);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
int padding = paddingBuilder.CalculatePadding(span, 1);
|
var padding = paddingBuilder.CalculatePadding(span, 1);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(5, padding);
|
Assert.Equal(5, padding);
|
||||||
|
|
@ -229,7 +229,7 @@ namespace Microsoft.AspNet.Razor.Test.Generator
|
||||||
|
|
||||||
using (var reader = new StringReader(text))
|
using (var reader = new StringReader(text))
|
||||||
{
|
{
|
||||||
ParserResults results = parser.Parse(reader);
|
var results = parser.Parse(reader);
|
||||||
spans = results.Document.Flatten().ToArray();
|
spans = results.Document.Flatten().ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ namespace Microsoft.AspNet.Razor.Test.Generator
|
||||||
Func<RazorTemplateEngine, RazorTemplateEngine> templateEngineConfig = null,
|
Func<RazorTemplateEngine, RazorTemplateEngine> templateEngineConfig = null,
|
||||||
Action<GeneratorResults> onResults = null)
|
Action<GeneratorResults> onResults = null)
|
||||||
{
|
{
|
||||||
bool testRun = false;
|
var testRun = false;
|
||||||
|
|
||||||
if ((tabTest & TabTest.Tabs) == TabTest.Tabs)
|
if ((tabTest & TabTest.Tabs) == TabTest.Tabs)
|
||||||
{
|
{
|
||||||
|
|
@ -103,11 +103,11 @@ namespace Microsoft.AspNet.Razor.Test.Generator
|
||||||
baselineName = name;
|
baselineName = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
string sourceLocation = string.Format("TestFiles/CodeGenerator/{1}/Source/{0}.{2}", name, LanguageName, FileExtension);
|
var sourceLocation = string.Format("TestFiles/CodeGenerator/{1}/Source/{0}.{2}", name, LanguageName, FileExtension);
|
||||||
string expectedOutput = TestFile.Create(string.Format("TestFiles/CodeGenerator/CS/Output/{0}.{1}", baselineName, BaselineExtension)).ReadAllText();
|
var expectedOutput = TestFile.Create(string.Format("TestFiles/CodeGenerator/CS/Output/{0}.{1}", baselineName, BaselineExtension)).ReadAllText();
|
||||||
|
|
||||||
// Set up the host and engine
|
// Set up the host and engine
|
||||||
RazorEngineHost host = CreateHost();
|
var host = CreateHost();
|
||||||
host.NamespaceImports.Add("System");
|
host.NamespaceImports.Add("System");
|
||||||
host.DesignTimeMode = designTimeMode;
|
host.DesignTimeMode = designTimeMode;
|
||||||
host.StaticHelpers = true;
|
host.StaticHelpers = true;
|
||||||
|
|
@ -136,7 +136,7 @@ namespace Microsoft.AspNet.Razor.Test.Generator
|
||||||
host.IsIndentingWithTabs = withTabs;
|
host.IsIndentingWithTabs = withTabs;
|
||||||
host.EnableInstrumentation = true;
|
host.EnableInstrumentation = true;
|
||||||
|
|
||||||
RazorTemplateEngine engine = new RazorTemplateEngine(host);
|
var engine = new RazorTemplateEngine(host);
|
||||||
|
|
||||||
if(templateEngineConfig != null)
|
if(templateEngineConfig != null)
|
||||||
{
|
{
|
||||||
|
|
@ -154,7 +154,7 @@ namespace Microsoft.AspNet.Razor.Test.Generator
|
||||||
BaselineWriter.WriteBaseline(String.Format(@"test\Microsoft.AspNet.Razor.Test\TestFiles\CodeGenerator\{0}\Output\{1}.{2}", LanguageName, baselineName, BaselineExtension), results.GeneratedCode);
|
BaselineWriter.WriteBaseline(String.Format(@"test\Microsoft.AspNet.Razor.Test\TestFiles\CodeGenerator\{0}\Output\{1}.{2}", LanguageName, baselineName, BaselineExtension), results.GeneratedCode);
|
||||||
|
|
||||||
#if !GENERATE_BASELINES
|
#if !GENERATE_BASELINES
|
||||||
string textOutput = results.GeneratedCode;
|
var textOutput = results.GeneratedCode;
|
||||||
|
|
||||||
if (onResults != null)
|
if (onResults != null)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ namespace Microsoft.AspNet.Razor.Test.Generator
|
||||||
|
|
||||||
public override bool Equals(object obj)
|
public override bool Equals(object obj)
|
||||||
{
|
{
|
||||||
TestSpan other = obj as TestSpan;
|
var other = obj as TestSpan;
|
||||||
|
|
||||||
if (other != null)
|
if (other != null)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -17,12 +17,12 @@ namespace Microsoft.AspNet.Razor.Test.Parser
|
||||||
public void ConstructorWithBlockBuilderSetsParent()
|
public void ConstructorWithBlockBuilderSetsParent()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
BlockBuilder builder = new BlockBuilder() { Type = BlockType.Comment };
|
var builder = new BlockBuilder() { Type = BlockType.Comment };
|
||||||
Span span = new SpanBuilder() { Kind = SpanKind.Code }.Build();
|
var span = new SpanBuilder() { Kind = SpanKind.Code }.Build();
|
||||||
builder.Children.Add(span);
|
builder.Children.Add(span);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
Block block = builder.Build();
|
var block = builder.Build();
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Same(block, span.Parent);
|
Assert.Same(block, span.Parent);
|
||||||
|
|
@ -32,15 +32,15 @@ namespace Microsoft.AspNet.Razor.Test.Parser
|
||||||
public void ConstructorTransfersInstanceOfCodeGeneratorFromBlockBuilder()
|
public void ConstructorTransfersInstanceOfCodeGeneratorFromBlockBuilder()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
IBlockCodeGenerator expected = new ExpressionCodeGenerator();
|
var expected = new ExpressionCodeGenerator();
|
||||||
BlockBuilder builder = new BlockBuilder()
|
var builder = new BlockBuilder()
|
||||||
{
|
{
|
||||||
Type = BlockType.Helper,
|
Type = BlockType.Helper,
|
||||||
CodeGenerator = expected
|
CodeGenerator = expected
|
||||||
};
|
};
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
Block actual = builder.Build();
|
var actual = builder.Build();
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Same(expected, actual.CodeGenerator);
|
Assert.Same(expected, actual.CodeGenerator);
|
||||||
|
|
@ -50,15 +50,15 @@ namespace Microsoft.AspNet.Razor.Test.Parser
|
||||||
public void ConstructorTransfersChildrenFromBlockBuilder()
|
public void ConstructorTransfersChildrenFromBlockBuilder()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
Span expected = new SpanBuilder() { Kind = SpanKind.Code }.Build();
|
var expected = new SpanBuilder() { Kind = SpanKind.Code }.Build();
|
||||||
BlockBuilder builder = new BlockBuilder()
|
var builder = new BlockBuilder()
|
||||||
{
|
{
|
||||||
Type = BlockType.Functions
|
Type = BlockType.Functions
|
||||||
};
|
};
|
||||||
builder.Children.Add(expected);
|
builder.Children.Add(expected);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
Block block = builder.Build();
|
var block = builder.Build();
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Same(expected, block.Children.Single());
|
Assert.Same(expected, block.Children.Single());
|
||||||
|
|
@ -69,16 +69,16 @@ namespace Microsoft.AspNet.Razor.Test.Parser
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var factory = SpanFactory.CreateCsHtml();
|
var factory = SpanFactory.CreateCsHtml();
|
||||||
Block block = new MarkupBlock(
|
var block = new MarkupBlock(
|
||||||
factory.Markup("Foo "),
|
factory.Markup("Foo "),
|
||||||
new StatementBlock(
|
new StatementBlock(
|
||||||
factory.CodeTransition(),
|
factory.CodeTransition(),
|
||||||
factory.Code("bar").AsStatement()),
|
factory.Code("bar").AsStatement()),
|
||||||
factory.Markup(" Baz"));
|
factory.Markup(" Baz"));
|
||||||
TextChange change = new TextChange(128, 1, new StringTextBuffer("Foo @bar Baz"), 1, new StringTextBuffer("Foo @bor Baz"));
|
var change = new TextChange(128, 1, new StringTextBuffer("Foo @bar Baz"), 1, new StringTextBuffer("Foo @bor Baz"));
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
Span actual = block.LocateOwner(change);
|
var actual = block.LocateOwner(change);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Null(actual);
|
Assert.Null(actual);
|
||||||
|
|
@ -89,16 +89,16 @@ namespace Microsoft.AspNet.Razor.Test.Parser
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var factory = SpanFactory.CreateCsHtml();
|
var factory = SpanFactory.CreateCsHtml();
|
||||||
Block block = new MarkupBlock(
|
var block = new MarkupBlock(
|
||||||
factory.Markup("Foo "),
|
factory.Markup("Foo "),
|
||||||
new StatementBlock(
|
new StatementBlock(
|
||||||
factory.CodeTransition(),
|
factory.CodeTransition(),
|
||||||
factory.Code("bar").AsStatement()),
|
factory.Code("bar").AsStatement()),
|
||||||
factory.Markup(" Baz"));
|
factory.Markup(" Baz"));
|
||||||
TextChange change = new TextChange(4, 10, new StringTextBuffer("Foo @bar Baz"), 10, new StringTextBuffer("Foo @bor Baz"));
|
var change = new TextChange(4, 10, new StringTextBuffer("Foo @bar Baz"), 10, new StringTextBuffer("Foo @bor Baz"));
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
Span actual = block.LocateOwner(change);
|
var actual = block.LocateOwner(change);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Null(actual);
|
Assert.Null(actual);
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
||||||
public void ParseBlockMethodThrowsArgNullExceptionOnNullContext()
|
public void ParseBlockMethodThrowsArgNullExceptionOnNullContext()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
CSharpCodeParser parser = new CSharpCodeParser();
|
var parser = new CSharpCodeParser();
|
||||||
|
|
||||||
// Act and Assert
|
// Act and Assert
|
||||||
var exception = Assert.Throws<InvalidOperationException>(() => parser.ParseBlock());
|
var exception = Assert.Throws<InvalidOperationException>(() => parser.ParseBlock());
|
||||||
|
|
@ -567,14 +567,14 @@ catch(bar) { baz(); }", BlockType.Statement, SpanKind.Code);
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ParseBlockStopsParsingCatchClausesAfterFinallyBlock()
|
public void ParseBlockStopsParsingCatchClausesAfterFinallyBlock()
|
||||||
{
|
{
|
||||||
string expectedContent = "try { var foo = new { } } finally { var foo = new { } }";
|
var expectedContent = "try { var foo = new { } } finally { var foo = new { } }";
|
||||||
SingleSpanBlockTest(expectedContent + " catch(Foo Bar Baz) { }", expectedContent, BlockType.Statement, SpanKind.Code, acceptedCharacters: AcceptedCharacters.None);
|
SingleSpanBlockTest(expectedContent + " catch(Foo Bar Baz) { }", expectedContent, BlockType.Statement, SpanKind.Code, acceptedCharacters: AcceptedCharacters.None);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ParseBlockDoesNotAllowMultipleFinallyBlocks()
|
public void ParseBlockDoesNotAllowMultipleFinallyBlocks()
|
||||||
{
|
{
|
||||||
string expectedContent = "try { var foo = new { } } finally { var foo = new { } }";
|
var expectedContent = "try { var foo = new { } } finally { var foo = new { } }";
|
||||||
SingleSpanBlockTest(expectedContent + " finally { }", expectedContent, BlockType.Statement, SpanKind.Code, acceptedCharacters: AcceptedCharacters.None);
|
SingleSpanBlockTest(expectedContent + " finally { }", expectedContent, BlockType.Statement, SpanKind.Code, acceptedCharacters: AcceptedCharacters.None);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -384,7 +384,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ParseBlockRequiresControlFlowStatementsToHaveBraces()
|
public void ParseBlockRequiresControlFlowStatementsToHaveBraces()
|
||||||
{
|
{
|
||||||
string expectedMessage = RazorResources.FormatParseError_SingleLine_ControlFlowStatements_Not_Allowed("{", "<");
|
var expectedMessage = RazorResources.FormatParseError_SingleLine_ControlFlowStatements_Not_Allowed("{", "<");
|
||||||
ParseBlockTest("if(foo) <p>Bar</p> else if(bar) <p>Baz</p> else <p>Boz</p>",
|
ParseBlockTest("if(foo) <p>Bar</p> else if(bar) <p>Baz</p> else <p>Boz</p>",
|
||||||
new StatementBlock(
|
new StatementBlock(
|
||||||
Factory.Code("if(foo) ").AsStatement(),
|
Factory.Code("if(foo) ").AsStatement(),
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
Action<Span> spanCallback = _ => { };
|
Action<Span> spanCallback = _ => { };
|
||||||
CallbackVisitor listener = new CallbackVisitor(spanCallback);
|
var listener = new CallbackVisitor(spanCallback);
|
||||||
|
|
||||||
// Act/Assert
|
// Act/Assert
|
||||||
listener.VisitStartBlock(new FunctionsBlock());
|
listener.VisitStartBlock(new FunctionsBlock());
|
||||||
|
|
@ -114,7 +114,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser
|
||||||
// Act/Assert
|
// Act/Assert
|
||||||
RunCallbackTest<T>(default(T), callback =>
|
RunCallbackTest<T>(default(T), callback =>
|
||||||
{
|
{
|
||||||
CallbackVisitor listener = ctor(callback);
|
var listener = ctor(callback);
|
||||||
listener.SynchronizationContext = mockContext.Object;
|
listener.SynchronizationContext = mockContext.Object;
|
||||||
return listener;
|
return listener;
|
||||||
}, call, (original, actual) =>
|
}, call, (original, actual) =>
|
||||||
|
|
@ -151,7 +151,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser
|
||||||
object actual = null;
|
object actual = null;
|
||||||
Action<T> callback = t => actual = t;
|
Action<T> callback = t => actual = t;
|
||||||
|
|
||||||
CallbackVisitor listener = ctor(callback);
|
var listener = ctor(callback);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
call(listener, expected);
|
call(listener, expected);
|
||||||
|
|
|
||||||
|
|
@ -184,7 +184,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
||||||
public void ConditionalAttributeCollapserDoesNotRemoveUrlAttributeValues()
|
public void ConditionalAttributeCollapserDoesNotRemoveUrlAttributeValues()
|
||||||
{
|
{
|
||||||
// Act
|
// Act
|
||||||
ParserResults results = ParseDocument("<a href='~/Foo/Bar' />");
|
var results = ParseDocument("<a href='~/Foo/Bar' />");
|
||||||
var rewritingContext = new RewritingContext(results.Document);
|
var rewritingContext = new RewritingContext(results.Document);
|
||||||
new ConditionalAttributeCollapser(new HtmlMarkupParser().BuildSpan).Rewrite(rewritingContext);
|
new ConditionalAttributeCollapser(new HtmlMarkupParser().BuildSpan).Rewrite(rewritingContext);
|
||||||
new MarkupCollapser(new HtmlMarkupParser().BuildSpan).Rewrite(rewritingContext);
|
new MarkupCollapser(new HtmlMarkupParser().BuildSpan).Rewrite(rewritingContext);
|
||||||
|
|
@ -271,7 +271,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
||||||
</div>";
|
</div>";
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
ParserResults results = ParseDocument(code);
|
var results = ParseDocument(code);
|
||||||
var rewritingContext = new RewritingContext(results.Document);
|
var rewritingContext = new RewritingContext(results.Document);
|
||||||
new ConditionalAttributeCollapser(new HtmlMarkupParser().BuildSpan).Rewrite(rewritingContext);
|
new ConditionalAttributeCollapser(new HtmlMarkupParser().BuildSpan).Rewrite(rewritingContext);
|
||||||
new MarkupCollapser(new HtmlMarkupParser().BuildSpan).Rewrite(rewritingContext);
|
new MarkupCollapser(new HtmlMarkupParser().BuildSpan).Rewrite(rewritingContext);
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
||||||
public void ParseBlockMethodThrowsArgNullExceptionOnNullContext()
|
public void ParseBlockMethodThrowsArgNullExceptionOnNullContext()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
HtmlMarkupParser parser = new HtmlMarkupParser();
|
var parser = new HtmlMarkupParser();
|
||||||
|
|
||||||
// Act and Assert
|
// Act and Assert
|
||||||
var exception = Assert.Throws<InvalidOperationException>(() => parser.ParseBlock());
|
var exception = Assert.Throws<InvalidOperationException>(() => parser.ParseBlock());
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
||||||
public void ParseDocumentMethodThrowsArgNullExceptionOnNullContext()
|
public void ParseDocumentMethodThrowsArgNullExceptionOnNullContext()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
HtmlMarkupParser parser = new HtmlMarkupParser();
|
var parser = new HtmlMarkupParser();
|
||||||
|
|
||||||
// Act and Assert
|
// Act and Assert
|
||||||
var exception = Assert.Throws<InvalidOperationException>(() => parser.ParseDocument());
|
var exception = Assert.Throws<InvalidOperationException>(() => parser.ParseDocument());
|
||||||
|
|
@ -30,7 +30,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
||||||
public void ParseSectionMethodThrowsArgNullExceptionOnNullContext()
|
public void ParseSectionMethodThrowsArgNullExceptionOnNullContext()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
HtmlMarkupParser parser = new HtmlMarkupParser();
|
var parser = new HtmlMarkupParser();
|
||||||
|
|
||||||
// Act and Assert
|
// Act and Assert
|
||||||
var exception = Assert.Throws<InvalidOperationException>(() => parser.ParseSection(null, true));
|
var exception = Assert.Throws<InvalidOperationException>(() => parser.ParseSection(null, true));
|
||||||
|
|
@ -277,7 +277,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ParseBlockCanParse1000NestedElements()
|
public void ParseBlockCanParse1000NestedElements()
|
||||||
{
|
{
|
||||||
string content = Nested1000.ReadAllText();
|
var content = Nested1000.ReadAllText();
|
||||||
ParseDocument(content);
|
ParseDocument(content);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -65,12 +65,12 @@ namespace Microsoft.AspNet.Razor.Test.Parser
|
||||||
public void ConstructorInitializesProperties()
|
public void ConstructorInitializesProperties()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
SeekableTextReader expectedBuffer = new SeekableTextReader(TextReader.Null);
|
var expectedBuffer = new SeekableTextReader(TextReader.Null);
|
||||||
CSharpCodeParser expectedCodeParser = new CSharpCodeParser();
|
var expectedCodeParser = new CSharpCodeParser();
|
||||||
HtmlMarkupParser expectedMarkupParser = new HtmlMarkupParser();
|
var expectedMarkupParser = new HtmlMarkupParser();
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
ParserContext context = new ParserContext(expectedBuffer, expectedCodeParser, expectedMarkupParser, expectedCodeParser);
|
var context = new ParserContext(expectedBuffer, expectedCodeParser, expectedMarkupParser, expectedCodeParser);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.NotNull(context.Source);
|
Assert.NotNull(context.Source);
|
||||||
|
|
@ -83,10 +83,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser
|
||||||
public void CurrentCharacterReturnsCurrentCharacterInTextBuffer()
|
public void CurrentCharacterReturnsCurrentCharacterInTextBuffer()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
ParserContext context = SetupTestContext("bar", b => b.Read());
|
var context = SetupTestContext("bar", b => b.Read());
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
char actual = context.CurrentCharacter;
|
var actual = context.CurrentCharacter;
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal('a', actual);
|
Assert.Equal('a', actual);
|
||||||
|
|
@ -96,10 +96,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser
|
||||||
public void CurrentCharacterReturnsNulCharacterIfTextBufferAtEOF()
|
public void CurrentCharacterReturnsNulCharacterIfTextBufferAtEOF()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
ParserContext context = SetupTestContext("bar", b => b.ReadToEnd());
|
var context = SetupTestContext("bar", b => b.ReadToEnd());
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
char actual = context.CurrentCharacter;
|
var actual = context.CurrentCharacter;
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal('\0', actual);
|
Assert.Equal('\0', actual);
|
||||||
|
|
@ -109,7 +109,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser
|
||||||
public void EndOfFileReturnsFalseIfTextBufferNotAtEOF()
|
public void EndOfFileReturnsFalseIfTextBufferNotAtEOF()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
ParserContext context = SetupTestContext("bar");
|
var context = SetupTestContext("bar");
|
||||||
|
|
||||||
// Act/Assert
|
// Act/Assert
|
||||||
Assert.False(context.EndOfFile);
|
Assert.False(context.EndOfFile);
|
||||||
|
|
@ -119,7 +119,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser
|
||||||
public void EndOfFileReturnsTrueIfTextBufferAtEOF()
|
public void EndOfFileReturnsTrueIfTextBufferAtEOF()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
ParserContext context = SetupTestContext("bar", b => b.ReadToEnd());
|
var context = SetupTestContext("bar", b => b.ReadToEnd());
|
||||||
|
|
||||||
// Act/Assert
|
// Act/Assert
|
||||||
Assert.True(context.EndOfFile);
|
Assert.True(context.EndOfFile);
|
||||||
|
|
@ -129,7 +129,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser
|
||||||
public void StartBlockCreatesNewBlock()
|
public void StartBlockCreatesNewBlock()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
ParserContext context = SetupTestContext("phoo");
|
var context = SetupTestContext("phoo");
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
context.StartBlock(BlockType.Expression);
|
context.StartBlock(BlockType.Expression);
|
||||||
|
|
@ -145,7 +145,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
Mock<ParserVisitor> mockListener = new Mock<ParserVisitor>();
|
Mock<ParserVisitor> mockListener = new Mock<ParserVisitor>();
|
||||||
ParserContext context = SetupTestContext("phoo");
|
var context = SetupTestContext("phoo");
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
context.StartBlock(BlockType.Expression);
|
context.StartBlock(BlockType.Expression);
|
||||||
|
|
@ -165,21 +165,21 @@ namespace Microsoft.AspNet.Razor.Test.Parser
|
||||||
// Arrange
|
// Arrange
|
||||||
var factory = SpanFactory.CreateCsHtml();
|
var factory = SpanFactory.CreateCsHtml();
|
||||||
Mock<ParserVisitor> mockListener = new Mock<ParserVisitor>();
|
Mock<ParserVisitor> mockListener = new Mock<ParserVisitor>();
|
||||||
ParserContext context = SetupTestContext("phoo");
|
var context = SetupTestContext("phoo");
|
||||||
|
|
||||||
SpanBuilder builder = new SpanBuilder()
|
var builder = new SpanBuilder()
|
||||||
{
|
{
|
||||||
Kind = SpanKind.Code
|
Kind = SpanKind.Code
|
||||||
};
|
};
|
||||||
builder.Accept(new CSharpSymbol(1, 0, 1, "foo", CSharpSymbolType.Identifier));
|
builder.Accept(new CSharpSymbol(1, 0, 1, "foo", CSharpSymbolType.Identifier));
|
||||||
Span added = builder.Build();
|
var added = builder.Build();
|
||||||
|
|
||||||
using (context.StartBlock(BlockType.Functions))
|
using (context.StartBlock(BlockType.Functions))
|
||||||
{
|
{
|
||||||
context.AddSpan(added);
|
context.AddSpan(added);
|
||||||
}
|
}
|
||||||
|
|
||||||
BlockBuilder expected = new BlockBuilder()
|
var expected = new BlockBuilder()
|
||||||
{
|
{
|
||||||
Type = BlockType.Functions,
|
Type = BlockType.Functions,
|
||||||
};
|
};
|
||||||
|
|
@ -196,7 +196,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser
|
||||||
// Arrange
|
// Arrange
|
||||||
var codeParser = new CSharpCodeParser();
|
var codeParser = new CSharpCodeParser();
|
||||||
var markupParser = new HtmlMarkupParser();
|
var markupParser = new HtmlMarkupParser();
|
||||||
ParserContext context = SetupTestContext("barbazbiz", b => b.Read(), codeParser, markupParser, codeParser);
|
var context = SetupTestContext("barbazbiz", b => b.Read(), codeParser, markupParser, codeParser);
|
||||||
Assert.Same(codeParser, context.ActiveParser);
|
Assert.Same(codeParser, context.ActiveParser);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|
@ -212,7 +212,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser
|
||||||
// Arrange
|
// Arrange
|
||||||
var codeParser = new CSharpCodeParser();
|
var codeParser = new CSharpCodeParser();
|
||||||
var markupParser = new HtmlMarkupParser();
|
var markupParser = new HtmlMarkupParser();
|
||||||
ParserContext context = SetupTestContext("barbazbiz", b => b.Read(), codeParser, markupParser, markupParser);
|
var context = SetupTestContext("barbazbiz", b => b.Read(), codeParser, markupParser, markupParser);
|
||||||
Assert.Same(markupParser, context.ActiveParser);
|
Assert.Same(markupParser, context.ActiveParser);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|
@ -238,7 +238,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser
|
||||||
|
|
||||||
private ParserContext SetupTestContext(string document, Action<TextReader> positioningAction, ParserBase codeParser, ParserBase markupParser, ParserBase activeParser)
|
private ParserContext SetupTestContext(string document, Action<TextReader> positioningAction, ParserBase codeParser, ParserBase markupParser, ParserBase activeParser)
|
||||||
{
|
{
|
||||||
ParserContext context = new ParserContext(new SeekableTextReader(new StringReader(document)), codeParser, markupParser, activeParser);
|
var context = new ParserContext(new SeekableTextReader(new StringReader(document)), codeParser, markupParser, activeParser);
|
||||||
positioningAction(context.Source);
|
positioningAction(context.Source);
|
||||||
return context;
|
return context;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser
|
||||||
public void VisitThrowsOnNullVisitor()
|
public void VisitThrowsOnNullVisitor()
|
||||||
{
|
{
|
||||||
ParserVisitor target = null;
|
ParserVisitor target = null;
|
||||||
ParserResults results = new ParserResults(new BlockBuilder() { Type = BlockType.Comment }.Build(), new List<RazorError>());
|
var results = new ParserResults(new BlockBuilder() { Type = BlockType.Comment }.Build(), new List<RazorError>());
|
||||||
|
|
||||||
Assert.Throws<ArgumentNullException>("self", () => target.Visit(results));
|
Assert.Throws<ArgumentNullException>("self", () => target.Visit(results));
|
||||||
}
|
}
|
||||||
|
|
@ -25,7 +25,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser
|
||||||
[Fact]
|
[Fact]
|
||||||
public void VisitThrowsOnNullResults()
|
public void VisitThrowsOnNullResults()
|
||||||
{
|
{
|
||||||
ParserVisitor target = new Mock<ParserVisitor>().Object;
|
var target = new Mock<ParserVisitor>().Object;
|
||||||
Assert.Throws<ArgumentNullException>("result", () => target.Visit(null));
|
Assert.Throws<ArgumentNullException>("result", () => target.Visit(null));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -34,8 +34,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
Mock<ParserVisitor> targetMock = new Mock<ParserVisitor>();
|
Mock<ParserVisitor> targetMock = new Mock<ParserVisitor>();
|
||||||
Block root = new BlockBuilder() { Type = BlockType.Comment }.Build();
|
var root = new BlockBuilder() { Type = BlockType.Comment }.Build();
|
||||||
ParserResults results = new ParserResults(root, new List<RazorError>());
|
var results = new ParserResults(root, new List<RazorError>());
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
targetMock.Object.Visit(results);
|
targetMock.Object.Visit(results);
|
||||||
|
|
@ -49,12 +49,12 @@ namespace Microsoft.AspNet.Razor.Test.Parser
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
Mock<ParserVisitor> targetMock = new Mock<ParserVisitor>();
|
Mock<ParserVisitor> targetMock = new Mock<ParserVisitor>();
|
||||||
Block root = new BlockBuilder() { Type = BlockType.Comment }.Build();
|
var root = new BlockBuilder() { Type = BlockType.Comment }.Build();
|
||||||
List<RazorError> errors = new List<RazorError>() {
|
List<RazorError> errors = new List<RazorError>() {
|
||||||
new RazorError("Foo", 1, 0, 1),
|
new RazorError("Foo", 1, 0, 1),
|
||||||
new RazorError("Bar", 2, 0, 2)
|
new RazorError("Bar", 2, 0, 2)
|
||||||
};
|
};
|
||||||
ParserResults results = new ParserResults(root, errors);
|
var results = new ParserResults(root, errors);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
targetMock.Object.Visit(results);
|
targetMock.Object.Visit(results);
|
||||||
|
|
@ -69,12 +69,12 @@ namespace Microsoft.AspNet.Razor.Test.Parser
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
Mock<ParserVisitor> targetMock = new Mock<ParserVisitor>();
|
Mock<ParserVisitor> targetMock = new Mock<ParserVisitor>();
|
||||||
Block root = new BlockBuilder() { Type = BlockType.Comment }.Build();
|
var root = new BlockBuilder() { Type = BlockType.Comment }.Build();
|
||||||
List<RazorError> errors = new List<RazorError>() {
|
List<RazorError> errors = new List<RazorError>() {
|
||||||
new RazorError("Foo", 1, 0, 1),
|
new RazorError("Foo", 1, 0, 1),
|
||||||
new RazorError("Bar", 2, 0, 2)
|
new RazorError("Bar", 2, 0, 2)
|
||||||
};
|
};
|
||||||
ParserResults results = new ParserResults(root, errors);
|
var results = new ParserResults(root, errors);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
targetMock.Object.Visit(results);
|
targetMock.Object.Visit(results);
|
||||||
|
|
|
||||||
|
|
@ -17,9 +17,9 @@ namespace Microsoft.AspNet.Razor.Test.Parser.PartialParsing
|
||||||
public void AwaitPeriodInsertionAcceptedProvisionally()
|
public void AwaitPeriodInsertionAcceptedProvisionally()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
SpanFactory factory = SpanFactory.CreateCsHtml();
|
var factory = SpanFactory.CreateCsHtml();
|
||||||
StringTextBuffer changed = new StringTextBuffer("foo @await Html. baz");
|
var changed = new StringTextBuffer("foo @await Html. baz");
|
||||||
StringTextBuffer old = new StringTextBuffer("foo @await Html baz");
|
var old = new StringTextBuffer("foo @await Html baz");
|
||||||
|
|
||||||
// Act and Assert
|
// Act and Assert
|
||||||
RunPartialParseTest(new TextChange(15, 0, old, 1, changed),
|
RunPartialParseTest(new TextChange(15, 0, old, 1, changed),
|
||||||
|
|
@ -35,13 +35,13 @@ namespace Microsoft.AspNet.Razor.Test.Parser.PartialParsing
|
||||||
public void ImplicitExpressionAcceptsInnerInsertionsInStatementBlock()
|
public void ImplicitExpressionAcceptsInnerInsertionsInStatementBlock()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
SpanFactory factory = SpanFactory.CreateCsHtml();
|
var factory = SpanFactory.CreateCsHtml();
|
||||||
StringTextBuffer changed = new StringTextBuffer("@{" + Environment.NewLine
|
var changed = new StringTextBuffer("@{" + Environment.NewLine
|
||||||
+ " @DateTime..Now" + Environment.NewLine
|
+ " @DateTime..Now" + Environment.NewLine
|
||||||
+ "}");
|
+ "}");
|
||||||
StringTextBuffer old = new StringTextBuffer("@{" + Environment.NewLine
|
var old = new StringTextBuffer("@{" + Environment.NewLine
|
||||||
+ " @DateTime.Now" + Environment.NewLine
|
+ " @DateTime.Now" + Environment.NewLine
|
||||||
+ "}");
|
+ "}");
|
||||||
|
|
||||||
// Act and Assert
|
// Act and Assert
|
||||||
RunPartialParseTest(new TextChange(17, 0, old, 1, changed),
|
RunPartialParseTest(new TextChange(17, 0, old, 1, changed),
|
||||||
|
|
@ -65,9 +65,9 @@ namespace Microsoft.AspNet.Razor.Test.Parser.PartialParsing
|
||||||
public void ImplicitExpressionAcceptsInnerInsertions()
|
public void ImplicitExpressionAcceptsInnerInsertions()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
SpanFactory factory = SpanFactory.CreateCsHtml();
|
var factory = SpanFactory.CreateCsHtml();
|
||||||
StringTextBuffer changed = new StringTextBuffer("foo @DateTime..Now baz");
|
var changed = new StringTextBuffer("foo @DateTime..Now baz");
|
||||||
StringTextBuffer old = new StringTextBuffer("foo @DateTime.Now baz");
|
var old = new StringTextBuffer("foo @DateTime.Now baz");
|
||||||
|
|
||||||
// Act and Assert
|
// Act and Assert
|
||||||
RunPartialParseTest(new TextChange(13, 0, old, 1, changed),
|
RunPartialParseTest(new TextChange(13, 0, old, 1, changed),
|
||||||
|
|
@ -83,19 +83,19 @@ namespace Microsoft.AspNet.Razor.Test.Parser.PartialParsing
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ImplicitExpressionAcceptsDotlessCommitInsertionsInStatementBlockAfterIdentifiers()
|
public void ImplicitExpressionAcceptsDotlessCommitInsertionsInStatementBlockAfterIdentifiers()
|
||||||
{
|
{
|
||||||
SpanFactory factory = SpanFactory.CreateCsHtml();
|
var factory = SpanFactory.CreateCsHtml();
|
||||||
StringTextBuffer changed = new StringTextBuffer("@{" + Environment.NewLine
|
var changed = new StringTextBuffer("@{" + Environment.NewLine
|
||||||
+ " @DateTime." + Environment.NewLine
|
+ " @DateTime." + Environment.NewLine
|
||||||
+ "}");
|
+ "}");
|
||||||
StringTextBuffer old = new StringTextBuffer("@{" + Environment.NewLine
|
var old = new StringTextBuffer("@{" + Environment.NewLine
|
||||||
+ " @DateTime" + Environment.NewLine
|
+ " @DateTime" + Environment.NewLine
|
||||||
+ "}");
|
+ "}");
|
||||||
|
|
||||||
var textChange = new TextChange(17, 0, old, 1, changed);
|
var textChange = new TextChange(17, 0, old, 1, changed);
|
||||||
TestParserManager manager = CreateParserManager();
|
var manager = CreateParserManager();
|
||||||
Action<TextChange, PartialParseResult, string> applyAndVerifyPartialChange = (changeToApply, expectedResult, expectedCode) =>
|
Action<TextChange, PartialParseResult, string> applyAndVerifyPartialChange = (changeToApply, expectedResult, expectedCode) =>
|
||||||
{
|
{
|
||||||
PartialParseResult result = manager.CheckForStructureChangesAndWait(textChange);
|
var result = manager.CheckForStructureChangesAndWait(textChange);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(expectedResult, result);
|
Assert.Equal(expectedResult, result);
|
||||||
|
|
@ -123,16 +123,16 @@ namespace Microsoft.AspNet.Razor.Test.Parser.PartialParsing
|
||||||
|
|
||||||
old = changed;
|
old = changed;
|
||||||
changed = new StringTextBuffer("@{" + Environment.NewLine
|
changed = new StringTextBuffer("@{" + Environment.NewLine
|
||||||
+ " @DateTime.." + Environment.NewLine
|
+ " @DateTime.." + Environment.NewLine
|
||||||
+ "}");
|
+ "}");
|
||||||
textChange = new TextChange(18, 0, old, 1, changed);
|
textChange = new TextChange(18, 0, old, 1, changed);
|
||||||
|
|
||||||
applyAndVerifyPartialChange(textChange, PartialParseResult.Accepted, "DateTime..");
|
applyAndVerifyPartialChange(textChange, PartialParseResult.Accepted, "DateTime..");
|
||||||
|
|
||||||
old = changed;
|
old = changed;
|
||||||
changed = new StringTextBuffer("@{" + Environment.NewLine
|
changed = new StringTextBuffer("@{" + Environment.NewLine
|
||||||
+ " @DateTime.Now." + Environment.NewLine
|
+ " @DateTime.Now." + Environment.NewLine
|
||||||
+ "}");
|
+ "}");
|
||||||
textChange = new TextChange(18, 0, old, 3, changed);
|
textChange = new TextChange(18, 0, old, 3, changed);
|
||||||
|
|
||||||
applyAndVerifyPartialChange(textChange, PartialParseResult.Accepted, "DateTime.Now.");
|
applyAndVerifyPartialChange(textChange, PartialParseResult.Accepted, "DateTime.Now.");
|
||||||
|
|
@ -141,19 +141,19 @@ namespace Microsoft.AspNet.Razor.Test.Parser.PartialParsing
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ImplicitExpressionAcceptsDotlessCommitInsertionsInStatementBlock()
|
public void ImplicitExpressionAcceptsDotlessCommitInsertionsInStatementBlock()
|
||||||
{
|
{
|
||||||
SpanFactory factory = SpanFactory.CreateCsHtml();
|
var factory = SpanFactory.CreateCsHtml();
|
||||||
StringTextBuffer changed = new StringTextBuffer("@{" + Environment.NewLine
|
var changed = new StringTextBuffer("@{" + Environment.NewLine
|
||||||
+ " @DateT." + Environment.NewLine
|
+ " @DateT." + Environment.NewLine
|
||||||
+ "}");
|
+ "}");
|
||||||
StringTextBuffer old = new StringTextBuffer("@{" + Environment.NewLine
|
var old = new StringTextBuffer("@{" + Environment.NewLine
|
||||||
+ " @DateT" + Environment.NewLine
|
+ " @DateT" + Environment.NewLine
|
||||||
+ "}");
|
+ "}");
|
||||||
|
|
||||||
var textChange = new TextChange(14, 0, old, 1, changed);
|
var textChange = new TextChange(14, 0, old, 1, changed);
|
||||||
TestParserManager manager = CreateParserManager();
|
var manager = CreateParserManager();
|
||||||
Action<TextChange, PartialParseResult, string> applyAndVerifyPartialChange = (changeToApply, expectedResult, expectedCode) =>
|
Action<TextChange, PartialParseResult, string> applyAndVerifyPartialChange = (changeToApply, expectedResult, expectedCode) =>
|
||||||
{
|
{
|
||||||
PartialParseResult result = manager.CheckForStructureChangesAndWait(textChange);
|
var result = manager.CheckForStructureChangesAndWait(textChange);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(expectedResult, result);
|
Assert.Equal(expectedResult, result);
|
||||||
|
|
@ -181,8 +181,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.PartialParsing
|
||||||
|
|
||||||
old = changed;
|
old = changed;
|
||||||
changed = new StringTextBuffer("@{" + Environment.NewLine
|
changed = new StringTextBuffer("@{" + Environment.NewLine
|
||||||
+ " @DateTime." + Environment.NewLine
|
+ " @DateTime." + Environment.NewLine
|
||||||
+ "}");
|
+ "}");
|
||||||
textChange = new TextChange(14, 0, old, 3, changed);
|
textChange = new TextChange(14, 0, old, 3, changed);
|
||||||
|
|
||||||
applyAndVerifyPartialChange(textChange, PartialParseResult.Accepted, "DateTime.");
|
applyAndVerifyPartialChange(textChange, PartialParseResult.Accepted, "DateTime.");
|
||||||
|
|
@ -191,14 +191,14 @@ namespace Microsoft.AspNet.Razor.Test.Parser.PartialParsing
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ImplicitExpressionProvisionallyAcceptsDotlessCommitInsertions()
|
public void ImplicitExpressionProvisionallyAcceptsDotlessCommitInsertions()
|
||||||
{
|
{
|
||||||
SpanFactory factory = SpanFactory.CreateCsHtml();
|
var factory = SpanFactory.CreateCsHtml();
|
||||||
var changed = new StringTextBuffer("foo @DateT. baz");
|
var changed = new StringTextBuffer("foo @DateT. baz");
|
||||||
var old = new StringTextBuffer("foo @DateT baz");
|
var old = new StringTextBuffer("foo @DateT baz");
|
||||||
var textChange = new TextChange(10, 0, old, 1, changed);
|
var textChange = new TextChange(10, 0, old, 1, changed);
|
||||||
TestParserManager manager = CreateParserManager();
|
var manager = CreateParserManager();
|
||||||
Action<TextChange, PartialParseResult, string> applyAndVerifyPartialChange = (changeToApply, expectedResult, expectedCode) =>
|
Action<TextChange, PartialParseResult, string> applyAndVerifyPartialChange = (changeToApply, expectedResult, expectedCode) =>
|
||||||
{
|
{
|
||||||
PartialParseResult result = manager.CheckForStructureChangesAndWait(textChange);
|
var result = manager.CheckForStructureChangesAndWait(textChange);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(expectedResult, result);
|
Assert.Equal(expectedResult, result);
|
||||||
|
|
@ -227,14 +227,14 @@ namespace Microsoft.AspNet.Razor.Test.Parser.PartialParsing
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ImplicitExpressionProvisionallyAcceptsDotlessCommitInsertionsAfterIdentifiers()
|
public void ImplicitExpressionProvisionallyAcceptsDotlessCommitInsertionsAfterIdentifiers()
|
||||||
{
|
{
|
||||||
SpanFactory factory = SpanFactory.CreateCsHtml();
|
var factory = SpanFactory.CreateCsHtml();
|
||||||
var changed = new StringTextBuffer("foo @DateTime. baz");
|
var changed = new StringTextBuffer("foo @DateTime. baz");
|
||||||
var old = new StringTextBuffer("foo @DateTime baz");
|
var old = new StringTextBuffer("foo @DateTime baz");
|
||||||
var textChange = new TextChange(13, 0, old, 1, changed);
|
var textChange = new TextChange(13, 0, old, 1, changed);
|
||||||
TestParserManager manager = CreateParserManager();
|
var manager = CreateParserManager();
|
||||||
Action<TextChange, PartialParseResult, string> applyAndVerifyPartialChange = (changeToApply, expectedResult, expectedCode) =>
|
Action<TextChange, PartialParseResult, string> applyAndVerifyPartialChange = (changeToApply, expectedResult, expectedCode) =>
|
||||||
{
|
{
|
||||||
PartialParseResult result = manager.CheckForStructureChangesAndWait(textChange);
|
var result = manager.CheckForStructureChangesAndWait(textChange);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(expectedResult, result);
|
Assert.Equal(expectedResult, result);
|
||||||
|
|
@ -269,9 +269,9 @@ namespace Microsoft.AspNet.Razor.Test.Parser.PartialParsing
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ImplicitExpressionProvisionallyAcceptsDeleteOfIdentifierPartsIfDotRemains()
|
public void ImplicitExpressionProvisionallyAcceptsDeleteOfIdentifierPartsIfDotRemains()
|
||||||
{
|
{
|
||||||
SpanFactory factory = SpanFactory.CreateCsHtml();
|
var factory = SpanFactory.CreateCsHtml();
|
||||||
StringTextBuffer changed = new StringTextBuffer("foo @User. baz");
|
var changed = new StringTextBuffer("foo @User. baz");
|
||||||
StringTextBuffer old = new StringTextBuffer("foo @User.Name baz");
|
var old = new StringTextBuffer("foo @User.Name baz");
|
||||||
RunPartialParseTest(new TextChange(10, 4, old, 0, changed),
|
RunPartialParseTest(new TextChange(10, 4, old, 0, changed),
|
||||||
new MarkupBlock(
|
new MarkupBlock(
|
||||||
factory.Markup("foo "),
|
factory.Markup("foo "),
|
||||||
|
|
@ -286,8 +286,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.PartialParsing
|
||||||
public void ImplicitExpressionAcceptsDeleteOfIdentifierPartsIfSomeOfIdentifierRemains()
|
public void ImplicitExpressionAcceptsDeleteOfIdentifierPartsIfSomeOfIdentifierRemains()
|
||||||
{
|
{
|
||||||
var factory = SpanFactory.CreateCsHtml();
|
var factory = SpanFactory.CreateCsHtml();
|
||||||
StringTextBuffer changed = new StringTextBuffer("foo @Us baz");
|
var changed = new StringTextBuffer("foo @Us baz");
|
||||||
StringTextBuffer old = new StringTextBuffer("foo @User baz");
|
var old = new StringTextBuffer("foo @User baz");
|
||||||
RunPartialParseTest(new TextChange(7, 2, old, 0, changed),
|
RunPartialParseTest(new TextChange(7, 2, old, 0, changed),
|
||||||
new MarkupBlock(
|
new MarkupBlock(
|
||||||
factory.Markup("foo "),
|
factory.Markup("foo "),
|
||||||
|
|
@ -301,8 +301,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.PartialParsing
|
||||||
public void ImplicitExpressionProvisionallyAcceptsMultipleInsertionIfItCausesIdentifierExpansionAndTrailingDot()
|
public void ImplicitExpressionProvisionallyAcceptsMultipleInsertionIfItCausesIdentifierExpansionAndTrailingDot()
|
||||||
{
|
{
|
||||||
var factory = SpanFactory.CreateCsHtml();
|
var factory = SpanFactory.CreateCsHtml();
|
||||||
StringTextBuffer changed = new StringTextBuffer("foo @User. baz");
|
var changed = new StringTextBuffer("foo @User. baz");
|
||||||
StringTextBuffer old = new StringTextBuffer("foo @U baz");
|
var old = new StringTextBuffer("foo @U baz");
|
||||||
RunPartialParseTest(new TextChange(6, 0, old, 4, changed),
|
RunPartialParseTest(new TextChange(6, 0, old, 4, changed),
|
||||||
new MarkupBlock(
|
new MarkupBlock(
|
||||||
factory.Markup("foo "),
|
factory.Markup("foo "),
|
||||||
|
|
@ -317,8 +317,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.PartialParsing
|
||||||
public void ImplicitExpressionAcceptsMultipleInsertionIfItOnlyCausesIdentifierExpansion()
|
public void ImplicitExpressionAcceptsMultipleInsertionIfItOnlyCausesIdentifierExpansion()
|
||||||
{
|
{
|
||||||
var factory = SpanFactory.CreateCsHtml();
|
var factory = SpanFactory.CreateCsHtml();
|
||||||
StringTextBuffer changed = new StringTextBuffer("foo @barbiz baz");
|
var changed = new StringTextBuffer("foo @barbiz baz");
|
||||||
StringTextBuffer old = new StringTextBuffer("foo @bar baz");
|
var old = new StringTextBuffer("foo @bar baz");
|
||||||
RunPartialParseTest(new TextChange(8, 0, old, 3, changed),
|
RunPartialParseTest(new TextChange(8, 0, old, 3, changed),
|
||||||
new MarkupBlock(
|
new MarkupBlock(
|
||||||
factory.Markup("foo "),
|
factory.Markup("foo "),
|
||||||
|
|
@ -332,12 +332,12 @@ namespace Microsoft.AspNet.Razor.Test.Parser.PartialParsing
|
||||||
public void ImplicitExpressionAcceptsIdentifierExpansionAtEndOfNonWhitespaceCharacters()
|
public void ImplicitExpressionAcceptsIdentifierExpansionAtEndOfNonWhitespaceCharacters()
|
||||||
{
|
{
|
||||||
var factory = SpanFactory.CreateCsHtml();
|
var factory = SpanFactory.CreateCsHtml();
|
||||||
StringTextBuffer changed = new StringTextBuffer("@{" + Environment.NewLine
|
var changed = new StringTextBuffer("@{" + Environment.NewLine
|
||||||
+ " @food" + Environment.NewLine
|
+ " @food" + Environment.NewLine
|
||||||
+ "}");
|
+ "}");
|
||||||
StringTextBuffer old = new StringTextBuffer("@{" + Environment.NewLine
|
var old = new StringTextBuffer("@{" + Environment.NewLine
|
||||||
+ " @foo" + Environment.NewLine
|
+ " @foo" + Environment.NewLine
|
||||||
+ "}");
|
+ "}");
|
||||||
RunPartialParseTest(new TextChange(12, 0, old, 1, changed),
|
RunPartialParseTest(new TextChange(12, 0, old, 1, changed),
|
||||||
new MarkupBlock(
|
new MarkupBlock(
|
||||||
factory.EmptyHtml(),
|
factory.EmptyHtml(),
|
||||||
|
|
@ -359,12 +359,12 @@ namespace Microsoft.AspNet.Razor.Test.Parser.PartialParsing
|
||||||
public void ImplicitExpressionAcceptsIdentifierAfterDotAtEndOfNonWhitespaceCharacters()
|
public void ImplicitExpressionAcceptsIdentifierAfterDotAtEndOfNonWhitespaceCharacters()
|
||||||
{
|
{
|
||||||
var factory = SpanFactory.CreateCsHtml();
|
var factory = SpanFactory.CreateCsHtml();
|
||||||
StringTextBuffer changed = new StringTextBuffer("@{" + Environment.NewLine
|
var changed = new StringTextBuffer("@{" + Environment.NewLine
|
||||||
+ " @foo.d" + Environment.NewLine
|
+ " @foo.d" + Environment.NewLine
|
||||||
+ "}");
|
+ "}");
|
||||||
StringTextBuffer old = new StringTextBuffer("@{" + Environment.NewLine
|
var old = new StringTextBuffer("@{" + Environment.NewLine
|
||||||
+ " @foo." + Environment.NewLine
|
+ " @foo." + Environment.NewLine
|
||||||
+ "}");
|
+ "}");
|
||||||
RunPartialParseTest(new TextChange(13, 0, old, 1, changed),
|
RunPartialParseTest(new TextChange(13, 0, old, 1, changed),
|
||||||
new MarkupBlock(
|
new MarkupBlock(
|
||||||
factory.EmptyHtml(),
|
factory.EmptyHtml(),
|
||||||
|
|
@ -386,12 +386,12 @@ namespace Microsoft.AspNet.Razor.Test.Parser.PartialParsing
|
||||||
public void ImplicitExpressionAcceptsDotAtEndOfNonWhitespaceCharacters()
|
public void ImplicitExpressionAcceptsDotAtEndOfNonWhitespaceCharacters()
|
||||||
{
|
{
|
||||||
var factory = SpanFactory.CreateCsHtml();
|
var factory = SpanFactory.CreateCsHtml();
|
||||||
StringTextBuffer changed = new StringTextBuffer("@{" + Environment.NewLine
|
var changed = new StringTextBuffer("@{" + Environment.NewLine
|
||||||
+ " @foo." + Environment.NewLine
|
+ " @foo." + Environment.NewLine
|
||||||
+ "}");
|
+ "}");
|
||||||
StringTextBuffer old = new StringTextBuffer("@{" + Environment.NewLine
|
var old = new StringTextBuffer("@{" + Environment.NewLine
|
||||||
+ " @foo" + Environment.NewLine
|
+ " @foo" + Environment.NewLine
|
||||||
+ "}");
|
+ "}");
|
||||||
RunPartialParseTest(new TextChange(12, 0, old, 1, changed),
|
RunPartialParseTest(new TextChange(12, 0, old, 1, changed),
|
||||||
new MarkupBlock(
|
new MarkupBlock(
|
||||||
factory.EmptyHtml(),
|
factory.EmptyHtml(),
|
||||||
|
|
@ -415,16 +415,16 @@ namespace Microsoft.AspNet.Razor.Test.Parser.PartialParsing
|
||||||
var factory = SpanFactory.CreateCsHtml();
|
var factory = SpanFactory.CreateCsHtml();
|
||||||
|
|
||||||
// Arrange
|
// Arrange
|
||||||
TextChange dotTyped = new TextChange(8, 0, new StringTextBuffer("foo @foo @bar"), 1, new StringTextBuffer("foo @foo. @bar"));
|
var dotTyped = new TextChange(8, 0, new StringTextBuffer("foo @foo @bar"), 1, new StringTextBuffer("foo @foo. @bar"));
|
||||||
TextChange charTyped = new TextChange(14, 0, new StringTextBuffer("foo @foo. @bar"), 1, new StringTextBuffer("foo @foo. @barb"));
|
var charTyped = new TextChange(14, 0, new StringTextBuffer("foo @foo. @bar"), 1, new StringTextBuffer("foo @foo. @barb"));
|
||||||
TestParserManager manager = CreateParserManager();
|
var manager = CreateParserManager();
|
||||||
manager.InitializeWithDocument(dotTyped.OldBuffer);
|
manager.InitializeWithDocument(dotTyped.OldBuffer);
|
||||||
|
|
||||||
// Apply the dot change
|
// Apply the dot change
|
||||||
Assert.Equal(PartialParseResult.Provisional | PartialParseResult.Accepted, manager.CheckForStructureChangesAndWait(dotTyped));
|
Assert.Equal(PartialParseResult.Provisional | PartialParseResult.Accepted, manager.CheckForStructureChangesAndWait(dotTyped));
|
||||||
|
|
||||||
// Act (apply the identifier start char change)
|
// Act (apply the identifier start char change)
|
||||||
PartialParseResult result = manager.CheckForStructureChangesAndWait(charTyped);
|
var result = manager.CheckForStructureChangesAndWait(charTyped);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(PartialParseResult.Rejected, result);
|
Assert.Equal(PartialParseResult.Rejected, result);
|
||||||
|
|
@ -452,16 +452,16 @@ namespace Microsoft.AspNet.Razor.Test.Parser.PartialParsing
|
||||||
var factory = SpanFactory.CreateCsHtml();
|
var factory = SpanFactory.CreateCsHtml();
|
||||||
|
|
||||||
// Arrange
|
// Arrange
|
||||||
TextChange dotTyped = new TextChange(8, 0, new StringTextBuffer("foo @foo bar"), 1, new StringTextBuffer("foo @foo. bar"));
|
var dotTyped = new TextChange(8, 0, new StringTextBuffer("foo @foo bar"), 1, new StringTextBuffer("foo @foo. bar"));
|
||||||
TextChange charTyped = new TextChange(9, 0, new StringTextBuffer("foo @foo. bar"), 1, new StringTextBuffer("foo @foo.b bar"));
|
var charTyped = new TextChange(9, 0, new StringTextBuffer("foo @foo. bar"), 1, new StringTextBuffer("foo @foo.b bar"));
|
||||||
TestParserManager manager = CreateParserManager();
|
var manager = CreateParserManager();
|
||||||
manager.InitializeWithDocument(dotTyped.OldBuffer);
|
manager.InitializeWithDocument(dotTyped.OldBuffer);
|
||||||
|
|
||||||
// Apply the dot change
|
// Apply the dot change
|
||||||
Assert.Equal(PartialParseResult.Provisional | PartialParseResult.Accepted, manager.CheckForStructureChangesAndWait(dotTyped));
|
Assert.Equal(PartialParseResult.Provisional | PartialParseResult.Accepted, manager.CheckForStructureChangesAndWait(dotTyped));
|
||||||
|
|
||||||
// Act (apply the identifier start char change)
|
// Act (apply the identifier start char change)
|
||||||
PartialParseResult result = manager.CheckForStructureChangesAndWait(charTyped);
|
var result = manager.CheckForStructureChangesAndWait(charTyped);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(PartialParseResult.Accepted, result);
|
Assert.Equal(PartialParseResult.Accepted, result);
|
||||||
|
|
@ -481,8 +481,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.PartialParsing
|
||||||
public void ImplicitExpressionProvisionallyAcceptsDotAfterIdentifierInMarkup()
|
public void ImplicitExpressionProvisionallyAcceptsDotAfterIdentifierInMarkup()
|
||||||
{
|
{
|
||||||
var factory = SpanFactory.CreateCsHtml();
|
var factory = SpanFactory.CreateCsHtml();
|
||||||
StringTextBuffer changed = new StringTextBuffer("foo @foo. bar");
|
var changed = new StringTextBuffer("foo @foo. bar");
|
||||||
StringTextBuffer old = new StringTextBuffer("foo @foo bar");
|
var old = new StringTextBuffer("foo @foo bar");
|
||||||
RunPartialParseTest(new TextChange(8, 0, old, 1, changed),
|
RunPartialParseTest(new TextChange(8, 0, old, 1, changed),
|
||||||
new MarkupBlock(
|
new MarkupBlock(
|
||||||
factory.Markup("foo "),
|
factory.Markup("foo "),
|
||||||
|
|
@ -499,8 +499,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.PartialParsing
|
||||||
public void ImplicitExpressionAcceptsAdditionalIdentifierCharactersIfEndOfSpanIsIdentifier()
|
public void ImplicitExpressionAcceptsAdditionalIdentifierCharactersIfEndOfSpanIsIdentifier()
|
||||||
{
|
{
|
||||||
var factory = SpanFactory.CreateCsHtml();
|
var factory = SpanFactory.CreateCsHtml();
|
||||||
StringTextBuffer changed = new StringTextBuffer("foo @foob bar");
|
var changed = new StringTextBuffer("foo @foob bar");
|
||||||
StringTextBuffer old = new StringTextBuffer("foo @foo bar");
|
var old = new StringTextBuffer("foo @foo bar");
|
||||||
RunPartialParseTest(new TextChange(8, 0, old, 1, changed),
|
RunPartialParseTest(new TextChange(8, 0, old, 1, changed),
|
||||||
new MarkupBlock(
|
new MarkupBlock(
|
||||||
factory.Markup("foo "),
|
factory.Markup("foo "),
|
||||||
|
|
@ -516,8 +516,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.PartialParsing
|
||||||
public void ImplicitExpressionAcceptsAdditionalIdentifierStartCharactersIfEndOfSpanIsDot()
|
public void ImplicitExpressionAcceptsAdditionalIdentifierStartCharactersIfEndOfSpanIsDot()
|
||||||
{
|
{
|
||||||
var factory = SpanFactory.CreateCsHtml();
|
var factory = SpanFactory.CreateCsHtml();
|
||||||
StringTextBuffer changed = new StringTextBuffer("@{@foo.b}");
|
var changed = new StringTextBuffer("@{@foo.b}");
|
||||||
StringTextBuffer old = new StringTextBuffer("@{@foo.}");
|
var old = new StringTextBuffer("@{@foo.}");
|
||||||
RunPartialParseTest(new TextChange(7, 0, old, 1, changed),
|
RunPartialParseTest(new TextChange(7, 0, old, 1, changed),
|
||||||
new MarkupBlock(
|
new MarkupBlock(
|
||||||
factory.EmptyHtml(),
|
factory.EmptyHtml(),
|
||||||
|
|
@ -539,8 +539,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.PartialParsing
|
||||||
public void ImplicitExpressionAcceptsDotIfTrailingDotsAreAllowed()
|
public void ImplicitExpressionAcceptsDotIfTrailingDotsAreAllowed()
|
||||||
{
|
{
|
||||||
var factory = SpanFactory.CreateCsHtml();
|
var factory = SpanFactory.CreateCsHtml();
|
||||||
StringTextBuffer changed = new StringTextBuffer("@{@foo.}");
|
var changed = new StringTextBuffer("@{@foo.}");
|
||||||
StringTextBuffer old = new StringTextBuffer("@{@foo}");
|
var old = new StringTextBuffer("@{@foo}");
|
||||||
RunPartialParseTest(new TextChange(6, 0, old, 1, changed),
|
RunPartialParseTest(new TextChange(6, 0, old, 1, changed),
|
||||||
new MarkupBlock(
|
new MarkupBlock(
|
||||||
factory.EmptyHtml(),
|
factory.EmptyHtml(),
|
||||||
|
|
|
||||||
|
|
@ -21,11 +21,11 @@ namespace Microsoft.AspNet.Razor.Test.Parser.PartialParsing
|
||||||
protected static void RunFullReparseTest(TextChange change, PartialParseResult additionalFlags = (PartialParseResult)0)
|
protected static void RunFullReparseTest(TextChange change, PartialParseResult additionalFlags = (PartialParseResult)0)
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
TestParserManager manager = CreateParserManager();
|
var manager = CreateParserManager();
|
||||||
manager.InitializeWithDocument(change.OldBuffer);
|
manager.InitializeWithDocument(change.OldBuffer);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
PartialParseResult result = manager.CheckForStructureChangesAndWait(change);
|
var result = manager.CheckForStructureChangesAndWait(change);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(PartialParseResult.Rejected | additionalFlags, result);
|
Assert.Equal(PartialParseResult.Rejected | additionalFlags, result);
|
||||||
|
|
@ -35,11 +35,11 @@ namespace Microsoft.AspNet.Razor.Test.Parser.PartialParsing
|
||||||
protected static void RunPartialParseTest(TextChange change, Block newTreeRoot, PartialParseResult additionalFlags = (PartialParseResult)0)
|
protected static void RunPartialParseTest(TextChange change, Block newTreeRoot, PartialParseResult additionalFlags = (PartialParseResult)0)
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
TestParserManager manager = CreateParserManager();
|
var manager = CreateParserManager();
|
||||||
manager.InitializeWithDocument(change.OldBuffer);
|
manager.InitializeWithDocument(change.OldBuffer);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
PartialParseResult result = manager.CheckForStructureChangesAndWait(change);
|
var result = manager.CheckForStructureChangesAndWait(change);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(PartialParseResult.Accepted | additionalFlags, result);
|
Assert.Equal(PartialParseResult.Accepted | additionalFlags, result);
|
||||||
|
|
@ -49,8 +49,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.PartialParsing
|
||||||
|
|
||||||
protected static TestParserManager CreateParserManager()
|
protected static TestParserManager CreateParserManager()
|
||||||
{
|
{
|
||||||
RazorEngineHost host = CreateHost();
|
var host = CreateHost();
|
||||||
RazorEditorParser parser = new RazorEditorParser(host, TestLinePragmaFileName);
|
var parser = new RazorEditorParser(host, TestLinePragmaFileName);
|
||||||
return new TestParserManager(parser);
|
return new TestParserManager(parser);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -72,10 +72,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.PartialParsing
|
||||||
|
|
||||||
protected static void RunTypeKeywordTest(string keyword)
|
protected static void RunTypeKeywordTest(string keyword)
|
||||||
{
|
{
|
||||||
string before = "@" + keyword.Substring(0, keyword.Length - 1);
|
var before = "@" + keyword.Substring(0, keyword.Length - 1);
|
||||||
string after = "@" + keyword;
|
var after = "@" + keyword;
|
||||||
StringTextBuffer changed = new StringTextBuffer(after);
|
var changed = new StringTextBuffer(after);
|
||||||
StringTextBuffer old = new StringTextBuffer(before);
|
var old = new StringTextBuffer(before);
|
||||||
RunFullReparseTest(new TextChange(keyword.Length, 0, old, 1, changed), additionalFlags: PartialParseResult.SpanContextChanged);
|
RunFullReparseTest(new TextChange(keyword.Length, 0, old, 1, changed), additionalFlags: PartialParseResult.SpanContextChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -104,7 +104,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser.PartialParsing
|
||||||
|
|
||||||
public PartialParseResult CheckForStructureChangesAndWait(TextChange change)
|
public PartialParseResult CheckForStructureChangesAndWait(TextChange change)
|
||||||
{
|
{
|
||||||
PartialParseResult result = Parser.CheckForStructureChanges(change);
|
var result = Parser.CheckForStructureChanges(change);
|
||||||
if (result.HasFlag(PartialParseResult.Rejected))
|
if (result.HasFlag(PartialParseResult.Rejected))
|
||||||
{
|
{
|
||||||
WaitForParse();
|
WaitForParse();
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var factory = SpanFactory.CreateCsHtml();
|
var factory = SpanFactory.CreateCsHtml();
|
||||||
Block start = new MarkupBlock(
|
var start = new MarkupBlock(
|
||||||
factory.Markup("test"),
|
factory.Markup("test"),
|
||||||
new ExpressionBlock(
|
new ExpressionBlock(
|
||||||
factory.Code(" ").AsExpression(),
|
factory.Code(" ").AsExpression(),
|
||||||
|
|
@ -31,7 +31,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser
|
||||||
),
|
),
|
||||||
factory.Markup("test")
|
factory.Markup("test")
|
||||||
);
|
);
|
||||||
WhiteSpaceRewriter rewriter = new WhiteSpaceRewriter(new HtmlMarkupParser().BuildSpan);
|
var rewriter = new WhiteSpaceRewriter(new HtmlMarkupParser().BuildSpan);
|
||||||
var rewritingContext = new RewritingContext(start);
|
var rewritingContext = new RewritingContext(start);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|
|
||||||
|
|
@ -37,10 +37,10 @@ namespace Microsoft.AspNet.Razor.Test
|
||||||
public void MultipleCallsToGetServiceWithSameExtensionReturnSameObject()
|
public void MultipleCallsToGetServiceWithSameExtensionReturnSameObject()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
RazorCodeLanguage expected = RazorCodeLanguage.GetLanguageByExtension("cshtml");
|
var expected = RazorCodeLanguage.GetLanguageByExtension("cshtml");
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
RazorCodeLanguage actual = RazorCodeLanguage.GetLanguageByExtension("cshtml");
|
var actual = RazorCodeLanguage.GetLanguageByExtension("cshtml");
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Same(expected, actual);
|
Assert.Same(expected, actual);
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ namespace Microsoft.AspNet.Razor.Test
|
||||||
var attribute2 = new RazorDirectiveAttribute("foo", "BAr");
|
var attribute2 = new RazorDirectiveAttribute("foo", "BAr");
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
bool result = attribute1.Equals(attribute2);
|
var result = attribute1.Equals(attribute2);
|
||||||
var hashCode = attribute1.GetHashCode();
|
var hashCode = attribute1.GetHashCode();
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
|
@ -71,7 +71,7 @@ namespace Microsoft.AspNet.Razor.Test
|
||||||
var attribute2 = new RazorDirectiveAttribute("foo", "");
|
var attribute2 = new RazorDirectiveAttribute("foo", "");
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
bool result = attribute1.Equals(attribute2);
|
var result = attribute1.Equals(attribute2);
|
||||||
var hashCode1 = attribute1.GetHashCode();
|
var hashCode1 = attribute1.GetHashCode();
|
||||||
var hashCode2 = attribute2.GetHashCode();
|
var hashCode2 = attribute2.GetHashCode();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,10 +27,10 @@ namespace Microsoft.AspNet.Razor.Test
|
||||||
public void ConstructorWithCodeLanguageSetsPropertiesAppropriately()
|
public void ConstructorWithCodeLanguageSetsPropertiesAppropriately()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
RazorCodeLanguage language = new CSharpRazorCodeLanguage();
|
var language = new CSharpRazorCodeLanguage();
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
RazorEngineHost host = new RazorEngineHost(language);
|
var host = new RazorEngineHost(language);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
VerifyCommonDefaults(host);
|
VerifyCommonDefaults(host);
|
||||||
|
|
@ -42,11 +42,11 @@ namespace Microsoft.AspNet.Razor.Test
|
||||||
public void ConstructorWithCodeLanguageAndMarkupParserSetsPropertiesAppropriately()
|
public void ConstructorWithCodeLanguageAndMarkupParserSetsPropertiesAppropriately()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
RazorCodeLanguage language = new CSharpRazorCodeLanguage();
|
var language = new CSharpRazorCodeLanguage();
|
||||||
ParserBase expected = new HtmlMarkupParser();
|
var expected = new HtmlMarkupParser();
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
RazorEngineHost host = new RazorEngineHost(language, () => expected);
|
var host = new RazorEngineHost(language, () => expected);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
VerifyCommonDefaults(host);
|
VerifyCommonDefaults(host);
|
||||||
|
|
@ -76,10 +76,10 @@ namespace Microsoft.AspNet.Razor.Test
|
||||||
public void DecorateCodeParserDoesNotModifyIncomingParser()
|
public void DecorateCodeParserDoesNotModifyIncomingParser()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
ParserBase expected = new CSharpCodeParser();
|
var expected = new CSharpCodeParser();
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
ParserBase actual = CreateHost().DecorateCodeParser(expected);
|
var actual = CreateHost().DecorateCodeParser(expected);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Same(expected, actual);
|
Assert.Same(expected, actual);
|
||||||
|
|
@ -89,10 +89,10 @@ namespace Microsoft.AspNet.Razor.Test
|
||||||
public void DecorateMarkupParserReturnsIncomingParser()
|
public void DecorateMarkupParserReturnsIncomingParser()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
ParserBase expected = new HtmlMarkupParser();
|
var expected = new HtmlMarkupParser();
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
ParserBase actual = CreateHost().DecorateMarkupParser(expected);
|
var actual = CreateHost().DecorateMarkupParser(expected);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Same(expected, actual);
|
Assert.Same(expected, actual);
|
||||||
|
|
@ -102,10 +102,10 @@ namespace Microsoft.AspNet.Razor.Test
|
||||||
public void DecorateCodeGeneratorReturnsIncomingCodeGenerator()
|
public void DecorateCodeGeneratorReturnsIncomingCodeGenerator()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
RazorCodeGenerator expected = new CSharpRazorCodeGenerator("Foo", "Bar", "Baz", CreateHost());
|
var expected = new CSharpRazorCodeGenerator("Foo", "Bar", "Baz", CreateHost());
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
RazorCodeGenerator actual = CreateHost().DecorateCodeGenerator(expected);
|
var actual = CreateHost().DecorateCodeGenerator(expected);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Same(expected, actual);
|
Assert.Same(expected, actual);
|
||||||
|
|
|
||||||
|
|
@ -235,8 +235,8 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
public void BacktrackBufferIsClearedWhenEndReachedAndNoCurrentLookaheads()
|
public void BacktrackBufferIsClearedWhenEndReachedAndNoCurrentLookaheads()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
StringReader source = new StringReader(TestString);
|
var source = new StringReader(TestString);
|
||||||
BufferingTextReader reader = new BufferingTextReader(source);
|
var reader = new BufferingTextReader(source);
|
||||||
|
|
||||||
reader.Read(); // Reader: "bcdefg"
|
reader.Read(); // Reader: "bcdefg"
|
||||||
using (reader.BeginLookahead())
|
using (reader.BeginLookahead())
|
||||||
|
|
@ -257,8 +257,8 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
private static void RunDisposeTest(Action<LookaheadTextReader> triggerAction)
|
private static void RunDisposeTest(Action<LookaheadTextReader> triggerAction)
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
DisposeTestMockTextReader source = new DisposeTestMockTextReader();
|
var source = new DisposeTestMockTextReader();
|
||||||
LookaheadTextReader reader = new BufferingTextReader(source);
|
var reader = new BufferingTextReader(source);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
triggerAction(reader);
|
triggerAction(reader);
|
||||||
|
|
|
||||||
|
|
@ -11,14 +11,14 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
[Fact]
|
[Fact]
|
||||||
public void CtorInitializesProperties()
|
public void CtorInitializesProperties()
|
||||||
{
|
{
|
||||||
LineTrackingStringBuffer buffer = new LineTrackingStringBuffer();
|
var buffer = new LineTrackingStringBuffer();
|
||||||
Assert.Equal(0, buffer.Length);
|
Assert.Equal(0, buffer.Length);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void CharAtCorrectlyReturnsLocation()
|
public void CharAtCorrectlyReturnsLocation()
|
||||||
{
|
{
|
||||||
LineTrackingStringBuffer buffer = new LineTrackingStringBuffer();
|
var buffer = new LineTrackingStringBuffer();
|
||||||
buffer.Append("foo\rbar\nbaz\r\nbiz");
|
buffer.Append("foo\rbar\nbaz\r\nbiz");
|
||||||
LineTrackingStringBuffer.CharacterReference chr = buffer.CharAt(14);
|
LineTrackingStringBuffer.CharacterReference chr = buffer.CharAt(14);
|
||||||
Assert.Equal('i', chr.Character);
|
Assert.Equal('i', chr.Character);
|
||||||
|
|
|
||||||
|
|
@ -30,11 +30,11 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
protected void RunSourceLocationTest(string input, SourceLocation expected, Action<LookaheadTextReader> readerAction)
|
protected void RunSourceLocationTest(string input, SourceLocation expected, Action<LookaheadTextReader> readerAction)
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
LookaheadTextReader reader = CreateReader(input);
|
var reader = CreateReader(input);
|
||||||
readerAction(reader);
|
readerAction(reader);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
SourceLocation actual = reader.CurrentLocation;
|
var actual = reader.CurrentLocation;
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(expected, actual);
|
Assert.Equal(expected, actual);
|
||||||
|
|
@ -59,10 +59,10 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
protected void RunReadToEndTest()
|
protected void RunReadToEndTest()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
LookaheadTextReader reader = CreateReader("abcdefg");
|
var reader = CreateReader("abcdefg");
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
string str = reader.ReadToEnd();
|
var str = reader.ReadToEnd();
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal("abcdefg", str);
|
Assert.Equal("abcdefg", str);
|
||||||
|
|
@ -71,7 +71,7 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
protected void RunCancelBacktrackOutsideLookaheadTest()
|
protected void RunCancelBacktrackOutsideLookaheadTest()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
LookaheadTextReader reader = CreateReader("abcdefg");
|
var reader = CreateReader("abcdefg");
|
||||||
|
|
||||||
// Act and Assert
|
// Act and Assert
|
||||||
var exception = Assert.Throws<InvalidOperationException>(() => reader.CancelBacktrack());
|
var exception = Assert.Throws<InvalidOperationException>(() => reader.CancelBacktrack());
|
||||||
|
|
@ -123,7 +123,7 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
protected void RunLookaheadTest(string input, string expected, params Action<StringBuilder, LookaheadTextReader>[] readerCommands)
|
protected void RunLookaheadTest(string input, string expected, params Action<StringBuilder, LookaheadTextReader>[] readerCommands)
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
StringBuilder builder = new StringBuilder();
|
var builder = new StringBuilder();
|
||||||
using (LookaheadTextReader reader = CreateReader(input))
|
using (LookaheadTextReader reader = CreateReader(input))
|
||||||
{
|
{
|
||||||
RunAll(readerCommands, builder, reader);
|
RunAll(readerCommands, builder, reader);
|
||||||
|
|
@ -138,14 +138,14 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
protected void RunReadUntilTest(Func<LookaheadTextReader, string> readMethod, int expectedRaw, int expectedChar, int expectedLine)
|
protected void RunReadUntilTest(Func<LookaheadTextReader, string> readMethod, int expectedRaw, int expectedChar, int expectedLine)
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
LookaheadTextReader reader = CreateReader("a\r\nbcd\r\nefg");
|
var reader = CreateReader("a\r\nbcd\r\nefg");
|
||||||
|
|
||||||
reader.Read(); // Reader: "\r\nbcd\r\nefg"
|
reader.Read(); // Reader: "\r\nbcd\r\nefg"
|
||||||
reader.Read(); // Reader: "\nbcd\r\nefg"
|
reader.Read(); // Reader: "\nbcd\r\nefg"
|
||||||
reader.Read(); // Reader: "bcd\r\nefg"
|
reader.Read(); // Reader: "bcd\r\nefg"
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
string read = null;
|
string read;
|
||||||
SourceLocation actualLocation;
|
SourceLocation actualLocation;
|
||||||
using (reader.BeginLookahead())
|
using (reader.BeginLookahead())
|
||||||
{
|
{
|
||||||
|
|
@ -167,13 +167,13 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
protected void RunBufferReadTest(Func<LookaheadTextReader, char[], int, int, int> readMethod)
|
protected void RunBufferReadTest(Func<LookaheadTextReader, char[], int, int, int> readMethod)
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
LookaheadTextReader reader = CreateReader("abcdefg");
|
var reader = CreateReader("abcdefg");
|
||||||
|
|
||||||
reader.Read(); // Reader: "bcdefg"
|
reader.Read(); // Reader: "bcdefg"
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
char[] buffer = new char[4];
|
char[] buffer = new char[4];
|
||||||
int read = -1;
|
var read = -1;
|
||||||
SourceLocation actualLocation;
|
SourceLocation actualLocation;
|
||||||
using (reader.BeginLookahead())
|
using (reader.BeginLookahead())
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
public void ConstructorWithLineAndCharacterIndexSetsAssociatedProperties()
|
public void ConstructorWithLineAndCharacterIndexSetsAssociatedProperties()
|
||||||
{
|
{
|
||||||
// Act
|
// Act
|
||||||
SourceLocation loc = new SourceLocation(0, 42, 24);
|
var loc = new SourceLocation(0, 42, 24);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(0, loc.AbsoluteIndex);
|
Assert.Equal(0, loc.AbsoluteIndex);
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ConstructorWithSourceLocationSetsCurrentLocationToSpecifiedValue()
|
public void ConstructorWithSourceLocationSetsCurrentLocationToSpecifiedValue()
|
||||||
{
|
{
|
||||||
SourceLocation loc = new SourceLocation(10, 42, 4);
|
var loc = new SourceLocation(10, 42, 4);
|
||||||
Assert.Equal(loc, new SourceLocationTracker(loc).CurrentLocation);
|
Assert.Equal(loc, new SourceLocationTracker(loc).CurrentLocation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -27,7 +27,7 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
public void UpdateLocationAdvancesCorrectlyForMultiLineString()
|
public void UpdateLocationAdvancesCorrectlyForMultiLineString()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
SourceLocationTracker tracker = new SourceLocationTracker(TestStartLocation);
|
var tracker = new SourceLocationTracker(TestStartLocation);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
tracker.UpdateLocation("foo\nbar\rbaz\r\nbox");
|
tracker.UpdateLocation("foo\nbar\rbaz\r\nbox");
|
||||||
|
|
@ -42,7 +42,7 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
public void UpdateLocationAdvancesAbsoluteIndexOnNonNewlineCharacter()
|
public void UpdateLocationAdvancesAbsoluteIndexOnNonNewlineCharacter()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
SourceLocationTracker tracker = new SourceLocationTracker(TestStartLocation);
|
var tracker = new SourceLocationTracker(TestStartLocation);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
tracker.UpdateLocation('f', 'o');
|
tracker.UpdateLocation('f', 'o');
|
||||||
|
|
@ -55,7 +55,7 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
public void UpdateLocationAdvancesCharacterIndexOnNonNewlineCharacter()
|
public void UpdateLocationAdvancesCharacterIndexOnNonNewlineCharacter()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
SourceLocationTracker tracker = new SourceLocationTracker(TestStartLocation);
|
var tracker = new SourceLocationTracker(TestStartLocation);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
tracker.UpdateLocation('f', 'o');
|
tracker.UpdateLocation('f', 'o');
|
||||||
|
|
@ -68,7 +68,7 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
public void UpdateLocationDoesNotAdvanceLineIndexOnNonNewlineCharacter()
|
public void UpdateLocationDoesNotAdvanceLineIndexOnNonNewlineCharacter()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
SourceLocationTracker tracker = new SourceLocationTracker(TestStartLocation);
|
var tracker = new SourceLocationTracker(TestStartLocation);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
tracker.UpdateLocation('f', 'o');
|
tracker.UpdateLocation('f', 'o');
|
||||||
|
|
@ -81,7 +81,7 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
public void UpdateLocationAdvancesLineIndexOnSlashN()
|
public void UpdateLocationAdvancesLineIndexOnSlashN()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
SourceLocationTracker tracker = new SourceLocationTracker(TestStartLocation);
|
var tracker = new SourceLocationTracker(TestStartLocation);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
tracker.UpdateLocation('\n', 'o');
|
tracker.UpdateLocation('\n', 'o');
|
||||||
|
|
@ -94,7 +94,7 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
public void UpdateLocationAdvancesAbsoluteIndexOnSlashN()
|
public void UpdateLocationAdvancesAbsoluteIndexOnSlashN()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
SourceLocationTracker tracker = new SourceLocationTracker(TestStartLocation);
|
var tracker = new SourceLocationTracker(TestStartLocation);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
tracker.UpdateLocation('\n', 'o');
|
tracker.UpdateLocation('\n', 'o');
|
||||||
|
|
@ -107,7 +107,7 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
public void UpdateLocationResetsCharacterIndexOnSlashN()
|
public void UpdateLocationResetsCharacterIndexOnSlashN()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
SourceLocationTracker tracker = new SourceLocationTracker(TestStartLocation);
|
var tracker = new SourceLocationTracker(TestStartLocation);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
tracker.UpdateLocation('\n', 'o');
|
tracker.UpdateLocation('\n', 'o');
|
||||||
|
|
@ -120,7 +120,7 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
public void UpdateLocationAdvancesLineIndexOnSlashRFollowedByNonNewlineCharacter()
|
public void UpdateLocationAdvancesLineIndexOnSlashRFollowedByNonNewlineCharacter()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
SourceLocationTracker tracker = new SourceLocationTracker(TestStartLocation);
|
var tracker = new SourceLocationTracker(TestStartLocation);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
tracker.UpdateLocation('\r', 'o');
|
tracker.UpdateLocation('\r', 'o');
|
||||||
|
|
@ -133,7 +133,7 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
public void UpdateLocationAdvancesAbsoluteIndexOnSlashRFollowedByNonNewlineCharacter()
|
public void UpdateLocationAdvancesAbsoluteIndexOnSlashRFollowedByNonNewlineCharacter()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
SourceLocationTracker tracker = new SourceLocationTracker(TestStartLocation);
|
var tracker = new SourceLocationTracker(TestStartLocation);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
tracker.UpdateLocation('\r', 'o');
|
tracker.UpdateLocation('\r', 'o');
|
||||||
|
|
@ -146,7 +146,7 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
public void UpdateLocationResetsCharacterIndexOnSlashRFollowedByNonNewlineCharacter()
|
public void UpdateLocationResetsCharacterIndexOnSlashRFollowedByNonNewlineCharacter()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
SourceLocationTracker tracker = new SourceLocationTracker(TestStartLocation);
|
var tracker = new SourceLocationTracker(TestStartLocation);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
tracker.UpdateLocation('\r', 'o');
|
tracker.UpdateLocation('\r', 'o');
|
||||||
|
|
@ -159,7 +159,7 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
public void UpdateLocationDoesNotAdvanceLineIndexOnSlashRFollowedBySlashN()
|
public void UpdateLocationDoesNotAdvanceLineIndexOnSlashRFollowedBySlashN()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
SourceLocationTracker tracker = new SourceLocationTracker(TestStartLocation);
|
var tracker = new SourceLocationTracker(TestStartLocation);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
tracker.UpdateLocation('\r', '\n');
|
tracker.UpdateLocation('\r', '\n');
|
||||||
|
|
@ -172,7 +172,7 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
public void UpdateLocationAdvancesAbsoluteIndexOnSlashRFollowedBySlashN()
|
public void UpdateLocationAdvancesAbsoluteIndexOnSlashRFollowedBySlashN()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
SourceLocationTracker tracker = new SourceLocationTracker(TestStartLocation);
|
var tracker = new SourceLocationTracker(TestStartLocation);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
tracker.UpdateLocation('\r', '\n');
|
tracker.UpdateLocation('\r', '\n');
|
||||||
|
|
@ -185,7 +185,7 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
public void UpdateLocationAdvancesCharacterIndexOnSlashRFollowedBySlashN()
|
public void UpdateLocationAdvancesCharacterIndexOnSlashRFollowedBySlashN()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
SourceLocationTracker tracker = new SourceLocationTracker(TestStartLocation);
|
var tracker = new SourceLocationTracker(TestStartLocation);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
tracker.UpdateLocation('\r', '\n');
|
tracker.UpdateLocation('\r', '\n');
|
||||||
|
|
|
||||||
|
|
@ -221,8 +221,8 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
private static void RunDisposeTest(Action<LookaheadTextReader> triggerAction)
|
private static void RunDisposeTest(Action<LookaheadTextReader> triggerAction)
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
StringTextBuffer source = new StringTextBuffer("abcdefg");
|
var source = new StringTextBuffer("abcdefg");
|
||||||
LookaheadTextReader reader = new TextBufferReader(source);
|
var reader = new TextBufferReader(source);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
triggerAction(reader);
|
triggerAction(reader);
|
||||||
|
|
|
||||||
|
|
@ -62,9 +62,9 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
public void ConstructorInitializesProperties()
|
public void ConstructorInitializesProperties()
|
||||||
{
|
{
|
||||||
// Act
|
// Act
|
||||||
ITextBuffer oldBuffer = new Mock<ITextBuffer>().Object;
|
var oldBuffer = new Mock<ITextBuffer>().Object;
|
||||||
ITextBuffer newBuffer = new Mock<ITextBuffer>().Object;
|
var newBuffer = new Mock<ITextBuffer>().Object;
|
||||||
TextChange change = new TextChange(42, 24, oldBuffer, 1337, newBuffer);
|
var change = new TextChange(42, 24, oldBuffer, 1337, newBuffer);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(42, change.OldPosition);
|
Assert.Equal(42, change.OldPosition);
|
||||||
|
|
@ -78,9 +78,9 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
public void TestIsDelete()
|
public void TestIsDelete()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
ITextBuffer oldBuffer = new Mock<ITextBuffer>().Object;
|
var oldBuffer = new Mock<ITextBuffer>().Object;
|
||||||
ITextBuffer newBuffer = new Mock<ITextBuffer>().Object;
|
var newBuffer = new Mock<ITextBuffer>().Object;
|
||||||
TextChange change = new TextChange(0, 1, oldBuffer, 0, newBuffer);
|
var change = new TextChange(0, 1, oldBuffer, 0, newBuffer);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.True(change.IsDelete);
|
Assert.True(change.IsDelete);
|
||||||
|
|
@ -90,9 +90,9 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
public void TestDeleteCreatesTheRightSizeChange()
|
public void TestDeleteCreatesTheRightSizeChange()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
ITextBuffer oldBuffer = new Mock<ITextBuffer>().Object;
|
var oldBuffer = new Mock<ITextBuffer>().Object;
|
||||||
ITextBuffer newBuffer = new Mock<ITextBuffer>().Object;
|
var newBuffer = new Mock<ITextBuffer>().Object;
|
||||||
TextChange change = new TextChange(0, 1, oldBuffer, 0, newBuffer);
|
var change = new TextChange(0, 1, oldBuffer, 0, newBuffer);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(0, change.NewText.Length);
|
Assert.Equal(0, change.NewText.Length);
|
||||||
|
|
@ -103,9 +103,9 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
public void TestIsInsert()
|
public void TestIsInsert()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
ITextBuffer oldBuffer = new Mock<ITextBuffer>().Object;
|
var oldBuffer = new Mock<ITextBuffer>().Object;
|
||||||
ITextBuffer newBuffer = new Mock<ITextBuffer>().Object;
|
var newBuffer = new Mock<ITextBuffer>().Object;
|
||||||
TextChange change = new TextChange(0, 0, oldBuffer, 35, newBuffer);
|
var change = new TextChange(0, 0, oldBuffer, 35, newBuffer);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.True(change.IsInsert);
|
Assert.True(change.IsInsert);
|
||||||
|
|
@ -115,9 +115,9 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
public void TestInsertCreateTheRightSizeChange()
|
public void TestInsertCreateTheRightSizeChange()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
ITextBuffer oldBuffer = new Mock<ITextBuffer>().Object;
|
var oldBuffer = new Mock<ITextBuffer>().Object;
|
||||||
ITextBuffer newBuffer = new Mock<ITextBuffer>().Object;
|
var newBuffer = new Mock<ITextBuffer>().Object;
|
||||||
TextChange change = new TextChange(0, 0, oldBuffer, 1, newBuffer);
|
var change = new TextChange(0, 0, oldBuffer, 1, newBuffer);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(1, change.NewText.Length);
|
Assert.Equal(1, change.NewText.Length);
|
||||||
|
|
@ -128,9 +128,9 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
public void TestIsReplace()
|
public void TestIsReplace()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
ITextBuffer oldBuffer = new Mock<ITextBuffer>().Object;
|
var oldBuffer = new Mock<ITextBuffer>().Object;
|
||||||
ITextBuffer newBuffer = new Mock<ITextBuffer>().Object;
|
var newBuffer = new Mock<ITextBuffer>().Object;
|
||||||
TextChange change = new TextChange(0, 5, oldBuffer, 10, newBuffer);
|
var change = new TextChange(0, 5, oldBuffer, 10, newBuffer);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.True(change.IsReplace);
|
Assert.True(change.IsReplace);
|
||||||
|
|
@ -140,9 +140,9 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
public void ReplaceCreatesTheRightSizeChange()
|
public void ReplaceCreatesTheRightSizeChange()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
ITextBuffer oldBuffer = new Mock<ITextBuffer>().Object;
|
var oldBuffer = new Mock<ITextBuffer>().Object;
|
||||||
ITextBuffer newBuffer = new Mock<ITextBuffer>().Object;
|
var newBuffer = new Mock<ITextBuffer>().Object;
|
||||||
TextChange change = new TextChange(0, 5, oldBuffer, 10, newBuffer);
|
var change = new TextChange(0, 5, oldBuffer, 10, newBuffer);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(10, change.NewText.Length);
|
Assert.Equal(10, change.NewText.Length);
|
||||||
|
|
@ -153,9 +153,9 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
public void ReplaceCreatesTheRightSizeChange1()
|
public void ReplaceCreatesTheRightSizeChange1()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
ITextBuffer oldBuffer = new Mock<ITextBuffer>().Object;
|
var oldBuffer = new Mock<ITextBuffer>().Object;
|
||||||
ITextBuffer newBuffer = new Mock<ITextBuffer>().Object;
|
var newBuffer = new Mock<ITextBuffer>().Object;
|
||||||
TextChange change = new TextChange(0, 5, oldBuffer, 1, newBuffer);
|
var change = new TextChange(0, 5, oldBuffer, 1, newBuffer);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(1, change.NewText.Length);
|
Assert.Equal(1, change.NewText.Length);
|
||||||
|
|
@ -172,7 +172,7 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
var textChange = new TextChange(2, 1, oldBuffer, 1, newBuffer);
|
var textChange = new TextChange(2, 1, oldBuffer, 1, newBuffer);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
string text = textChange.OldText;
|
var text = textChange.OldText;
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal("x", text);
|
Assert.Equal("x", text);
|
||||||
|
|
@ -187,7 +187,7 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
var textChange = new TextChange(2, 2, oldBuffer, 1, newBuffer);
|
var textChange = new TextChange(2, 2, oldBuffer, 1, newBuffer);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
string text = textChange.OldText;
|
var text = textChange.OldText;
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal("xt", text);
|
Assert.Equal("xt", text);
|
||||||
|
|
@ -202,8 +202,8 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
var textChange = new TextChange(0, 0, oldBuffer, 3, newBuffer);
|
var textChange = new TextChange(0, 0, oldBuffer, 3, newBuffer);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
string text = textChange.NewText;
|
var text = textChange.NewText;
|
||||||
string oldText = textChange.OldText;
|
var oldText = textChange.OldText;
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal("tes", text);
|
Assert.Equal("tes", text);
|
||||||
|
|
@ -219,7 +219,7 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
var textChange = new TextChange(1, 1, oldBuffer, 0, newBuffer);
|
var textChange = new TextChange(1, 1, oldBuffer, 0, newBuffer);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
string text = textChange.NewText;
|
var text = textChange.NewText;
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(String.Empty, text);
|
Assert.Equal(String.Empty, text);
|
||||||
|
|
@ -234,8 +234,8 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
var textChange = new TextChange(2, 2, oldBuffer, 1, newBuffer);
|
var textChange = new TextChange(2, 2, oldBuffer, 1, newBuffer);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
string newText = textChange.NewText;
|
var newText = textChange.NewText;
|
||||||
string oldText = textChange.OldText;
|
var oldText = textChange.OldText;
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal("s", newText);
|
Assert.Equal("s", newText);
|
||||||
|
|
@ -251,7 +251,7 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
var textChange = new TextChange(0, 0, oldBuffer, 3, newBuffer);
|
var textChange = new TextChange(0, 0, oldBuffer, 3, newBuffer);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
string text = textChange.ApplyChange("abcd", 0);
|
var text = textChange.ApplyChange("abcd", 0);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal("tesabcd", text);
|
Assert.Equal("tesabcd", text);
|
||||||
|
|
@ -266,7 +266,7 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
var textChange = new TextChange(1, 1, oldBuffer, 0, newBuffer);
|
var textChange = new TextChange(1, 1, oldBuffer, 0, newBuffer);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
string text = textChange.ApplyChange("abcdefg", 1);
|
var text = textChange.ApplyChange("abcdefg", 1);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal("bcdefg", text);
|
Assert.Equal("bcdefg", text);
|
||||||
|
|
@ -281,7 +281,7 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
var textChange = new TextChange(1, 1, oldBuffer, 2, newBuffer);
|
var textChange = new TextChange(1, 1, oldBuffer, 2, newBuffer);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
string text = textChange.ApplyChange("abcdefg", 1);
|
var text = textChange.ApplyChange("abcdefg", 1);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal("bcbcdefg", text);
|
Assert.Equal("bcbcdefg", text);
|
||||||
|
|
@ -296,7 +296,7 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
var original = new TextChange(0, 4, oldBuffer, 5, newBuffer);
|
var original = new TextChange(0, 4, oldBuffer, 5, newBuffer);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
TextChange normalized = original.Normalize();
|
var normalized = original.Normalize();
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(new TextChange(4, 0, oldBuffer, 1, newBuffer), normalized);
|
Assert.Equal(new TextChange(4, 0, oldBuffer, 1, newBuffer), normalized);
|
||||||
|
|
@ -311,7 +311,7 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
var original = new TextChange(0, 5, oldBuffer, 9, newBuffer);
|
var original = new TextChange(0, 5, oldBuffer, 9, newBuffer);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
TextChange normalized = original.Normalize();
|
var normalized = original.Normalize();
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(original, normalized);
|
Assert.Equal(original, normalized);
|
||||||
|
|
@ -326,7 +326,7 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
var original = new TextChange(0, 8, oldBuffer, 1, newBuffer);
|
var original = new TextChange(0, 8, oldBuffer, 1, newBuffer);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
TextChange normalized = original.Normalize();
|
var normalized = original.Normalize();
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(original, normalized);
|
Assert.Equal(original, normalized);
|
||||||
|
|
|
||||||
|
|
@ -166,10 +166,10 @@ namespace Microsoft.AspNet.Razor.Test.Text
|
||||||
private static void RunReaderTest(string testString, string expectedOutput, int expectedPeek, Func<TextReader, string> action)
|
private static void RunReaderTest(string testString, string expectedOutput, int expectedPeek, Func<TextReader, string> action)
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
StringReader reader = new StringReader(testString);
|
var reader = new StringReader(testString);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
string read = action(reader);
|
var read = action(reader);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(expectedOutput, read);
|
Assert.Equal(expectedOutput, read);
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ namespace Microsoft.AspNet.Razor.Test.Tokenizer
|
||||||
[Fact]
|
[Fact]
|
||||||
public void After_Cancelling_Lookahead_Tokenizer_Returns_Same_Tokens_As_It_Did_Before_Lookahead()
|
public void After_Cancelling_Lookahead_Tokenizer_Returns_Same_Tokens_As_It_Did_Before_Lookahead()
|
||||||
{
|
{
|
||||||
HtmlTokenizer tokenizer = new HtmlTokenizer(new SeekableTextReader(new StringReader("<foo>")));
|
var tokenizer = new HtmlTokenizer(new SeekableTextReader(new StringReader("<foo>")));
|
||||||
using (tokenizer.Source.BeginLookahead())
|
using (tokenizer.Source.BeginLookahead())
|
||||||
{
|
{
|
||||||
Assert.Equal(new HtmlSymbol(0, 0, 0, "<", HtmlSymbolType.OpenAngle), tokenizer.NextSymbol());
|
Assert.Equal(new HtmlSymbol(0, 0, 0, "<", HtmlSymbolType.OpenAngle), tokenizer.NextSymbol());
|
||||||
|
|
@ -29,7 +29,7 @@ namespace Microsoft.AspNet.Razor.Test.Tokenizer
|
||||||
[Fact]
|
[Fact]
|
||||||
public void After_Accepting_Lookahead_Tokenizer_Returns_Next_Token()
|
public void After_Accepting_Lookahead_Tokenizer_Returns_Next_Token()
|
||||||
{
|
{
|
||||||
HtmlTokenizer tokenizer = new HtmlTokenizer(new SeekableTextReader(new StringReader("<foo>")));
|
var tokenizer = new HtmlTokenizer(new SeekableTextReader(new StringReader("<foo>")));
|
||||||
using (LookaheadToken lookahead = tokenizer.Source.BeginLookahead())
|
using (LookaheadToken lookahead = tokenizer.Source.BeginLookahead())
|
||||||
{
|
{
|
||||||
Assert.Equal(new HtmlSymbol(0, 0, 0, "<", HtmlSymbolType.OpenAngle), tokenizer.NextSymbol());
|
Assert.Equal(new HtmlSymbol(0, 0, 0, "<", HtmlSymbolType.OpenAngle), tokenizer.NextSymbol());
|
||||||
|
|
|
||||||
|
|
@ -21,14 +21,14 @@ namespace Microsoft.AspNet.Razor.Test.Tokenizer
|
||||||
protected void TestTokenizer(string input, params TSymbol[] expectedSymbols)
|
protected void TestTokenizer(string input, params TSymbol[] expectedSymbols)
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
bool success = true;
|
var success = true;
|
||||||
StringBuilder output = new StringBuilder();
|
var output = new StringBuilder();
|
||||||
using (StringReader reader = new StringReader(input))
|
using (StringReader reader = new StringReader(input))
|
||||||
{
|
{
|
||||||
using (SeekableTextReader source = new SeekableTextReader(reader))
|
using (SeekableTextReader source = new SeekableTextReader(reader))
|
||||||
{
|
{
|
||||||
Tokenizer<TSymbol, TSymbolType> tokenizer = CreateTokenizer(source);
|
Tokenizer<TSymbol, TSymbolType> tokenizer = CreateTokenizer(source);
|
||||||
int counter = 0;
|
var counter = 0;
|
||||||
TSymbol current = null;
|
TSymbol current = null;
|
||||||
while ((current = tokenizer.NextSymbol()) != null)
|
while ((current = tokenizer.NextSymbol()) != null)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -20,8 +20,8 @@ namespace Microsoft.AspNet.Razor.Test.Utils
|
||||||
public void ActionIsExecutedOnDispose()
|
public void ActionIsExecutedOnDispose()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
bool called = false;
|
var called = false;
|
||||||
DisposableAction action = new DisposableAction(() => { called = true; });
|
var action = new DisposableAction(() => { called = true; });
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
action.Dispose();
|
action.Dispose();
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ namespace Microsoft.AspNet.Razor.Test
|
||||||
|
|
||||||
public Stream OpenRead()
|
public Stream OpenRead()
|
||||||
{
|
{
|
||||||
Stream strm = Assembly.GetManifestResourceStream(ResourceName);
|
var strm = Assembly.GetManifestResourceStream(ResourceName);
|
||||||
if (strm == null)
|
if (strm == null)
|
||||||
{
|
{
|
||||||
Assert.True(false, string.Format("Manifest resource: {0} not found", ResourceName));
|
Assert.True(false, string.Format("Manifest resource: {0} not found", ResourceName));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue