public void OpenScriptInExternalEditor(Type type, MethodInfo method) { var fileOpenInfo = GetFileOpenInfo(type, method); if (string.IsNullOrEmpty(fileOpenInfo.FilePath)) { Debug.LogWarning("Failed to open test method source code in external editor. Inconsistent filename and yield return operator in target method."); return; } if (fileOpenInfo.LineNumber == 1) { Debug.LogWarning("Failed to get a line number for unity test method. So please find it in opened file in external editor."); } if (!fileOpenInfo.FilePath.Contains("Assets")) { (Editor ?? CodeEditor.CurrentEditor).OpenProject(fileOpenInfo.FilePath, fileOpenInfo.LineNumber, 1); } else { AssetsDatabaseHelper.OpenAssetInItsDefaultExternalEditor(fileOpenInfo.FilePath, fileOpenInfo.LineNumber); } }
protected TestListGUI() { MonoCecilHelper = new MonoCecilHelper(); AssetsDatabaseHelper = new AssetsDatabaseHelper(); GuiHelper = new GuiHelper(MonoCecilHelper, AssetsDatabaseHelper); }
public bool OpenScriptInExternalEditor(string stacktrace) { if (string.IsNullOrEmpty(stacktrace)) { return(false); } var regex = new Regex("in (?<path>.*):{1}(?<line>[0-9]+)"); var matchingLines = stacktrace.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).Where(x => regex.IsMatch(x)).ToList(); if (!matchingLines.Any()) { return(false); } var fileOpenInfos = matchingLines .Select(x => regex.Match(x)) .Select(x => new FileOpenInfo { FilePath = x.Groups["path"].Value, LineNumber = int.Parse(x.Groups["line"].Value) }).ToList(); var fileOpenInfo = fileOpenInfos .FirstOrDefault(openInfo => !string.IsNullOrEmpty(openInfo.FilePath) && File.Exists(openInfo.FilePath)); if (fileOpenInfo == null) { return(false); } var filePath = FilePathToAssetsRelativeAndUnified(fileOpenInfo.FilePath); AssetsDatabaseHelper.OpenAssetInItsDefaultExternalEditor(filePath, fileOpenInfo.LineNumber); return(true); }