Skip to content

Commit 63b0f64

Browse files
committed
Add Tests
for the part that changed significantly. TODO: consider whether checking `field` instead of `label' would make more sense. Change-Id: I04290497ebc11dc625867ca33ce1b1d33027c7aa
1 parent 1659192 commit 63b0f64

File tree

2 files changed

+43
-27
lines changed

2 files changed

+43
-27
lines changed

Src/Common/Controls/XMLViews/XMLViewsTests/XmlBrowseViewBaseVcTests.cs

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
// Copyright (c) 2015 SIL International
1+
// Copyright (c) 2015-2025 SIL International
22
// This software is licensed under the LGPL, version 2.1 or later
33
// (http://www.gnu.org/licenses/lgpl-2.1.html)
44

5+
using NUnit.Framework;
6+
using SIL.FieldWorks.Common.Controls;
57
using System.Collections.Generic;
68
using System.Linq;
79
using System.Xml;
8-
using NUnit.Framework;
9-
using SIL.FieldWorks.Common.Controls;
1010

1111
namespace XMLViewsTests
1212
{
@@ -168,7 +168,6 @@ public void GetHeaderLabels_ReturnsColumnSpecLabels()
168168

169169
var columnDoc = new XmlDocument();
170170
columnDoc.LoadXml(testColumns);
171-
columnDoc.SelectNodes("column");
172171
var testVc = new XmlBrowseViewBaseVc
173172
{
174173
ColumnSpecs = new List<XmlNode>(columnDoc.DocumentElement.GetElementsByTagName("column").OfType<XmlNode>())
@@ -182,17 +181,41 @@ public void GetHeaderLabels_ReturnsColumnSpecLabels()
182181
[Test]
183182
public void IsValidColumnSpec_ValidReturnsTrue()
184183
{
185-
// set up PossibleColumnSpecs
186-
// Pass a valid node
187-
Assert.IsTrue(false);
184+
var vc = new XmlBrowseViewBaseVc { PossibleColumnSpecs = new List<XmlNode>(), ListItemsClass = -1 /* can't be 0 */ };
185+
var possibleColumns = new XmlDocument();
186+
possibleColumns.LoadXml("<columns><column label='Ref'/><column label='Other'/></columns>");
187+
foreach (XmlNode node in possibleColumns.DocumentElement.GetElementsByTagName("column"))
188+
{
189+
vc.PossibleColumnSpecs.Add(node);
190+
}
191+
192+
var savedColumns = new XmlDocument();
193+
savedColumns.LoadXml("<root><column label='Ref'/><column label='Other (Best Ana)' originalLabel='Other'/></root>");
194+
195+
// SUT
196+
foreach (XmlNode node in savedColumns.DocumentElement.GetElementsByTagName("column"))
197+
{
198+
Assert.IsTrue(vc.IsValidColumnSpec(node), $"Should have found this node to be valid: {node.OuterXml}");
199+
}
188200
}
189201

190202
[Test]
191203
public void IsValidColumnSpec_InvalidReturnsFalse()
192204
{
193-
// set up PossibleColumnSpecs
194-
// Pass an invalid node
195-
Assert.IsFalse(true);
205+
var vc = new XmlBrowseViewBaseVc { PossibleColumnSpecs = new List<XmlNode>(), ListItemsClass = -1 /* can't be 0 */ };
206+
var possibleColumns = new XmlDocument();
207+
possibleColumns.LoadXml("<columns><column label='Ref'/><column label='Other'/></columns>");
208+
foreach (XmlNode node in possibleColumns.DocumentElement.GetElementsByTagName("column"))
209+
{
210+
vc.PossibleColumnSpecs.Add(node);
211+
}
212+
213+
var savedColumns = new XmlDocument();
214+
savedColumns.LoadXml("<root><column label='DoesNotExist' originalLabel='MayHaveExistedBefore'/></root>");
215+
var invalidColumn = savedColumns.DocumentElement.SelectSingleNode("column");
216+
217+
// SUT
218+
Assert.IsFalse(vc.IsValidColumnSpec(invalidColumn), $"Should have found this node to be invalid: {invalidColumn.OuterXml}");
196219
}
197220
}
198-
}
221+
}

Src/Common/Controls/XMLViews/XmlBrowseViewBaseVc.cs

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,7 @@ public class XmlBrowseViewBaseVc : XmlVc
5656
/// Specifications of columns to display
5757
/// </summary>
5858
protected List<XmlNode> m_columns = new List<XmlNode>();
59-
/// <summary>
60-
/// Specs of columns that COULD be displayed, but which have not been selected.
61-
/// </summary>
62-
protected List<XmlNode> m_possibleColumns;
59+
6360
/// <summary>// Top-level fake property for list of objects.</summary>
6461
protected int m_fakeFlid = 0;
6562
/// <summary>// Controls appearance of column for check boxes.</summary>
@@ -216,15 +213,15 @@ public XmlBrowseViewBaseVc(XmlNode xnSpec, int fakeFlid, XmlBrowseViewBase xbv)
216213
if (doc == null) // nothing saved, or saved info won't parse
217214
{
218215
// default: the columns that have 'width' specified.
219-
foreach(XmlNode node in m_possibleColumns)
216+
foreach(XmlNode node in PossibleColumnSpecs)
220217
{
221218
if (XmlUtils.GetOptionalAttributeValue(node, "visibility", "always") == "always")
222219
m_columns.Add(node);
223220
}
224221
}
225222
else
226223
{
227-
var newPossibleColumns = new List<XmlNode>(m_possibleColumns);
224+
var newPossibleColumns = new List<XmlNode>(PossibleColumnSpecs);
228225
foreach (XmlNode node in doc.DocumentElement.SelectNodes("//column"))
229226
{
230227

@@ -550,9 +547,7 @@ public List<XmlNode> ComputePossibleColumns()
550547
XmlVc vc = null;
551548
if (ListItemsClass != 0)
552549
vc = this;
553-
m_possibleColumns = PartGenerator.GetGeneratedChildren(m_xnSpec.SelectSingleNode("columns"),
554-
m_xbv.Cache, vc, (int)ListItemsClass);
555-
return m_possibleColumns;
550+
return PossibleColumnSpecs = PartGenerator.GetGeneratedChildren(m_xnSpec.SelectSingleNode("columns"), m_xbv.Cache, vc, (int)ListItemsClass);
556551
}
557552

558553
int m_listItemsClass = 0;
@@ -604,6 +599,7 @@ internal bool IsValidColumnSpec(XmlNode colSpec)
604599
return isValid;
605600
}
606601
// In the simple case, `node`s label should match a label in PossibleColumnSpecs. There may be more complicated cases.
602+
// TODO (Hasso) 2025.11: 'layout' (madatory?) and 'field' (optional) would be better attributes to match.
607603
var label = XmlUtils.GetLocalizedAttributeValue(colSpec, "label", null) ??
608604
XmlUtils.GetMandatoryAttributeValue(colSpec, "label");
609605
var originalLabel = XmlUtils.GetLocalizedAttributeValue(colSpec, "originalLabel", null) ??
@@ -763,13 +759,10 @@ internal virtual List<XmlNode> ColumnSpecs
763759
}
764760
}
765761

766-
internal List<XmlNode> PossibleColumnSpecs
767-
{
768-
get
769-
{
770-
return m_possibleColumns;
771-
}
772-
}
762+
/// <summary>
763+
/// Specs of columns that COULD be displayed, but which have not been selected.
764+
/// </summary>
765+
protected internal List<XmlNode> PossibleColumnSpecs { get; set; }
773766

774767
internal ISortItemProvider SortItemProvider
775768
{

0 commit comments

Comments
 (0)