public void IncludeSourceLineNumbersPreserved() { var folder = TestData.Get(@"TestData\IncludePath"); using (var fs = new DisposableFileSystem()) { var baseFolder = fs.GetFolder(); var intermediateFolder = Path.Combine(baseFolder, "obj"); var result = WixRunner.Execute(warningsAsErrors: false, new[] { "build", Path.Combine(folder, "Package.wxs"), Path.Combine(folder, "PackageComponents.wxs"), "-loc", Path.Combine(folder, "Package.en-us.wxl"), "-includepath", Path.Combine(folder, "data"), "-bindpath", Path.Combine(folder, "data"), "-intermediateFolder", intermediateFolder, "-o", Path.Combine(baseFolder, @"bin\test.msi") }); result.AssertSuccess(); using (var output = WixOutput.Read(Path.Combine(baseFolder, @"bin\test.wixpdb"))) { var intermediate = Intermediate.Load(output); var component = intermediate.Sections.Single().Symbols.OfType <ComponentSymbol>().Single(); Assert.Equal(3, component.SourceLineNumbers.LineNumber); Assert.Equal(5, component.SourceLineNumbers.Parent.LineNumber); var encoded = component.SourceLineNumbers.GetEncoded(); var decoded = SourceLineNumber.CreateFromEncoded(encoded); Assert.Equal(3, decoded.LineNumber); Assert.Equal(5, decoded.Parent.LineNumber); } } }
/// <summary> /// Creates a Row from the XmlReader. /// </summary> /// <param name="reader">Reader to get data from.</param> /// <param name="table">Table for this row.</param> /// <returns>New row object.</returns> internal static Row Read(XmlReader reader, Table table) { Debug.Assert("row" == reader.LocalName); bool empty = reader.IsEmptyElement; RowOperation operation = RowOperation.None; bool redundant = false; string sectionId = null; SourceLineNumber sourceLineNumbers = null; while (reader.MoveToNextAttribute()) { switch (reader.LocalName) { case "op": operation = (RowOperation)Enum.Parse(typeof(RowOperation), reader.Value, true); break; case "redundant": redundant = reader.Value.Equals("yes"); break; case "sectionId": sectionId = reader.Value; break; case "sourceLineNumber": sourceLineNumbers = SourceLineNumber.CreateFromEncoded(reader.Value); break; } } var row = table.CreateRow(sourceLineNumbers); row.Operation = operation; row.Redundant = redundant; row.SectionId = sectionId; // loop through all the fields in a row if (!empty) { var done = false; var field = 0; // loop through all the fields in a row while (!done && reader.Read()) { switch (reader.NodeType) { case XmlNodeType.Element: switch (reader.LocalName) { case "field": if (row.Fields.Length <= field) { if (!reader.IsEmptyElement) { throw new XmlException(); } } else { row.Fields[field].Read(reader); } ++field; break; default: throw new XmlException(); } break; case XmlNodeType.EndElement: done = true; break; } } if (!done) { throw new XmlException(); } } return(row); }
private static SourceLineNumber SourceLineNumber4(Wix3.SourceLineNumberCollection source) { return(String.IsNullOrEmpty(source?.EncodedSourceLineNumbers) ? null : SourceLineNumber.CreateFromEncoded(source.EncodedSourceLineNumbers)); }