< Summary

Class:ColorSelector
Assembly:UIComponents
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/UIComponents/Scripts/Components/ColorPicker/ColorSelector.cs
Covered lines:17
Uncovered lines:28
Coverable lines:45
Total lines:102
Line coverage:37.7% (17 of 45)
Covered branches:0
Total branches:0
Covered methods:5
Total methods:8
Method coverage:62.5% (5 of 8)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
ColorSelector()0%110100%
Populate(...)0%220100%
Cleanup()0%4.543044.44%
Select(...)0%2.262060%
SelectRandom()0%20400%
Select(...)0%12300%
ToggleClicked(...)0%12300%
GetColorToggle(...)0%4.123050%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/UIComponents/Scripts/Components/ColorPicker/ColorSelector.cs

#LineLine coverage
 1using System.Collections.Generic;
 2using DCL.Helpers;
 3using UnityEngine;
 4using UnityEngine.UI;
 5
 6[RequireComponent(typeof(ToggleGroup))]
 7public class ColorSelector : MonoBehaviour, IColorSelector
 8{
 9    [SerializeField] private ColorToggle colorTogglePrefab;
 10    [SerializeField] private RectTransform colorContainer;
 11
 12    public event System.Action<Color> OnColorSelectorChange;
 13
 14    private ColorToggle currentToggle;
 3715    private readonly List<ColorToggle> colorToggles = new ();
 16
 17    public void Populate(IReadOnlyList<Color> colors)
 18    {
 219        int colorNumber = colors.Count;
 20
 4821        for (var i = 0; i < colorNumber; ++i)
 22        {
 2223            ColorToggle newToggle = Instantiate(colorTogglePrefab, colorContainer);
 2224            newToggle.Initialize(colors[i], false);
 2225            newToggle.OnClicked += ToggleClicked;
 2226            colorToggles.Add(newToggle);
 27        }
 228    }
 29
 30    public void Cleanup()
 31    {
 432        foreach (var colorToggle in colorToggles)
 33        {
 34#if UNITY_EDITOR
 035            if (!Application.isPlaying)
 36            {
 037                DestroyImmediate(colorToggle.gameObject);
 038                continue;
 39            }
 40#endif
 041            Destroy(colorToggle.gameObject);
 42        }
 43
 244        colorToggles.Clear();
 245    }
 46
 47    public void Select(Color color)
 48    {
 149        ColorToggle toggle = GetColorToggle(color);
 50
 151        if (toggle == currentToggle)
 152            return;
 53
 054        Select(toggle);
 055    }
 56
 57    public void SelectRandom()
 58    {
 059        if (colorToggles.Count == 0)
 060            return;
 61
 062        ColorToggle toggle = colorToggles[Random.Range(0, colorToggles.Count)];
 063        if (toggle == currentToggle)
 064            return;
 65
 066        Select(toggle);
 067        OnColorSelectorChange?.Invoke(currentToggle.Color);
 068    }
 69
 70    private void Select(ColorToggle colorToggle)
 71    {
 072        if (currentToggle != null)
 073            currentToggle.Selected = false;
 74
 075        currentToggle = colorToggle;
 76
 077        if (colorToggle)
 078            colorToggle.Selected = true;
 079    }
 80
 81    private void ToggleClicked(ColorToggle toggle)
 82    {
 083        if (toggle == currentToggle)
 084            return;
 85
 086        Select(toggle);
 087        OnColorSelectorChange?.Invoke(currentToggle.Color);
 088    }
 89
 90    private ColorToggle GetColorToggle(Color color)
 91    {
 192        int colorTogglesCount = colorToggles.Count;
 293        for (var i = 0; i < colorTogglesCount; i++)
 94        {
 095            Color current = colorToggles[i].Color;
 096            if (color.AproxComparison(current))
 097                return colorToggles[i];
 98        }
 99
 1100        return null;
 101    }
 102}