/// <summary> /// 深いコピーが正常に動作するか検査します. /// </summary> /// <param name="codeObject"> 検査対象のモデル </param> /// <param name="message"> アサーションに違反した際のエラーメッセージ </param> private static void AssertDeepCopy( UnifiedProgram codeObject, string message) { var copiedModel = codeObject.DeepCopy(); Assert.That( copiedModel, Is.EqualTo(codeObject).Using( StructuralEqualityComparerForDebug.Instance)); var pairs = copiedModel.Descendants().Zip(codeObject.Descendants()); foreach (var pair in pairs) { Assert.That(pair.Item1.Parent, Is.Not.Null, message); Assert.That( ReferenceEquals(pair.Item1.Parent, pair.Item2.Parent), Is.False, message); } }
/// <summary> /// 子要素とプロパティを介さないセッターの列挙機能が正常に動作するかソースーコードを指定して検査します。 /// </summary> /// <param name="codeObject"> 検査対象のモデル </param> /// <param name="message"> アサーションに違反した際のエラーメッセージ </param> private static void AssertGetElementReferenecesOfFields( UnifiedProgram codeObject, string message) { codeObject = codeObject.DeepCopy(); var elements = codeObject.Descendants().ToList(); foreach (var element in elements) { var references = element.ElementReferencesOfFields(); foreach (var reference in references) { reference.Element = null; } } foreach (var element in elements) { foreach (var child in element.Elements()) { Assert.That(child, Is.Null, message); } } }