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);
        }
Exemple #3
0
        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");
            }
        }
Exemple #4
0
        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");
            }
        }
Exemple #5
0
        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");
            }
        }
Exemple #6
0
        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);
        }
Exemple #7
0
        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);
            });
        }