public void Sequence()
        {
            const string Expected =
                @"<seq range=""IL_0000 (22)"">
  <il range=""IL_0000 (2)"" />
  <try range=""IL_0002 (8)"">
    <try.block>
      <il range=""IL_0002 (4)"" />
    </try.block>
    <handler type=""Clause"" exception=""02000010"">
      <il range=""IL_0006 (4)"" />
    </handler>
  </try>
  <il range=""IL_000A (2)"" />
  <try range=""IL_000C (8)"">
    <try.block>
      <il range=""IL_000C (4)"" />
    </try.block>
    <handler type=""Clause"" exception=""02000010"">
      <il range=""IL_0010 (4)"" />
    </handler>
  </try>
  <il range=""IL_0014 (2)"" />
</seq>";

            var handlers = new[]
            {
                new ExceptionHandler(ExceptionHandlingClauseOptions.Clause, new ILRange(2, 4), new ILRange(6, 4), 0x02000010),
                new ExceptionHandler(ExceptionHandlingClauseOptions.Clause, new ILRange(12, 4), new ILRange(16, 4), 0x02000010),
            };

            var section = SectionFactory.Create(new ILRange(0, 22), handlers);

            Assert.That(Format(section), Is.EqualTo(Expected));
        }
Ejemplo n.º 2
0
        static BaseSection?BuildSections(MethodData data)
        {
            var         ilRange  = InstructionsRange(data.Instructions);
            BaseSection?sections = null;

            foreach (var dataSection in data.DataSections)
            {
                if (dataSection.ExceptionHandlers.Length > 0)
                {
                    if (sections != null)
                    {
                        return(null);
                    }

                    try
                    {
                        sections = SectionFactory.Create(ilRange, dataSection.ExceptionHandlers);
                    }
                    catch (CannotGenerateSectionException)
                    {
                        return(null);
                    }
                }
            }

            return(sections);
        }
        public void NestedSequence()
        {
            const string Expected =
                @"<try range=""IL_0000 (10)"">
  <try.block>
    <seq range=""IL_0000 (8)"">
      <il range=""IL_0000 (2)"" />
      <try range=""IL_0002 (4)"">
        <try.block>
          <il range=""IL_0002 (2)"" />
        </try.block>
        <handler type=""Clause"" exception=""02000010"">
          <il range=""IL_0004 (2)"" />
        </handler>
      </try>
      <il range=""IL_0006 (2)"" />
    </seq>
  </try.block>
  <handler type=""Finally"">
    <il range=""IL_0008 (2)"" />
  </handler>
</try>";

            var handlers = new[]
            {
                new ExceptionHandler(ExceptionHandlingClauseOptions.Clause, new ILRange(2, 2), new ILRange(4, 2), 0x02000010),
                new ExceptionHandler(ExceptionHandlingClauseOptions.Finally, new ILRange(0, 8), new ILRange(8, 2), 0),
            };

            var section = SectionFactory.Create(new ILRange(0, 10), handlers);

            Assert.That(Format(section), Is.EqualTo(Expected));
        }
        public void OverlappingTry()
        {
            const string Expected =
                @"<try range=""IL_0000 (10)"">
  <try.block>
    <il range=""IL_0000 (2)"" />
  </try.block>
  <handler type=""Clause"" exception=""02000011"">
    <il range=""IL_0002 (4)"" />
  </handler>
  <handler type=""Clause"" exception=""02000012"">
    <il range=""IL_0006 (4)"" />
  </handler>
</try>";

            var handlers = new[]
            {
                new ExceptionHandler(ExceptionHandlingClauseOptions.Clause, new ILRange(0, 2), new ILRange(2, 4), 0x02000011),
                new ExceptionHandler(ExceptionHandlingClauseOptions.Clause, new ILRange(0, 2), new ILRange(6, 4), 0x02000012),
            };

            var section = SectionFactory.Create(new ILRange(0, 10), handlers);

            Assert.That(Format(section), Is.EqualTo(Expected));
        }
Ejemplo n.º 5
0
        public void Create_Always_WillCreateASectionWithName()
        {
            var  sectionFactory = new SectionFactory(new QuestionFactory());
            Base section        = sectionFactory.Create(new StringReader("Sec1 0"));

            Assert.IsInstanceOf(typeof(Section), section);
            Assert.AreEqual("Sec1", section.Name);
        }
        public void Create_Always_WillCreateASectionWithName()
        {
            var sectionFactory = new SectionFactory(new QuestionFactory());

            Base section = sectionFactory.Create(new StringReader("Section 0"));

            Assert.AreEqual("Section", section.Name);
        }
        public void Create_WhenSectionHAsQuestions_WillReturnASectionWithAListOfQuestions()
        {
            var sectionFactory = new SectionFactory();

            var section = sectionFactory.Create(new StringReader(@"Section 1
Q1 Name"));

            // Assert.AreEqual(1, section.);
        }
        public void Empty()
        {
            const string Expected =
                @"<il range=""IL_0000 (10)"" />";

            var section = SectionFactory.Create(new ILRange(0, 10), Array.Empty <ExceptionHandler>());

            Assert.That(Format(section), Is.EqualTo(Expected));
        }
        public void CreateSection_Always_WillReturnASectionWithName()
        {
            var mock           = new Mock <IQuestionFactory>();
            var sectionFactory = new SectionFactory(mock.Object);

            Base item = sectionFactory.Create(new StringReader("Section 0"));

            Assert.IsInstanceOf(typeof(Section), item);
        }
        public void Create_WhenItemHasChildren_WillSetTheLIstOfItems()
        {
            var sectionFactory = new SectionFactory(new QuestionFactory());

            Base section = sectionFactory.Create(new StringReader(@"Section 1
Q1 Name"));

            Assert.AreEqual(1, section.Items.Count);
        }
        public void Method_scenario_behaviour()
        {
            var sectionFactory = new SectionFactory();

            Base section = sectionFactory.Create(new StringReader(@"Sec1 1
SC Sex 2 Female Male"));

            Assert.AreEqual(1, section.Items.Count);
        }
Ejemplo n.º 12
0
        public void Create_WhenSectionHasQuestions_WillPopulateTheListOfItems()
        {
            var  mockQuestion   = new Mock <IQuestionFactory>();
            var  sectionFactory = new SectionFactory(mockQuestion.Object);
            Base section        = sectionFactory.Create(new StringReader(@"Sec1 1
FT Name"));

            Assert.AreEqual(1, section.Items.Count);
        }
Ejemplo n.º 13
0
        public void Create_WhenSectionContainsQuestions_WillSetTheListOfItems()
        {
            var sectionFactory = new SectionFactory(new QuestionFactory());

            var section = sectionFactory.Create(new StringReader(@"Sec1 1
Q1 Name"));

            Assert.AreEqual(1, section.Items.Count);
        }
        public void Create_WhenSectionHasQuestions_WillSetTheListOfItems()
        {
            var mockQuestionFactory = new Mock <IQuestionFactory>();
            var sectionFactory      = new SectionFactory(mockQuestionFactory.Object);

            Base section = sectionFactory.Create(new StringReader(@"Sec1 2
FT Nume
FT Prenume"));

            Assert.AreEqual(2, section.Items.Count);
        }
Ejemplo n.º 15
0
        public void Finally()
        {
            const string Expected =
                @"<try range=""IL_0000 (10)"">
  <try.block>
    <il range=""IL_0000 (6)"" />
  </try.block>
  <handler type=""Finally"">
    <il range=""IL_0006 (4)"" />
  </handler>
</try>";

            var handlers = new[]
            {
                new ExceptionHandler(ExceptionHandlingClauseOptions.Finally, new ILRange(0, 6), new ILRange(6, 4), 0),
            };

            var section = SectionFactory.Create(new ILRange(0, 10), handlers);

            Assert.That(Format(section), Is.EqualTo(Expected));
        }
Ejemplo n.º 16
0
        public void Nested()
        {
            const string Expected =
                @"<try range=""IL_0000 (20)"">
  <try.block>
    <try range=""IL_0000 (10)"">
      <try.block>
        <il range=""IL_0000 (5)"" />
      </try.block>
      <handler type=""Clause"" exception=""02000010"">
        <il range=""IL_0005 (5)"" />
      </handler>
    </try>
  </try.block>
  <handler type=""Finally"">
    <try range=""IL_000A (10)"">
      <try.block>
        <il range=""IL_000A (5)"" />
      </try.block>
      <handler type=""Clause"" exception=""02000010"">
        <il range=""IL_000F (5)"" />
      </handler>
    </try>
  </handler>
</try>";

            var handlers = new[]
            {
                new ExceptionHandler(ExceptionHandlingClauseOptions.Clause, new ILRange(0, 5), new ILRange(5, 5), 0x02000010),
                new ExceptionHandler(ExceptionHandlingClauseOptions.Clause, new ILRange(10, 5), new ILRange(15, 5), 0x02000010),
                new ExceptionHandler(ExceptionHandlingClauseOptions.Finally, new ILRange(0, 10), new ILRange(10, 10), 0),
            };

            var section = SectionFactory.Create(new ILRange(0, 20), handlers);

            Assert.That(Format(section), Is.EqualTo(Expected));
        }
Ejemplo n.º 17
0
        public void Filter()
        {
            const string Expected =
                @"<try range=""IL_0000 (12)"">
  <try.block>
    <il range=""IL_0000 (3)"" />
  </try.block>
  <handler type=""Filter"">
    <filter>
      <il range=""IL_0003 (4)"" />
    </filter>
    <il range=""IL_0007 (5)"" />
  </handler>
</try>";

            var handlers = new[]
            {
                new ExceptionHandler(ExceptionHandlingClauseOptions.Filter, new ILRange(0, 3), new ILRange(7, 5), 3),
            };

            var section = SectionFactory.Create(new ILRange(0, 12), handlers);

            Assert.That(Format(section), Is.EqualTo(Expected));
        }
Ejemplo n.º 18
0
 public void InvalidHandlerConfigurations(ExceptionHandler[] handlers)
 {
     Assert.That(
         () => SectionFactory.Create(new ILRange(0, 10), handlers),
         Throws.InstanceOf <CannotGenerateSectionException>());
 }