示例#1
0
        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);
                }
            }
        }
示例#2
0
        /// <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);
        }
示例#3
0
 private static SourceLineNumber SourceLineNumber4(Wix3.SourceLineNumberCollection source)
 {
     return(String.IsNullOrEmpty(source?.EncodedSourceLineNumbers) ? null : SourceLineNumber.CreateFromEncoded(source.EncodedSourceLineNumbers));
 }