public RecursiveKillerItem(int depthToFactory, bool doFactory) { makeFactory = doFactory && depthToFactory == 0; if (depthToFactory > -10) { element = new RecursiveKillerItem(depthToFactory - 1, doFactory); } }
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); } } }