You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
262 lines
6.7 KiB
262 lines
6.7 KiB
// <file> |
|
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright> |
|
// <license see="prj:///doc/license.txt">GNU General Public License</license> |
|
// <owner name="Daniel Grunwald" email="daniel@danielgrunwald.de"/> |
|
// <version>$Revision$</version> |
|
// </file> |
|
|
|
using System; |
|
using NUnit.Framework; |
|
|
|
namespace NRefactoryToBooConverter.Tests |
|
{ |
|
[TestFixture] |
|
public class StatementTests : TestHelper |
|
{ |
|
[Test] |
|
public void IfStatement() |
|
{ |
|
TestStatement("if (a) B();", "if a:\n\tB()"); |
|
} |
|
|
|
[Test] |
|
public void IfElseStatement() |
|
{ |
|
TestStatement("if (a) B(); else C();", "if a:\n\tB()\nelse:\n\tC()"); |
|
} |
|
|
|
[Test] |
|
public void ForLoop() |
|
{ |
|
TestStatement("for (int i = 0; i < 10; i++) {}", "for i in range(0, 10):\n\tpass"); |
|
} |
|
|
|
[Test] |
|
public void ForLoopWithoutBody() |
|
{ |
|
TestStatement("for (int i = 0; i < 10; i++);", "for i in range(0, 10):\n\tpass"); |
|
} |
|
|
|
[Test] |
|
public void ForLoopWithStep() |
|
{ |
|
TestStatement("for (int i = 0; i <= 10; i += 2);", "for i in range(0, 11, 2):\n\tpass"); |
|
} |
|
|
|
[Test] |
|
public void ForLoopDecrementing() |
|
{ |
|
TestStatement("for (int i = 10; i > 0; --i);", "for i in range(10, 0, -1):\n\tpass"); |
|
} |
|
|
|
[Test] |
|
public void ForLoopDecrementingWithStep() |
|
{ |
|
TestStatement("for (int i = 10; i >= 0; i -= 2);", "for i in range(10, -1, -2):\n\tpass"); |
|
} |
|
|
|
[Test] |
|
public void ForLoop2() |
|
{ |
|
TestStatement("for (i = 0; i < 10; i++) {}", "i = 0\ngoto ??1\nwhile true:\n\ti += 1\n\t:??1\n\tbreak unless (i <= 9)"); |
|
} |
|
|
|
[Test] |
|
public void ForLoopWithStep2() |
|
{ |
|
TestStatement("for (i = 0; i <= 10; i += 2);", "i = 0\ngoto ??1\nwhile true:\n\ti += 2\n\t:??1\n\tbreak unless (i <= 10)"); |
|
} |
|
|
|
[Test] |
|
public void ForLoopDecrementing2() |
|
{ |
|
TestStatement("for (i = 10; i > 0; --i);", "i = 10\ngoto ??1\nwhile true:\n\ti += -1\n\t:??1\n\tbreak unless (i >= 1)"); |
|
} |
|
|
|
[Test] |
|
public void AdvancedForLoop() |
|
{ |
|
TestStatement("for (f = Open(); (next = Peek()) != -1; Process(next));", |
|
"f = Open()\ngoto ??1\nwhile true:\n\tProcess(next)\n\t:??1\n\tbreak unless ((next = Peek()) != (-1))"); |
|
} |
|
|
|
[Test] |
|
public void WhileLoop() |
|
{ |
|
TestStatement("while ((next = Peek()) != -1) { Process(next); }", |
|
"while ((next = Peek()) != (-1)):\n\tProcess(next)"); |
|
} |
|
|
|
[Test] |
|
public void DoLoop() |
|
{ |
|
TestStatement("do { ok = Next(); } while (ok);", |
|
"while true:\n\tok = Next()\n\tbreak unless ok"); |
|
} |
|
|
|
[Test] |
|
public void ForeachLoop() |
|
{ |
|
TestStatement("foreach (string s in list) {}", |
|
"for s as System.String in list:\n\tpass"); |
|
} |
|
|
|
[Test] |
|
public void Using() |
|
{ |
|
TestStatement("using (StringReader r = file.Open()) { r.ReadLine(); }", |
|
"using (r = file.Open()):\n\tr.ReadLine()"); |
|
} |
|
|
|
[Test] |
|
public void Return() |
|
{ |
|
TestStatement("return val;", "return val"); |
|
} |
|
|
|
[Test] |
|
public void Throw() |
|
{ |
|
TestStatement("throw cachedException;", "raise cachedException"); |
|
} |
|
|
|
[Test] |
|
public void TryFinally() |
|
{ |
|
TestStatement("try { Action(); } finally { CleanUp(); }", |
|
"try:\n\tAction()\nensure:\n\tCleanUp()"); |
|
} |
|
|
|
[Test] |
|
public void TryCatch() |
|
{ |
|
TestStatement("try { Action(); } catch { DisplayError(); }", |
|
"try:\n\tAction()\nexcept:\n\tDisplayError()"); |
|
} |
|
|
|
[Test] |
|
public void TryCatchWithTypes() |
|
{ |
|
TestStatement("try { Action(); }" + |
|
"catch(FirstException ex) { DisplayError(ex); }" + |
|
"catch(SecondException ex) { DisplayError(ex); }", |
|
"try:\n\tAction()\n" + |
|
"except ex as FirstException:\n\tDisplayError(ex)\n" + |
|
"except ex as SecondException:\n\tDisplayError(ex)"); |
|
} |
|
|
|
[Test] |
|
public void Switch() |
|
{ |
|
TestStatement("switch (var) { case 1: A1(); break; default: A3(); break; case 2: case 3: A2(); break; }", |
|
"??1 = var\n" + |
|
"if (??1 == 1):\n" + |
|
"\tA1()\n" + |
|
"else:\n" + |
|
"\tif ((??1 == 2) or (??1 == 3)):\n" + |
|
"\t\tA2()\n" + |
|
"\telse:\n" + |
|
"\t\tA3()"); |
|
} |
|
|
|
[Test] |
|
public void SwitchWithDefaultAtStart() |
|
{ |
|
TestStatement("switch (var) { default: A3(); break; case 1: A1(); break; case 2: case 3: A2(); break; }", |
|
"??1 = var\n" + |
|
"if (??1 == 1):\n" + |
|
"\tA1()\n" + |
|
"else:\n" + |
|
"\tif ((??1 == 2) or (??1 == 3)):\n" + |
|
"\t\tA2()\n" + |
|
"\telse:\n" + |
|
"\t\tA3()"); |
|
} |
|
|
|
[Test] |
|
public void SwitchWithOneCase() |
|
{ |
|
TestStatement("switch (var) { case 1: A1(); break; }", |
|
"??1 = var\n" + |
|
"if (??1 == 1):\n" + |
|
"\tA1()"); |
|
} |
|
|
|
[Test] |
|
public void SwitchWithOneCaseWithMultipleLabels() |
|
{ |
|
TestStatement("switch (var) { case 1: case 2: A1(); break; }", |
|
"??1 = var\n" + |
|
"if ((??1 == 1) or (??1 == 2)):\n" + |
|
"\tA1()"); |
|
} |
|
|
|
[Test] |
|
public void SwitchWithOnlyDefaultSection() |
|
{ |
|
TestStatement("switch (var) { default: A1(); break; }", |
|
"??1 = var\n" + |
|
"A1()"); |
|
} |
|
|
|
[Test] |
|
public void SwitchWithOnlyDefaultSectionAndEarlyBreak() |
|
{ |
|
TestStatement("switch (var) { default: if (a) break; A1(); break; }", |
|
"??1 = var\n" + |
|
"if a:\n" + |
|
"\tgoto ??1_end\n" + |
|
"A1()\n" + |
|
":??1_end"); |
|
} |
|
|
|
[Test] |
|
public void SwitchWithEarlyBreak() |
|
{ |
|
TestStatement("switch (var) { case 1: if (a) break; B(); break; }", |
|
"??1 = var\n" + |
|
"if (??1 == 1):\n" + |
|
"\tif a:\n" + |
|
"\t\tgoto ??1_end\n" + |
|
"\tB()\n" + |
|
":??1_end"); |
|
} |
|
|
|
[Test] |
|
public void SwitchWithGotoCase() |
|
{ |
|
TestStatement("switch (var) { case 1: B(); goto default; default: A(); break; }", |
|
"??1 = var\n" + |
|
"if (??1 == 1):\n" + |
|
"\tB()\n" + |
|
"\tgoto ??1_default\n" + |
|
"else:\n" + |
|
"\t:??1_default\n" + |
|
"\tA()"); |
|
} |
|
|
|
[Test] |
|
public void VBArrayDecl() |
|
{ |
|
TestStatementVB("Dim A(10) As Integer", "A as (System.Int32) = array(System.Int32, 11)"); |
|
} |
|
|
|
[Test] |
|
public void RedimTest() |
|
{ |
|
TestStatementVB("Dim A As Integer()\nRedim A(5)", "A as (System.Int32)\nA = array(System.Int32, 6)"); |
|
} |
|
|
|
[Test] |
|
public void VBMethodCall() |
|
{ |
|
TestStatementVB("B = A(5)", "B = A(5)"); |
|
} |
|
|
|
[Test] |
|
public void VBIndexerCall() |
|
{ |
|
TestStatementVB("Dim A As Integer()\nB = A(5)", "A as (System.Int32)\nB = A[5]"); |
|
} |
|
} |
|
}
|
|
|