Skip to content
This repository was archived by the owner on Feb 12, 2025. It is now read-only.

Commit 8da0905

Browse files
committed
The multi source control must cope with previous (buggy) information transparently
1 parent 1b1bf62 commit 8da0905

File tree

2 files changed

+91
-5
lines changed

2 files changed

+91
-5
lines changed

project/UnitTests/Core/SourceControl/MultiSourceControlTest.cs

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,80 @@ public void PassesIndividualSourceDataAndCombines()
200200
list.Clear();
201201
Assert.AreEqual("sc1", to.SourceControlData[1].Name, "SourceControlData[1].Name");
202202
}
203+
204+
[Test]
205+
public void PassesIndividualSourceDataAndCombinesSingleSourceControl()
206+
{
207+
IntegrationResult from = IntegrationResultMother.CreateSuccessful(DateTime.Now);
208+
IntegrationResult to = IntegrationResultMother.CreateSuccessful(DateTime.Now.AddDays(10));
209+
210+
string scValue = null;
211+
List<NameValuePair> list = new List<NameValuePair>();
212+
213+
list.Add(new NameValuePair("name0", "first"));
214+
scValue = XmlConversionUtil.ConvertObjectToXml(list);
215+
from.SourceControlData.Add(new NameValuePair("sc0", scValue));
216+
list.Clear();
217+
218+
List<ISourceControl> sourceControls = new List<ISourceControl>();
219+
sourceControls.Add(new MockSourceControl());
220+
221+
MultiSourceControl multiSourceControl = new MultiSourceControl();
222+
multiSourceControl.SourceControls = sourceControls.ToArray();
223+
224+
//// EXECUTE
225+
ArrayList returnedMods = new ArrayList(multiSourceControl.GetModifications(from, to));
226+
227+
//// VERIFY
228+
Assert.AreEqual(from.SourceControlData.Count, to.SourceControlData.Count, "SourceControlData.Count");
229+
230+
list.Add(new NameValuePair("name0", "first"));
231+
Assert.AreEqual(XmlConversionUtil.ConvertObjectToXml(list), to.SourceControlData[0].Value, "SourceControlData[0].Value");
232+
list.Clear();
233+
Assert.AreEqual("sc0", to.SourceControlData[0].Name, "SourceControlData[0].Name");
234+
}
235+
236+
[Test]
237+
public void MigratesSingleSourceControlDataToNewFormat()
238+
{
239+
IntegrationResult from = IntegrationResultMother.CreateSuccessful(DateTime.Now);
240+
IntegrationResult to = IntegrationResultMother.CreateSuccessful(DateTime.Now.AddDays(10));
241+
242+
ArrayList mocks = new ArrayList();
243+
mocks.Add(CreateModificationsSourceControlMock(new Modification[] { }, from, to));
244+
mocks.Add(CreateModificationsSourceControlMock(null, from, to));
245+
246+
ArrayList scList = new ArrayList();
247+
foreach (DynamicMock mock in mocks)
248+
{
249+
scList.Add(mock.MockInstance);
250+
}
251+
scList.Add(new MockSourceControl());
252+
253+
from.SourceControlData.Add(new NameValuePair("commit", "first"));
254+
255+
MultiSourceControl multiSourceControl = new MultiSourceControl();
256+
multiSourceControl.SourceControls = (ISourceControl[])scList.ToArray(typeof(ISourceControl));
257+
258+
//// EXECUTE
259+
ArrayList returnedMods = new ArrayList(multiSourceControl.GetModifications(from, to));
260+
261+
//// VERIFY
262+
Assert.AreEqual(3, to.SourceControlData.Count, "SourceControlData.Count");
263+
264+
List<NameValuePair> list = new List<NameValuePair>();
265+
266+
Assert.AreEqual(XmlConversionUtil.ConvertObjectToXml(list), to.SourceControlData[0].Value, "SourceControlData[0].Value");
267+
Assert.AreEqual("sc0", to.SourceControlData[0].Name, "SourceControlData[0].Name");
268+
269+
Assert.AreEqual(XmlConversionUtil.ConvertObjectToXml(list), to.SourceControlData[1].Value, "SourceControlData[1].Value");
270+
Assert.AreEqual("sc1", to.SourceControlData[1].Name, "SourceControlData[1].Name");
271+
272+
list.Add(new NameValuePair("commit", "first"));
273+
Assert.AreEqual(XmlConversionUtil.ConvertObjectToXml(list), to.SourceControlData[2].Value, "SourceControlData[2].Value");
274+
list.Clear();
275+
Assert.AreEqual("sc2", to.SourceControlData[2].Name, "SourceControlData[2].Name");
276+
}
203277

204278
[Test]
205279
public void IfRequireChangesFromAllTrueAndAllSourceControlHasModificationsThenReturnMods()

project/core/sourcecontrol/MultiSourceControl.cs

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -119,19 +119,31 @@ public override Modification[] GetModifications(IIntegrationResult from, IIntegr
119119
List<NameValuePair> originalSourceControlData = new List<NameValuePair>();
120120
List<NameValuePair> finalSourceControlData = new List<NameValuePair>();
121121
originalSourceControlData.AddRange(from.SourceControlData);
122+
var originalSourceControlDataCount = originalSourceControlData.Count;
123+
124+
var sourceControlDataType = from.SourceControlData.GetType();
122125

123126
var modificationSet = new Dictionary<Modification, bool>();
124-
int sourceControlDataIndex = 0;
127+
int sourceControlIndex = 0;
125128
foreach (ISourceControl sourceControl in SourceControls)
126129
{
127130
from.SourceControlData.Clear();
128-
if (sourceControlDataIndex < originalSourceControlData.Count)
129-
from.SourceControlData.AddRange((List<NameValuePair>)(XmlConversionUtil.ConvertXmlToObject(from.SourceControlData.GetType(), originalSourceControlData[sourceControlDataIndex].Value)));
131+
132+
if (originalSourceControlDataCount > 1 ||
133+
(originalSourceControlDataCount == 1 &&
134+
sourceControlIndex == 0 &&
135+
XmlConversionUtil.CanConvertXmlToObject(sourceControlDataType, originalSourceControlData[0].Value)
136+
)
137+
)
138+
from.SourceControlData.AddRange((List<NameValuePair>)(XmlConversionUtil.ConvertXmlToObject(sourceControlDataType, originalSourceControlData[sourceControlIndex].Value)));
139+
else if ((originalSourceControlDataCount == 1) && (sourceControlIndex == SourceControls.Length - 1))
140+
from.SourceControlData.Add(originalSourceControlData[0]);
141+
130142
to.SourceControlData.Clear();
131143

132144
Modification[] mods = sourceControl.GetModifications(from, to);
133145

134-
finalSourceControlData.Add(new NameValuePair(string.Format("sc{0:d}", sourceControlDataIndex), XmlConversionUtil.ConvertObjectToXml(to.SourceControlData)));
146+
finalSourceControlData.Add(new NameValuePair(string.Format("sc{0:d}", sourceControlIndex), XmlConversionUtil.ConvertObjectToXml(to.SourceControlData)));
135147

136148
if (mods != null && mods.Length > 0)
137149
{
@@ -146,7 +158,7 @@ public override Modification[] GetModifications(IIntegrationResult from, IIntegr
146158
break;
147159
}
148160

149-
sourceControlDataIndex++;
161+
sourceControlIndex++;
150162
}
151163

152164
to.SourceControlData.Clear();

0 commit comments

Comments
 (0)