using System.Linq; using System; using UnityEngine; using UnityEditor.TestTools.CodeCoverage.Utils; namespace UnityEditor.TestTools.CodeCoverage { internal class PathToAddHandler { string m_PathsToFilter; readonly CodeCoverageWindow m_Parent; readonly PathFilterType m_PathFilterType; private readonly string kSelectIncludedDirectoryMessage = L10n.Tr($"Select directory to include"); private readonly string kSelectIncludedFileMessage = L10n.Tr("Select file to include"); private readonly string kSelectExcludedDirectoryMessage = L10n.Tr($"Select directory to exclude"); private readonly string kSelectExcludedFileMessage = L10n.Tr("Select file to exclude"); public PathToAddHandler(CodeCoverageWindow parent, PathFilterType type) { m_Parent = parent; m_PathFilterType = type; } public void BrowseForDir(string pathsToFilter) { m_PathsToFilter = pathsToFilter; string candidate = CoverageUtils.BrowseForDir(Application.dataPath, m_PathFilterType == PathFilterType.Include ? kSelectIncludedDirectoryMessage : kSelectExcludedDirectoryMessage); if (CoverageUtils.IsValidFolder(candidate)) { candidate = string.Concat(candidate, "/**"); UpdatePathToFilter(candidate); } } public void BrowseForFile(string pathsToFilter) { m_PathsToFilter = pathsToFilter; string candidate = CoverageUtils.BrowseForFile(Application.dataPath, m_PathFilterType == PathFilterType.Include ? kSelectIncludedFileMessage : kSelectExcludedFileMessage); if (CoverageUtils.IsValidFile(candidate)) { UpdatePathToFilter(candidate); } } private void UpdatePathToFilter(string candidate) { string[] pathFilters = m_PathsToFilter.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); candidate = CoverageUtils.NormaliseFolderSeparators(candidate); if (!pathFilters.Contains(candidate)) { if (m_PathsToFilter.Length > 0) m_PathsToFilter += ","; m_PathsToFilter += candidate; if (m_PathFilterType == PathFilterType.Include) { m_Parent.PathsToInclude = m_PathsToFilter; } else { m_Parent.PathsToExclude = m_PathsToFilter; } m_Parent.LoseFocus(); } } } }