Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions MainWindow.IedBrowser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,20 @@ private void IedBrowserBrowseFiles_Click(object sender, RoutedEventArgs e)
IedBrowserDetailStatus.Text = "Connect this IED to browse remote files.";
return;
}
// The toolbar action must reveal the Files workspace before
// starting its read; otherwise a successful directory response is
// invisible while the operator stays on SG/Data Model.
var filesPage = _iedBrowserTree.FindVisible("category/files");
if (filesPage is not null)
{
_iedBrowserSyncingSelection = true;
try { IedBrowserTreeGrid.SelectedItem = filesPage; }
finally { _iedBrowserSyncingSelection = false; }
_iedBrowserNavigation.SelectFromTree(filesPage);
RenderIedBrowserSelection(filesPage,
device.LiveDiscoveryModel ?? device.SclWorkspace?.DesignModel,
device.IsConnected);
}
_iedBrowserFilesLoaded = false;
_ = BrowseIedBrowserFilesAsync(device);
}
Expand Down
21 changes: 21 additions & 0 deletions tests/ARSAS.Tests/M2IedBrowserFilesTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,27 @@
finally { Directory.Delete(root, recursive: true); }
}

[Fact]
public void BrowseFilesToolbar_RevealsExistingFilesPageBeforeDirectoryRead()
{
var source = File.ReadAllText(Find("MainWindow.IedBrowser.cs"));
var start = source.IndexOf("private void IedBrowserBrowseFiles_Click",
StringComparison.Ordinal);
var end = source.IndexOf("private void IedBrowserRefresh_Click",
start, StringComparison.Ordinal);
Assert.True(start >= 0 && end > start);
var handler = source[start..end];
var navigate = handler.IndexOf("FindVisible(\"category/files\")",
StringComparison.Ordinal);
var read = handler.IndexOf("BrowseIedBrowserFilesAsync(device)",
StringComparison.Ordinal);
Assert.True(navigate >= 0 && read > navigate);
Assert.Contains("RenderIedBrowserSelection(filesPage", handler,
StringComparison.Ordinal);
Assert.Contains("_iedBrowserSyncingSelection = true", handler,
StringComparison.Ordinal);
}

[Fact]
public void NativeFilesGrid_ExposesThreeColumns_AndBoundedActions()
{
Expand All @@ -186,7 +207,7 @@
e => e.Attribute(x + "Name")?.Value == "IedBrowserFilesGrid");
var cols = grid.Descendants(p + "DataGridTextColumn")
.Select(c => (string?)c.Attribute("Header")).ToArray();
Assert.Equal(["Filename", "Time", "Size"], cols);

Check warning on line 210 in tests/ARSAS.Tests/M2IedBrowserFilesTests.cs

View workflow job for this annotation

GitHub Actions / Build, test, validate and package Windows application

The type 'string?' cannot be used as type parameter 'T' in the generic type or method 'Assert.Equal<T>(ReadOnlySpan<T>, T[])'. Nullability of type argument 'string?' doesn't match constraint type 'System.IEquatable<string?>'.
Assert.Equal("True", (string?)grid.Attribute("EnableRowVirtualization"));
Assert.Contains("IedBrowserFile_DoubleClick", grid.ToString(), StringComparison.Ordinal);
Assert.Contains("IedBrowserFile_LoadingRow", grid.ToString(), StringComparison.Ordinal);
Expand Down
Loading