예제 #1
0
        private void CheckDashboardStrings(Boolean unusedOnly)
        {
            // Init Folders
            var currentDir = System.IO.Directory.GetCurrentDirectory();

            Trace("CurrentDir: {0}", currentDir);

            var rootFolderInfo = ResolveFolder(currentDir, WebFolder);

            Trace("Web Root: {0}", rootFolderInfo.FullName);

            var outputFolderInfo = ResolveFolder(currentDir, OutputPath);

            Trace("Output Path: {0}", outputFolderInfo.FullName);

            // Load Strings
            var stringsFileName = Path.Combine(rootFolderInfo.FullName, StringsFile);

            if (!File.Exists(stringsFileName))
            {
                throw new Exception(string.Format("Strings file not found: {0}", stringsFileName));
            }

            int lineNumbers;
            var stringsDic = this.CreateStringsDictionary(new FileInfo(stringsFileName), out lineNumbers);

            Trace("Loaded {0} strings from strings file containing {1} lines", stringsDic.Count, lineNumbers);

            var allFiles = rootFolderInfo.GetFiles("*", SearchOption.AllDirectories);

            var filteredFiles1 = allFiles.Where(f => TargetExtensions.Any(e => string.Equals(e, f.Extension, StringComparison.OrdinalIgnoreCase)));
            var filteredFiles2 = filteredFiles1.Where(f => !ExcludePaths.Any(p => f.FullName.Contains(p)));

            var selectedFiles = filteredFiles2.OrderBy(f => f.FullName).ToList();

            var wordIndex = IndexBuilder.BuildIndexFromFiles(selectedFiles, rootFolderInfo.FullName);

            Trace("Created word index from {0} files containing {1} individual words", selectedFiles.Count, wordIndex.Keys.Count);

            var outputFileName = Path.Combine(outputFolderInfo.FullName, string.Format("StringCheck_{0:yyyyMMddHHmmss}.xml", DateTime.Now));
            var settings       = new XmlWriterSettings
            {
                Indent   = true,
                Encoding = Encoding.UTF8,
                WriteEndDocumentOnClose = true
            };

            Trace("Output file: {0}", outputFileName);

            using (XmlWriter writer = XmlWriter.Create(outputFileName, settings))
            {
                writer.WriteStartDocument(true);

                // Write the Processing Instruction node.
                string xslText = "type=\"text/xsl\" href=\"StringCheck.xslt\"";
                writer.WriteProcessingInstruction("xml-stylesheet", xslText);

                writer.WriteStartElement("StringUsages");
                writer.WriteAttributeString("ReportTitle", unusedOnly ? "Unused Strings Report" : "String Usage Report");
                writer.WriteAttributeString("Mode", unusedOnly ? "UnusedOnly" : "All");

                foreach (var kvp in stringsDic)
                {
                    var occurences = wordIndex.Find(kvp.Key);

                    if (occurences == null || !unusedOnly)
                    {
                        ////Trace("{0}: {1}", kvp.Key, kvp.Value);
                        writer.WriteStartElement("Dictionary");
                        writer.WriteAttributeString("Token", kvp.Key);
                        writer.WriteAttributeString("Text", kvp.Value);

                        if (occurences != null && !unusedOnly)
                        {
                            foreach (var occurence in occurences)
                            {
                                writer.WriteStartElement("Occurence");
                                writer.WriteAttributeString("FileName", occurence.FileName);
                                writer.WriteAttributeString("FullPath", occurence.FullPath);
                                writer.WriteAttributeString("LineNumber", occurence.LineNumber.ToString());
                                writer.WriteEndElement();
                                ////Trace("    {0}:{1}", occurence.FileName, occurence.LineNumber);
                            }
                        }

                        writer.WriteEndElement();
                    }
                }
            }

            TestContext.AddResultFile(outputFileName);
            TestContext.AddResultFile(outputFolderInfo.FullName);
        }