diff --git a/Tests/CompletionTests.cs b/Tests/CompletionTests.cs index f4d697d9..987e9460 100644 --- a/Tests/CompletionTests.cs +++ b/Tests/CompletionTests.cs @@ -107,6 +107,37 @@ void main() { Assert.That(CodeCompletion.GenerateCompletionData (ed, g, 'a', true), Is.True); } + [Test] + public void ForeachIteratorVarArg() + { + var code = @"module A; +template T(){ struct S { int a, b, c; } +static void print(Templ=S)(Templ[] p_args...) { +int S; +foreach(cur; p_args) + { + cur; +}}} +"; + var ed = GenEditorData(6, 5, code); + var S = ResolutionTests.N (ed.SyntaxTree, "T.S"); + var print = ResolutionTests.N (ed.SyntaxTree, "T.print"); + var cur = (ResolutionTests.S (print, 1, 0, 0) as IExpressionContainingStatement).SubExpressions[0]; + + var ctxt = ResolutionTests.CreateDefCtxt (ed.ParseCache, print, cur.EndLocation); + AbstractType t; + MemberSymbol ms; + + t = ExpressionTypeEvaluation.EvaluateType (cur, ctxt); + Assert.That (t, Is.TypeOf(typeof(MemberSymbol))); + ms = (MemberSymbol)t; + + Assert.That (ms.Base, Is.TypeOf(typeof(TemplateParameterSymbol))); + t = (ms.Base as TemplateParameterSymbol).Base; + + Assert.That (t, Is.TypeOf(typeof(StructType))); + } + [Test] public void ForeachIteratorCompletion() {