File size: 3,211 Bytes
18a519f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using NUnit.Framework;
using UnityEditor;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.TestTools;
using UnityEngine.UI;
using UnityEngine.UI.Tests;
using Object = UnityEngine.Object;

namespace ToggleTest
{
    class ToggleTests : IPrebuildSetup
    {
        const string kPrefabTogglePath = "Assets/Resources/TestToggle.prefab";

        protected GameObject m_PrefabRoot;
        protected List<Toggle> m_toggle = new List<Toggle>();
        protected static int nbToggleInGroup = 2;

        public void Setup()
        {
#if UNITY_EDITOR
            var rootGO = new GameObject("rootGo");

            GameObject canvasGO = new GameObject("Canvas", typeof(RectTransform), typeof(Canvas));
            canvasGO.transform.SetParent(rootGO.transform);

            var canvas = canvasGO.GetComponent<Canvas>();
            canvas.referencePixelsPerUnit = 100;

            var toggleGO = new GameObject("TestToggle", typeof(RectTransform), typeof(Toggle), typeof(Image));
            toggleGO.transform.SetParent(canvasGO.transform);

            var toggle = toggleGO.GetComponent<Toggle>();
            toggle.enabled = true;
            toggle.graphic = toggleGO.GetComponent<Image>();
            toggle.graphic.canvasRenderer.SetColor(Color.white);

            if (!Directory.Exists("Assets/Resources/"))
                Directory.CreateDirectory("Assets/Resources/");

            PrefabUtility.SaveAsPrefabAsset(rootGO, kPrefabTogglePath);

            GameObject.DestroyImmediate(rootGO);
#endif
        }

        [SetUp]
        public virtual void TestSetup()
        {
            m_PrefabRoot = Object.Instantiate(Resources.Load("TestToggle")) as GameObject;
            m_toggle.Add(m_PrefabRoot.GetComponentInChildren<Toggle>());
        }

        [TearDown]
        public virtual void TearDown()
        {
            m_toggle.Clear();
            Object.DestroyImmediate(m_PrefabRoot);
        }

        [OneTimeTearDown]
        public void OneTimeTearDown()
        {
#if UNITY_EDITOR
            AssetDatabase.DeleteAsset(kPrefabTogglePath);
#endif
        }

        [Test]
        public void SetIsOnWithoutNotifyWillNotNotify()
        {
            m_toggle[0].isOn = false;
            bool calledOnValueChanged = false;
            m_toggle[0].onValueChanged.AddListener(b => { calledOnValueChanged = true; });
            m_toggle[0].SetIsOnWithoutNotify(true);
            Assert.IsTrue(m_toggle[0].isOn);
            Assert.IsFalse(calledOnValueChanged);
        }

        [Test]
        public void NonInteractableCantBeToggled()
        {
            m_toggle[0].isOn = true;
            Assert.IsTrue(m_toggle[0].isOn);
            m_toggle[0].interactable = false;
            m_toggle[0].OnSubmit(null);
            Assert.IsTrue(m_toggle[0].isOn);
        }

        [Test]
        public void InactiveCantBeToggled()
        {
            m_toggle[0].isOn = true;
            Assert.IsTrue(m_toggle[0].isOn);
            m_toggle[0].enabled = false;
            m_toggle[0].OnSubmit(null);
            Assert.IsTrue(m_toggle[0].isOn);
        }
    }
}