summaryrefslogtreecommitdiff
path: root/BCT/RegressionTests/TranslationTest/UnitTest0.cs
blob: 62ce9155bee4948d5988a3968da5f687f575c782 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.IO;
using Microsoft.Cci;
using Microsoft.Cci.MetadataReader;
using Microsoft.Cci.MutableCodeModel;
using Microsoft.Cci.Contracts;
using Microsoft.Cci.ILToCodeModel;
using BytecodeTranslator;

namespace TranslationTest {
  /// <summary>
  /// Summary description for UnitTest0
  /// </summary>
  [TestClass]
  public class UnitTest0 {
    public UnitTest0() {
      //
      // TODO: Add constructor logic here
      //
    }

    private TestContext testContextInstance;

    /// <summary>
    ///Gets or sets the test context which provides
    ///information about and functionality for the current test run.
    ///</summary>
    public TestContext TestContext {
      get {
        return testContextInstance;
      }
      set {
        testContextInstance = value;
      }
    }

    #region Additional test attributes
    //
    // You can use the following additional attributes as you write your tests:
    //
    // Use ClassInitialize to run code before running the first test in the class
    // [ClassInitialize()]
    // public static void MyClassInitialize(TestContext testContext) { }
    //
    // Use ClassCleanup to run code after all tests in a class have run
    // [ClassCleanup()]
    // public static void MyClassCleanup() { }
    //
    // Use TestInitialize to run code before running each test 
    // [TestInitialize()]
    // public void MyTestInitialize() { }
    //
    // Use TestCleanup to run code after each test has run
    // [TestCleanup()]
    // public void MyTestCleanup() { }
    //
    #endregion

    private string ExecuteTest(string assemblyName, HeapFactory heapFactory) {
      var options = new Options();
      options.monotonicHeap = true;
      options.dereference = Options.Dereference.Assume;
      BCT.TranslateAssemblyAndWriteOutput(new List<string> { assemblyName }, heapFactory, options, null, false);
      var fileName = Path.ChangeExtension(assemblyName, "bpl");
      var s = File.ReadAllText(fileName);
      return s;
    }

    [TestMethod]
    public void SplitFieldsHeap() {
      string dir = TestContext.DeploymentDirectory;
      var fullPath = Path.Combine(dir, "RegressionTestInput.dll");
      Stream resource = typeof(UnitTest0).Assembly.GetManifestResourceStream("TranslationTest.SplitFieldsHeapInput.txt");
      StreamReader reader = new StreamReader(resource);
      string expected = reader.ReadToEnd();
      var result = ExecuteTest(fullPath, new SplitFieldsHeap());
      if (result != expected) {
        string resultFile = Path.GetFullPath("SplitFieldsHeapOutput.txt");
        File.WriteAllText(resultFile, result);
        var msg = String.Format("Output didn't match: SplitFieldsHeapInput.txt \"{0}\"", resultFile);
        Assert.Fail(msg);
      }
    }

    [TestMethod]
    public void GeneralHeap() {
      string dir = TestContext.DeploymentDirectory;
      var fullPath = Path.Combine(dir, "RegressionTestInput.dll");
      Stream resource = typeof(UnitTest0).Assembly.GetManifestResourceStream("TranslationTest.GeneralHeapInput.txt");
      StreamReader reader = new StreamReader(resource);
      string expected = reader.ReadToEnd();
      var result = ExecuteTest(fullPath, new GeneralHeap());
      if (result != expected) {
        string resultFile = Path.GetFullPath("GeneralHeapOutput.txt");
        File.WriteAllText(resultFile, result);
        var msg = String.Format("Output didn't match: GeneralHeapInput.txt \"{0}\"", resultFile);
        Assert.Fail(msg);
      }
    }

  }
}