public string AddTest_normal_some() { var chain = new MethodChain <string>(); bool result = false; var list = chain.GetProcessHolder(); list.Add((str) => { if (str != "test1") { return(false); } ; return(true); }); list.Add((str) => { if (str != "test2") { return(false); } ; result = true; return(true); }); try { chain.Invoke("test2"); } catch (System.Exception e) { return(Fail("追加した関数が正常に呼ばれていません" + e.ToString())); } return(result ? Pass() : Fail()); }
internal MethodChain Add(M m) { Contract.Assume(!this.childrenM.ContainsKey(m)); var chain = new MethodChain(m); this.childrenM.Add(m, chain); return(chain); }
public string DefaultErrorTest() { var chain = new MethodChain <string>(); try { chain.Invoke("test"); }catch (System.Exception) { return(Pass()); } return(Fail("返されるべきエラー処理が失敗しています")); }
public string DefaultTest() { var chain = new MethodChain <string>(); bool result = false; chain.SetDefault((str) => { result = true; return(true); }); try { chain.Invoke("test"); }catch (System.Exception e) { return(Fail("デフォルト動作の上書きに失敗しています" + e.ToString())); } return(result ? Pass() : Fail("コールバックが正常に動作していません")); }
public string AddTest_error() { var chain = new MethodChain <string>(); var list = chain.GetProcessHolder(); list.Add((str) => { if (str != "tt") { return(false); } ; return(true); }); try { chain.Invoke("test"); } catch (System.Exception) { return(Pass()); } return(Fail("追加した関数が正常に呼ばれていません")); }
private static void AnalyzeExpression(SyntaxNodeAnalysisContext context) { var expression = (ExpressionSyntax)context.Node; if (expression.IsParentKind( SyntaxKind.ConditionalAccessExpression, SyntaxKind.SimpleMemberAccessExpression, SyntaxKind.ElementAccessExpression, SyntaxKind.MemberBindingExpression, SyntaxKind.InvocationExpression)) { return; } MethodChain.Enumerator en = new MethodChain(expression).GetEnumerator(); if (!en.MoveNext()) { return; } TextLineCollection lines = null; int startLine = -1; IndentationAnalysis indentationAnalysis = default; do { context.CancellationToken.ThrowIfCancellationRequested(); SyntaxKind kind = en.Current.Kind(); if (kind == SyntaxKind.SimpleMemberAccessExpression) { var memberAccess = (MemberAccessExpressionSyntax)en.Current; if (AnalyzeToken(memberAccess.OperatorToken)) { return; } } else if (en.Current.Kind() == SyntaxKind.MemberBindingExpression) { var memberBinding = (MemberBindingExpressionSyntax)en.Current; if (AnalyzeToken(memberBinding.OperatorToken)) { return; } } } while (en.MoveNext()); bool AnalyzeToken(SyntaxToken token) { SyntaxTriviaList.Reversed.Enumerator en = token.LeadingTrivia.Reverse().GetEnumerator(); if (!en.MoveNext()) { if (lines == null) { lines = expression.SyntaxTree.GetText().Lines; startLine = lines.IndexOf(expression.SpanStart); } int endLine = lines.IndexOf(token.SpanStart); if (startLine != endLine) { ReportDiagnostic(); } return(true); } switch (en.Current.Kind()) { case SyntaxKind.WhitespaceTrivia: { if (indentationAnalysis.IsDefault) { indentationAnalysis = AnalyzeIndentation(expression); } if (en.Current.Span.Length != indentationAnalysis.IncreasedIndentationLength) { if (!en.MoveNext() || en.Current.IsEndOfLineTrivia()) { if (expression.FindTrivia(token.FullSpan.Start - 1).IsEndOfLineTrivia()) { ReportDiagnostic(); return(true); } } break; } break; } case SyntaxKind.EndOfLineTrivia: { if (expression.FindTrivia(token.FullSpan.Start - 1).IsEndOfLineTrivia()) { ReportDiagnostic(); return(true); } break; } } return(false); } void ReportDiagnostic() { DiagnosticHelpers.ReportDiagnostic( context, DiagnosticDescriptors.FixFormattingOfCallChain, expression); } }