From d363661a7e65e2bd83d6da99230d27cb593436ed Mon Sep 17 00:00:00 2001
From: Sean Dague
Date: Thu, 4 Sep 2008 22:11:13 +0000
Subject: complete rationalization of unit tests that we currently run
---
.../ScriptEngine/Shared/CodeTools/CompilerTest.cs | 153 +++++++++++++++++++++
1 file changed, 153 insertions(+)
create mode 100644 OpenSim/Tests/Region/ScriptEngine/Shared/CodeTools/CompilerTest.cs
(limited to 'OpenSim/Tests/Region/ScriptEngine/Shared/CodeTools/CompilerTest.cs')
diff --git a/OpenSim/Tests/Region/ScriptEngine/Shared/CodeTools/CompilerTest.cs b/OpenSim/Tests/Region/ScriptEngine/Shared/CodeTools/CompilerTest.cs
new file mode 100644
index 0000000..7725d8d
--- /dev/null
+++ b/OpenSim/Tests/Region/ScriptEngine/Shared/CodeTools/CompilerTest.cs
@@ -0,0 +1,153 @@
+/*
+ * Copyright (c) Contributors, http://opensimulator.org/
+ * See CONTRIBUTORS.TXT for a full list of copyright holders.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the OpenSim Project nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System.IO;
+using System.CodeDom.Compiler;
+using System.Collections.Generic;
+using Microsoft.CSharp;
+using NUnit.Framework;
+using OpenSim.Region.ScriptEngine.Shared.CodeTools;
+
+namespace OpenSim.Region.ScriptEngine.Shared.CodeTools.Tests
+{
+ ///
+ /// Tests the LSL compiler. Among other things, test that error messages
+ /// generated by the C# compiler can be mapped to prper lines/columns in
+ /// the LSL source.
+ ///
+ [TestFixture]
+ public class CompilerTest
+ {
+ private string m_testDir;
+ private CSharpCodeProvider m_CSCodeProvider;
+ private CompilerParameters m_compilerParameters;
+ private CompilerResults m_compilerResults;
+
+ ///
+ /// Creates a temporary directory where build artifacts are stored.
+ ///
+ [TestFixtureSetUp]
+ public void Init()
+ {
+ m_testDir = Path.Combine(Path.GetTempPath(), "opensim_compilerTest_" + Path.GetRandomFileName());
+
+ if (!Directory.Exists(m_testDir))
+ {
+ // Create the temporary directory for housing build artifacts.
+ Directory.CreateDirectory(m_testDir);
+ }
+
+ // Create a CSCodeProvider and CompilerParameters.
+ m_CSCodeProvider = new CSharpCodeProvider();
+ m_compilerParameters = new CompilerParameters();
+
+ string rootPath = Path.Combine(Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory), "bin");
+ m_compilerParameters.ReferencedAssemblies.Add(Path.Combine(rootPath, "OpenSim.Region.ScriptEngine.Shared.dll"));
+ m_compilerParameters.ReferencedAssemblies.Add(Path.Combine(rootPath, "OpenSim.Region.ScriptEngine.Shared.Api.Runtime.dll"));
+ m_compilerParameters.GenerateExecutable = false;
+ }
+
+ ///
+ /// Removes the temporary build directory and any build artifacts
+ /// inside it.
+ ///
+ [TestFixtureTearDown]
+ public void CleanUp()
+ {
+ if (Directory.Exists(m_testDir))
+ {
+ // Blow away the temporary directory with artifacts.
+ Directory.Delete(m_testDir, true);
+ }
+ }
+
+ ///
+ /// Test the C# compiler error message can be mapped to the correct
+ /// line/column in the LSL source when an undeclared variable is used.
+ ///
+ //[Test]
+ public void TestUseUndeclaredVariable()
+ {
+ m_compilerParameters.OutputAssembly = Path.Combine(m_testDir, Path.GetRandomFileName() + ".dll");
+
+ string input = @"default
+{
+ state_entry()
+ {
+ integer y = x + 3;
+ }
+}";
+
+ CSCodeGenerator cg = new CSCodeGenerator();
+ string output = "using OpenSim.Region.ScriptEngine.Shared; using System.Collections.Generic;\n" +
+ "namespace SecondLife { " +
+ "public class Script : OpenSim.Region.ScriptEngine.Shared.ScriptBase.ScriptBaseClass {\n" +
+ "public Script() { } " +
+ cg.Convert(input) +
+ "} }\n";
+ Dictionary, KeyValuePair> positionMap = cg.PositionMap;
+
+ m_compilerResults = m_CSCodeProvider.CompileAssemblyFromSource(m_compilerParameters, output);
+
+ Assert.AreEqual(new KeyValuePair(5, 21),
+ positionMap[new KeyValuePair(m_compilerResults.Errors[0].Line, m_compilerResults.Errors[0].Column)]);
+ }
+
+ ///
+ /// Test that a string can be cast to string and another string
+ /// concatenated.
+ ///
+ //[Test]
+ public void TestCastAndConcatString()
+ {
+ m_compilerParameters.OutputAssembly = Path.Combine(m_testDir, Path.GetRandomFileName() + ".dll");
+
+ string input = @"string s = "" a string"";
+
+default
+{
+ state_entry()
+ {
+ key gAvatarKey = llDetectedKey(0);
+ string tmp = (string) gAvatarKey + s;
+ llSay(0, tmp);
+ }
+}";
+
+ CSCodeGenerator cg = new CSCodeGenerator();
+ string output = "using OpenSim.Region.ScriptEngine.Shared; using System.Collections.Generic;\n" +
+ "namespace SecondLife { " +
+ "public class Script : OpenSim.Region.ScriptEngine.Shared.ScriptBase.ScriptBaseClass {\n" +
+ "public Script() { } " +
+ cg.Convert(input) +
+ "} }\n";
+ m_compilerResults = m_CSCodeProvider.CompileAssemblyFromSource(m_compilerParameters, output);
+
+ Assert.AreEqual(0, m_compilerResults.Errors.Count);
+ }
+ }
+}
--
cgit v1.1