public void Parent_OnChangedParent_Passes() { { var callbacks = new SmartDelegate <Callback>(); var c = 0; callbacks.Add((_) => c++); callbacks.Add((_) => { }); callbacks.SafeDynamicInvoke(0, () => "test fail..."); } var node = new TreeNodeHelper <int>(); int callCounter = 0; (TreeNodeHelper <int> self, TreeNodeHelper <int> parent, TreeNodeHelper <int> prevParent)recievedValue = default; node.OnChangedParent.Add((_s, _p, _prev) => { callCounter++; recievedValue = (_s, _p, _prev); }); node.OnChangedParent.Add((_, __, ___) => throw new System.Exception()); var parent = node.CreateNode(100); Assert.DoesNotThrow(() => { node.Parent = parent; }); Assert.AreEqual(1, callCounter); Assert.AreSame(node, recievedValue.self); Assert.AreSame(parent, recievedValue.parent); Assert.IsNull(recievedValue.prevParent); }
public LayoutTargetObject SetParent(LayoutTargetObject parent) { if (_parent == parent) { return(this); } if (_parent != null) { _parent.OnChangedLocalSize.Remove(ParentOnChangedLocalSize); _parent._children.Remove(this); } var prevParent = _parent; _parent = parent; if (_parent != null) { _parent._children.Add(this); _parent.OnChangedLocalSize.Add(ParentOnChangedLocalSize); } FollowParent(); _onChangedParent.SafeDynamicInvoke(this, _parent, prevParent, () => $"LayoutTargetObject#SetParent", LayoutDefines.LOG_SELECTOR); return(this); }
public void SafeDynamicInvoke_Arg3Passes() { { var d = new SmartDelegate <SafeDynamicInvokeDelegateArg3>(); int callCounter = 0; (int, int, int)recievedValue = default; d.Add((_n, _m, _l) => { callCounter++; recievedValue = (_n, _m, _l); }); var value1 = 100; var value2 = 200; var value3 = 300; d.SafeDynamicInvoke(value1, value2, value3, () => "ErrorLog"); Assert.AreEqual(1, callCounter); Assert.AreEqual(value1, recievedValue.Item1); Assert.AreEqual(value2, recievedValue.Item2); Assert.AreEqual(value3, recievedValue.Item3); } { var d = new SmartDelegate <SafeDynamicInvokeDelegateArg3>(); d.Add((_n, _m, _l) => { throw new System.Exception(); }); Assert.DoesNotThrow(() => d.SafeDynamicInvoke(100, () => "ErrorLog") ); } { var d = new SmartDelegate <SafeDynamicInvokeDelegateArg3>(); Assert.DoesNotThrow(() => d.SafeDynamicInvoke(() => "ErrorLog") ); Debug.Log($"Success to Empty Delegate"); } }
public void SafeDynamicInvoke_Arg1Passes() { { var d = new SmartDelegate <SafeDynamicInvokeDelegateArg1>(); int callCounter = 0; int recievedValue = 0; d.Add((_n) => { callCounter++; recievedValue = _n; }); var value = 100; d.SafeDynamicInvoke(value, () => "ErrorLog"); Assert.AreEqual(1, callCounter); Assert.AreEqual(value, recievedValue); } { var d = new SmartDelegate <SafeDynamicInvokeDelegateArg1>(); d.Add((_n) => { throw new System.Exception(); }); Assert.DoesNotThrow(() => d.SafeDynamicInvoke(100, () => "ErrorLog") ); } { var d = new SmartDelegate <SafeDynamicInvokeDelegateArg1>(); Assert.DoesNotThrow(() => d.SafeDynamicInvoke(() => "ErrorLog") ); Debug.Log($"Success to Empty Delegate"); } }
public void SafeDynamicInvoke_NoneArgPasses() { { var d = new SmartDelegate <SafeDynamicInvokeDelegate>(); int callCounter = 0; d.Add(() => callCounter++); d.SafeDynamicInvoke(() => "ErrorLog"); Assert.AreEqual(1, callCounter); } { var d = new SmartDelegate <SafeDynamicInvokeDelegate>(); d.Add(() => { throw new System.Exception(); }); Assert.DoesNotThrow(() => d.SafeDynamicInvoke(() => "ErrorLog") ); } { var d = new SmartDelegate <SafeDynamicInvokeDelegate>(); Assert.DoesNotThrow(() => d.SafeDynamicInvoke(() => "ErrorLog") ); Debug.Log($"Success to Empty Delegate"); } }
public void SafeDynamicInvoke_CallCallback_Passes() { var d = new SmartDelegate <CallCallbackDelegate>(); var callCounter = 0; d.Add(() => callCounter++); d.Add(() => throw new System.Exception()); var returnValues = d.SafeDynamicInvoke(() => ""); Assert.AreEqual(1, callCounter); }
public void SafeDynamicInvoke_ReturnValues_Passes() { var d = new SmartDelegate <ReturnValueDelegate>(); d.Add(() => 10); d.Add(() => 20); d.Add(() => 30); var returnValues = d.SafeDynamicInvoke(() => ""); var t = returnValues.Select(_n => _n.ToString()).Aggregate("", (_s, _c) => _s + _c + ", "); Debug.Log($"test -- {t}"); AssertionUtils.AssertEnumerable( new object[] { 10, 20, 30 } , returnValues , "" ); }
public LayoutTargetObject() { _children.OnAdded.Add(_child => { _onChangedChildren.SafeDynamicInvoke(this, _child, ILayoutTargetOnChangedChildMode.Add, () => $"LayoutTargetObject#Add Child", LayoutDefines.LOG_SELECTOR); }); _children.OnRemoved.Add(_child => { _onChangedChildren.SafeDynamicInvoke(this, _child, ILayoutTargetOnChangedChildMode.Remove, () => $"LayoutTargetObject#Remove Child", LayoutDefines.LOG_SELECTOR); }); _layouts.OnAdded.Add((_item, _index) => { if (_item == null) { return; } _item.OnDisposed.Add(LayoutOnDisposed); _item.OnChangedOperationPriority.Add(LayoutOnChangedOperationPriority); _layouts.Sort(ILayoutDefaultComparer.Default); }); _layouts.OnRemoved.Add((_item, _index) => { if (_item == null) { return; } _item.OnDisposed.Remove(LayoutOnDisposed); _item.OnChangedOperationPriority.Remove(LayoutOnChangedOperationPriority); }); LayoutInfo.OnChangedValue.Add((_info, _kinds, _prevInfo) => { if (0 != (_kinds & LayoutInfo.ValueKind.MinSize) || 0 != (_kinds & LayoutInfo.ValueKind.MaxSize)) { this.SetLocalSize(LocalSize); } else if (0 != (_kinds & LayoutInfo.ValueKind.LayoutSize)) { //子のサイズを更新する foreach (var child in Children) { //変更前のOffsetMin/Maxを計算しています。 var parentLayoutSize = LocalSize; if (_prevInfo.LayoutSize.x >= 0) { parentLayoutSize.x = Min(_prevInfo.LayoutSize.x, parentLayoutSize.x); } if (_prevInfo.LayoutSize.y >= 0) { parentLayoutSize.y = Min(_prevInfo.LayoutSize.y, parentLayoutSize.y); } if (_prevInfo.LayoutSize.z >= 0) { parentLayoutSize.z = Min(_prevInfo.LayoutSize.z, parentLayoutSize.z); } var prevAnchorAreaSize = parentLayoutSize.Mul(child.AnchorMax - child.AnchorMin); var max = prevAnchorAreaSize * 0.5f; var min = -max; var halfSize = child.LocalSize * 0.5f; var(localMin, localMax) = (-halfSize + Offset, halfSize + Offset); var(offsetMin, offsetMax) = (-(localMin - min), localMax - max); child.UpdateAnchorParam(child.AnchorMin, child.AnchorMax, offsetMin, offsetMax); } } _onChangedLayoutInfo.SafeDynamicInvoke(this, _kinds, () => $"LayoutInfo#OnChangedValue In LayoutTargetObject", LayoutDefines.LOG_SELECTOR); }); }