using System.Collections;
using System.Collections.Generic;
using System.IO;
using NUnit.Framework;
using UnityEditor;
using UnityEngine;
using UnityEngine.TestTools;
using UnityEngine.UI;

internal class ScrollBarTests : IPrebuildSetup
{
    GameObject m_PrefabRoot;
    const string kPrefabPath = "Assets/Resources/ScrollBarPrefab.prefab";

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

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

        var scrollBarGo = new GameObject("ScrollBar", typeof(Scrollbar));
        scrollBarGo.transform.SetParent(canvasGO.transform);

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

        PrefabUtility.SaveAsPrefabAsset(rootGO, kPrefabPath);
        GameObject.DestroyImmediate(rootGO);
#endif
    }

    [SetUp]
    public void TestSetup()
    {
        m_PrefabRoot = UnityEngine.Object.Instantiate(Resources.Load("ScrollBarPrefab")) as GameObject;
    }

    [Test]
    public void ScrollBarSetValueWithoutNotifyWillNotNotify()
    {
        Scrollbar s = m_PrefabRoot.GetComponentInChildren<Scrollbar>();
        s.value = 0;

        bool calledOnValueChanged = false;

        s.onValueChanged.AddListener(b => { calledOnValueChanged = true; });

        s.SetValueWithoutNotify(1);

        Assert.IsTrue(s.value == 1);
        Assert.IsFalse(calledOnValueChanged);
    }

    [TearDown]
    public void TearDown()
    {
        GameObject.DestroyImmediate(m_PrefabRoot);
#if UNITY_EDITOR
        AssetDatabase.DeleteAsset(kPrefabPath);
#endif
    }
}
