Example #1
0
 public RecursiveKillerItem(int depthToFactory, bool doFactory)
 {
     makeFactory = doFactory && depthToFactory == 0;
     if (depthToFactory > -10)
     {
         element = new RecursiveKillerItem(depthToFactory - 1, doFactory);
     }
 }
Example #2
0
        public void RecursiveKiller([Values] RecorderMode mode)
        {
            bool gotRef = false;

            for (int depth = 15; depth < 25; ++depth)
            {
                // Make sure we get a ref mode eventually
                {
                    var testbed = new RecursiveKillerItem(depth, false);

                    var result = DoRecorderRoundTrip(testbed, mode, testSerializedResult: serialized => gotRef |= serialized.Contains("<refs>"));

                    int detectedDepth = 0;
                    while (result != null)
                    {
                        ++detectedDepth;
                        result = result.element;
                    }

                    Assert.AreEqual(depth + 11, detectedDepth);
                }

                // Make sure we deserialize without error
                {
                    var testbed = new RecursiveKillerItem(depth, true);

                    var result = DoRecorderRoundTrip(testbed, mode);

                    int detectedDepth = 0;
                    int foundFactory  = 0;
                    while (result != null)
                    {
                        ++detectedDepth;
                        if (result.makeFactory)
                        {
                            Assert.IsTrue(result.element.usedFactory);
                            foundFactory++;
                        }
                        else
                        {
                            Assert.IsTrue(result.element == null || !result.element.usedFactory);
                        }
                        result = result.element;
                    }

                    Assert.AreEqual(depth + 11, detectedDepth);
                    Assert.AreEqual(1, foundFactory);
                }
            }
        }