/// <summary> /// Common internal implementation for all 4 constructors above /// </summary> private FileCompiler(string libraryName, string textName, CobolFile loadedCobolFile, SourceFileProvider sourceFileProvider, IProcessedTokensDocumentProvider documentProvider, ColumnsLayout columnsLayout, ITextDocument textDocument, TypeCobolOptions compilerOptions, SymbolTable customSymbols, bool isCopyFile, [CanBeNull] MultilineScanState scanState) { // 1.a Find the Cobol source file CobolFile sourceFile = null; if (textName != null) { if (sourceFileProvider.TryGetFile(libraryName, textName, out sourceFile)) { CobolFile = sourceFile; } else { throw new Exception(String.Format("Could not find a Cobol source file named {0} in {1}", textName, libraryName)); } } // 1.b Register a Cobol source file which was already loaded else if(loadedCobolFile != null) { CobolFile = loadedCobolFile; } // 2.a Load it in a new text document in memory if (textDocument == null) { TextDocument = new ReadOnlyTextDocument(sourceFile.Name, sourceFile.Encoding, columnsLayout, sourceFile.ReadChars()); } // 2.b Load it in an existing text document in memory else if (sourceFile != null) { TextDocument = textDocument; textDocument.LoadChars(sourceFile.ReadChars()); } // 2.c Use a pre-existing text document // - not yet associated with a Cobol source file // - with a Cobol source file already loaded else if (sourceFile == null || loadedCobolFile != null) { TextDocument = textDocument; } // 3. Prepare the data structures used by the different steps of the compiler if (isCopyFile) { CompilationResultsForCopy = new CompilationDocument(TextDocument.Source, TextDocument.Lines, compilerOptions, documentProvider, scanState); CompilationResultsForCopy.CustomSymbols = customSymbols; } else { CompilationResultsForProgram = new CompilationUnit(TextDocument.Source, TextDocument.Lines, compilerOptions, documentProvider); CompilationResultsForProgram.CustomSymbols = customSymbols; } CompilerOptions = compilerOptions; }
// -- Project creation and persistence -- /// <summary> /// Create a new Cobol compilation project in a local directory /// </summary> public CompilationProject(string projectName, string rootDirectory, string[] fileExtensions, Encoding encoding, EndOfLineDelimiter endOfLineDelimiter, int fixedLineLength, ColumnsLayout columnsLayout, TypeCobolOptions compilationOptions) { Name = projectName; RootDirectory = rootDirectory; SourceFileProvider = new SourceFileProvider(); rootDirectoryLibrary = SourceFileProvider.AddLocalDirectoryLibrary(rootDirectory, true, fileExtensions, encoding, endOfLineDelimiter, fixedLineLength); Encoding = encoding; EndOfLineDelimiter = endOfLineDelimiter; FixedLineLength = fixedLineLength; ColumnsLayout = columnsLayout; CompilationOptions = compilationOptions; CobolFiles = new Dictionary<string, CobolFile>(); CobolTextReferences = new Dictionary<string, CobolFile>(); CobolProgramCalls = new Dictionary<string, CobolFile>(); }
/// <summary> /// Use a pre-existing text document, already initialized from a Cobol file /// </summary> public FileCompiler(ITextDocument textDocument, CobolFile loadedCobolFile, SourceFileProvider sourceFileProvider, IProcessedTokensDocumentProvider documentProvider, TypeCobolOptions compilerOptions, bool isCopyFile) : this(null, null, null, sourceFileProvider, documentProvider, default(ColumnsLayout), textDocument, compilerOptions, null, isCopyFile) { }
/// <summary> /// Load a Cobol source file in an pre-existing text document /// </summary> public FileCompiler(string libraryName, string textName, SourceFileProvider sourceFileProvider, IProcessedTokensDocumentProvider documentProvider, ITextDocument textDocument, TypeCobolOptions compilerOptions, bool isCopyFile) : this(libraryName, textName, null, sourceFileProvider, documentProvider, default(ColumnsLayout), textDocument, compilerOptions, null, isCopyFile) { }
/// <summary> /// Load a Cobol source file in memory /// </summary> public FileCompiler(string libraryName, string textName, SourceFileProvider sourceFileProvider, IProcessedTokensDocumentProvider documentProvider, ColumnsLayout columnsLayout, TypeCobolOptions compilerOptions, CodeModel.SymbolTable customSymbols, bool isCopyFile) : this(libraryName, textName, null, sourceFileProvider, documentProvider, columnsLayout, null, compilerOptions, customSymbols, isCopyFile) { }
public static void Check_ReferenceFormatDocument() { DocumentFormat docFormat = DocumentFormat.RDZReferenceFormat; SourceFileProvider fileProvider = new SourceFileProvider(); fileProvider.AddLocalDirectoryLibrary( PlatformUtils.GetPathForProjectFile(@"Compiler\Text\Samples"), false, new string[] { ".cpy" }, docFormat.Encoding, docFormat.EndOfLineDelimiter, docFormat.FixedLineLength); CobolFile cobolFile; if (!fileProvider.TryGetFile("MSVCOUT", out cobolFile)) { throw new Exception("File MSVCOUT.cpy not found"); } // Load the CobolFile in a TextDocument ReadOnlyTextDocument textDocument = new ReadOnlyTextDocument("MSVCOUT.cpy", docFormat.Encoding, docFormat.ColumnsLayout, cobolFile.ReadChars()); if(textDocument.CharAt(0) != '0') { throw new Exception("Character at position 0 should be 0"); } if (textDocument.CharAt(88) != 'M') { throw new Exception("Character at position 88 should be M"); } if (textDocument.CharAt(17899) != '/') { throw new Exception("Character at position 17899 should be /"); } if (textDocument.CharAt(17919) != '1') { throw new Exception("Character at position 17191 should be 1"); } if(textDocument.Chars.Skip(88).First() != 'M') { throw new Exception("Character enumerator after 88 iterations should return M"); } ReadOnlyTextLine line = (ReadOnlyTextLine)textDocument.GetLineByIndex(0); if(line.Length != 80 || line.LineIndex != 0 || line.StartOffset != 0 || line.Text != "000010*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- 00001001") { throw new Exception("Incorrect line at index 0"); } line = (ReadOnlyTextLine)textDocument.GetLineByIndex(1); if (line.Length != 80 || line.LineIndex != 1 || line.StartOffset != 80 || line.Text != "000020*-Maintenance frame - Created on 14 Oct 2013 at 17:27:08 00002001") { throw new Exception("Incorrect line at index 1"); } line = (ReadOnlyTextLine)textDocument.GetLineByIndex(223); if (line.Length != 80 || line.LineIndex != 223 || line.StartOffset != 17840 || line.Text != "002240 05 PIC X(08) VALUE '/MSVCOUT'. 02010001") { throw new Exception("Incorrect line at index 223"); } int indexOfCharInLine = -1; line = (ReadOnlyTextLine)textDocument.GetLineByOffset(12, out indexOfCharInLine); if (line.LineIndex != 0 || indexOfCharInLine != 12) { throw new Exception("Incorrect line at offset 12"); } line = (ReadOnlyTextLine)textDocument.GetLineByOffset(159, out indexOfCharInLine); if (line.LineIndex != 1 || indexOfCharInLine != 79) { throw new Exception("Incorrect line at offset 79"); } line = (ReadOnlyTextLine)textDocument.GetLineByOffset(17899, out indexOfCharInLine); if (line.LineIndex != 223 || indexOfCharInLine != 59) { throw new Exception("Incorrect line at offset 17899"); } if (textDocument.Length != 17920) { throw new Exception("Document should have length 17920"); } if (textDocument.LineCount != 224) { throw new Exception("Document should have 224 line count"); } if (textDocument.Lines.Count() != 224) { throw new Exception("Document should have 224 lines"); } }
public static void Check_ASCIICobolFile_FreeTextFormat() { DocumentFormat docFormat = DocumentFormat.FreeTextFormat; SourceFileProvider fileProvider = new SourceFileProvider(); fileProvider.AddLocalDirectoryLibrary( PlatformUtils.GetPathForProjectFile(@"Compiler\File\Samples"), false, new string[] { ".cpy" }, docFormat.Encoding, docFormat.EndOfLineDelimiter, docFormat.FixedLineLength); DummyTextSourceListener textSourceListener = new DummyTextSourceListener(); CobolFile cobolFile; if (fileProvider.TryGetFile("AsciiFreeFormat", out cobolFile)) { // Load the CobolFile in a TextDocument ReadOnlyTextDocument textDocument = new ReadOnlyTextDocument("AsciiFreeFormat.cpy", docFormat.Encoding, docFormat.ColumnsLayout, cobolFile.ReadChars()); // Send all text lines in one batch to the test observer textDocument.TextChanged += textSourceListener.OnTextChanged; textDocument.StartSendingChangeEvents(); } TextChangeMap tce1 = new TextChangeMap(textSourceListener.LastTextChangedEvent.TextChanges.First<TextChange>(), docFormat.ColumnsLayout); if (tce1.LineIndex != 0 || tce1.Type != TextChangeType.LineInserted || tce1.NewLineMap.SequenceNumberText != null || tce1.NewLineMap.IndicatorChar != '/' || tce1.NewLineMap.SourceText != "----------------------------------------------------------------" || tce1.NewLineMap.CommentText != null) { throw new Exception("Error reading line 1 of the ASCII text source (free text format)"); } TextChangeMap tce2 = new TextChangeMap(textSourceListener.LastTextChangedEvent.TextChanges[4], docFormat.ColumnsLayout); if (tce2.LineIndex != 4 || tce2.Type != TextChangeType.LineInserted || tce2.NewLineMap.SequenceNumberText != null || tce2.NewLineMap.IndicatorChar != '*' || tce2.NewLineMap.SourceText != " Comportant TAGs (ou BALISEs) standards/normalisés apposées via commentaires standards à respecter " || tce2.NewLineMap.CommentText != null) { throw new Exception("Error reading line 5 of the ASCII text source (free text format)"); } TextChangeMap tce3 = new TextChangeMap(textSourceListener.LastTextChangedEvent.TextChanges[7], docFormat.ColumnsLayout); if (tce3.LineIndex != 7 || tce3.Type != TextChangeType.LineInserted || tce3.NewLineMap.SequenceNumberText != null || tce3.NewLineMap.IndicatorChar != ' ' || tce3.NewLineMap.SourceText != " 10 PIC X(008) VALUE " || tce3.NewLineMap.CommentText != null) { throw new Exception("Error reading line 8 of the ASCII text source (free text format)"); } TextChangeMap tce4 = new TextChangeMap(textSourceListener.LastTextChangedEvent.TextChanges[8], docFormat.ColumnsLayout); if (tce4.LineIndex != 8 || tce4.Type != TextChangeType.LineInserted || tce4.NewLineMap.SequenceNumberText != null || tce4.NewLineMap.IndicatorChar != ' ' || tce4.NewLineMap.SourceText != " 'MSVCINP '. " || tce4.NewLineMap.CommentText != null) { throw new Exception("Error reading line 9 of the ASCII text source (free text format)"); } TextChangeMap tce5 = new TextChangeMap(textSourceListener.LastTextChangedEvent.TextChanges[13], docFormat.ColumnsLayout); if (tce5.LineIndex != 13 || tce5.Type != TextChangeType.LineInserted || tce5.NewLineMap.SequenceNumberText != null || tce5.NewLineMap.IndicatorChar != 'D' || tce5.NewLineMap.SourceText != " 15 :MSVCINP:-AppSessnId PIC X(064). " || tce5.NewLineMap.CommentText != null) { throw new Exception("Error reading line 14 of the ASCII text source (free text format)"); } TextChangeMap tce6 = new TextChangeMap(textSourceListener.LastTextChangedEvent.TextChanges[18], docFormat.ColumnsLayout); if (tce6.LineIndex != 18 || tce6.Type != TextChangeType.LineInserted || tce6.NewLineMap.SequenceNumberText != null || tce6.NewLineMap.IndicatorChar != ' ' || tce6.NewLineMap.SourceText != " 05 FILLER PIC X(499). " || tce6.NewLineMap.CommentText != null) { throw new Exception("Error reading line 19 of the ASCII text source (free text format)"); } TextChangeMap tce7 = new TextChangeMap(textSourceListener.LastTextChangedEvent.TextChanges.Last<TextChange>(), docFormat.ColumnsLayout); if (tce7.LineIndex != 27 || tce7.Type != TextChangeType.LineInserted || tce7.NewLineMap.SequenceNumberText != null || tce7.NewLineMap.IndicatorChar != 'd' || tce7.NewLineMap.SourceText != " 05 PIC X(008) VALUE '/MSVCINP'. " || tce7.NewLineMap.CommentText != null) { throw new Exception("Error reading line 28 of the ASCII text source (free text format)"); } }
public static void Check_FreeFormatDocument() { DocumentFormat docFormat = DocumentFormat.FreeTextFormat; SourceFileProvider fileProvider = new SourceFileProvider(); fileProvider.AddLocalDirectoryLibrary( PlatformUtils.GetPathForProjectFile(@"Compiler\Text\Samples"), false, new string[] { ".cpy" }, docFormat.Encoding, docFormat.EndOfLineDelimiter, docFormat.FixedLineLength); CobolFile cobolFile; if (!fileProvider.TryGetFile("MSVCINP free format", out cobolFile)) { throw new Exception("File MSVCINP free format.cpy not found"); } // Load the CobolFile in a TextDocument ReadOnlyTextDocument textDocument = new ReadOnlyTextDocument("MSVCINP free format.cpy", docFormat.Encoding, docFormat.ColumnsLayout, cobolFile.ReadChars()); if (textDocument.CharAt(0) != '/') { throw new Exception("Character at position 0 should be 0"); } if (textDocument.CharAt(90) != 'a') { throw new Exception("Character at position 90 should be a"); } if (textDocument.CharAt(2510) != '/') { throw new Exception("Character at position 2510 should be /"); } if (textDocument.CharAt(2522) != ' ') { throw new Exception("Character at position 2522 should be space"); } if (textDocument.Chars.Skip(90).First() != 'a') { throw new Exception("Character enumerator after 90 iterations should return a"); } ReadOnlyTextLine line = (ReadOnlyTextLine)textDocument.GetLineByIndex(0); if (line.Length != 65 || line.LineIndex != 0 || line.StartOffset != 0 || line.Text != "/----------------------------------------------------------------") { throw new Exception("Incorrect line at index 0"); } line = (ReadOnlyTextLine)textDocument.GetLineByIndex(1); if (line.Length != 96 || line.LineIndex != 1 || line.StartOffset != 65 || line.Text != "* MSVCINP partie ALLER FIXE des MESSAGES échangés avec tout SERVICE APPLICATIF C14") { throw new Exception("Incorrect line at index 1"); } line = (ReadOnlyTextLine)textDocument.GetLineByIndex(36); if (line.Length != 66 || line.LineIndex != 36 || line.StartOffset != 2457 || line.Text != "d 05 PIC X(008) VALUE '/MSVCINP'. ") { throw new Exception("Incorrect line at index 36"); } int indexOfCharInLine = -1; line = (ReadOnlyTextLine)textDocument.GetLineByOffset(12, out indexOfCharInLine); if (line.LineIndex != 0 || indexOfCharInLine != 12) { throw new Exception("Incorrect line at offset 12"); } line = (ReadOnlyTextLine)textDocument.GetLineByOffset(881, out indexOfCharInLine); if (line.LineIndex != 12 || indexOfCharInLine != 5) { throw new Exception("Incorrect line at offset 981"); } line = (ReadOnlyTextLine)textDocument.GetLineByOffset(2509, out indexOfCharInLine); if (line.LineIndex != 36 || indexOfCharInLine != 52) { throw new Exception("Incorrect line at offset 2509"); } if (textDocument.Length != 2523) { throw new Exception("Document should have length 2523"); } if (textDocument.LineCount != 37) { throw new Exception("Document should have 37 line count"); } if (textDocument.Lines.Count() != 37) { throw new Exception("Document should have 37 lines"); } }
public static void Check_UTF8File() { DocumentFormat docFormat = new DocumentFormat(Encoding.UTF8, EndOfLineDelimiter.CrLfCharacters, 0, ColumnsLayout.FreeTextFormat); SourceFileProvider fileProvider = new SourceFileProvider(); fileProvider.AddLocalDirectoryLibrary( PlatformUtils.GetPathForProjectFile(@"Compiler\File\Samples"), false, null, docFormat.Encoding, docFormat.EndOfLineDelimiter, docFormat.FixedLineLength); DummyTextSourceListener textSourceListener = new DummyTextSourceListener(); string filename = "UTF8Format.txt"; CobolFile cobolFile; if (fileProvider.TryGetFile(filename, out cobolFile)) { // Load the CobolFile in a TextDocument ReadOnlyTextDocument textDocument = new ReadOnlyTextDocument(filename, docFormat.Encoding, docFormat.ColumnsLayout, cobolFile.ReadChars()); // Send all text lines in one batch to the test observer textDocument.TextChanged += textSourceListener.OnTextChanged; textDocument.StartSendingChangeEvents(); } TextChangeMap tce; tce = new TextChangeMap(textSourceListener.LastTextChangedEvent.TextChanges.First<TextChange>(), docFormat.ColumnsLayout); CheckLine(filename, tce, 0, "english: hello, world"); tce = new TextChangeMap(textSourceListener.LastTextChangedEvent.TextChanges[1], docFormat.ColumnsLayout); bool okay = false; try { CheckLine(filename, tce, 1, "français: salut, tout le monde"); } catch (Exception) { okay = true; } if (!okay) throw new Exception("Exception should have been thrown!"); CheckLine(filename, tce, 1, "arabic: مرحبا بالعالم"); tce = new TextChangeMap(textSourceListener.LastTextChangedEvent.TextChanges[2], docFormat.ColumnsLayout); CheckLine(filename, tce, 2, "japanese: こんにちは世界"); }
public static void Check_EBCDICCobolFileWithUnsupportedChar() { DocumentFormat docFormat = DocumentFormat.ZOsReferenceFormat; SourceFileProvider fileProvider = new SourceFileProvider(); fileProvider.AddLocalDirectoryLibrary( PlatformUtils.GetPathForProjectFile(@"Compiler\File\Samples"), false, new string[] { ".txt" }, docFormat.Encoding, docFormat.EndOfLineDelimiter, docFormat.FixedLineLength); bool exceptionWasThrownWithCorrectMessage = false; CobolFile cobolFile; if (fileProvider.TryGetFile("EbcdicRefFormatWithBadChars", out cobolFile)) { try { // Load the CobolFile in a TextDocument ReadOnlyTextDocument textDocument = new ReadOnlyTextDocument("EbcdicRefFormatWithBadChars.TXT", docFormat.Encoding, docFormat.ColumnsLayout, cobolFile.ReadChars()); } catch(Exception e) { if (e.Message == "The character code 13 in source encoding IBM EBCDIC (France-Euro) found at position 3072 can not be safely converted to the internal Unicode representation : please replace it with the alphanumeric hexadecimal literal X'0D' in the source text") { exceptionWasThrownWithCorrectMessage = true; } } } if(!exceptionWasThrownWithCorrectMessage) { throw new Exception("Unsupported chars in fixed length EBCDIC source file were not correctly filtered"); } }
public static void Check_EBCDICCobolFile() { DocumentFormat docFormat = DocumentFormat.ZOsReferenceFormat; SourceFileProvider fileProvider = new SourceFileProvider(); fileProvider.AddLocalDirectoryLibrary( PlatformUtils.GetPathForProjectFile(@"Compiler\File\Samples"), false, new string[] { ".txt" }, docFormat.Encoding, docFormat.EndOfLineDelimiter, docFormat.FixedLineLength); DummyTextSourceListener textSourceListener = new DummyTextSourceListener(); CobolFile cobolFile; if (fileProvider.TryGetFile("EbcdicRefFormat", out cobolFile)) { // Load the CobolFile in a TextDocument ReadOnlyTextDocument textDocument = new ReadOnlyTextDocument("EbcdicRefFormat.TXT", docFormat.Encoding, docFormat.ColumnsLayout, cobolFile.ReadChars()); // Send all text lines in one batch to the test observer textDocument.TextChanged += textSourceListener.OnTextChanged; textDocument.StartSendingChangeEvents(); } TextChangeMap tce1 = new TextChangeMap(textSourceListener.LastTextChangedEvent.TextChanges.First<TextChange>(), docFormat.ColumnsLayout); if (tce1.LineIndex != 0 || tce1.Type != TextChangeType.LineInserted || tce1.NewLineMap.SequenceNumberText != "000010" || tce1.NewLineMap.IndicatorChar != ' ' || tce1.NewLineMap.SourceText != "CBL DATA(31) " || tce1.NewLineMap.CommentText != " ") { throw new Exception("Error reading line 1 of the EBCDIC text source"); } TextChangeMap tce2 = new TextChangeMap(textSourceListener.LastTextChangedEvent.TextChanges[9], docFormat.ColumnsLayout); if (tce2.LineIndex != 9 || tce2.Type != TextChangeType.LineInserted || tce2.NewLineMap.SequenceNumberText != "000200" || tce2.NewLineMap.IndicatorChar != '*' || tce2.NewLineMap.SourceText != "REMARKS. COPY=(YACMERM YACMCTL). " || tce2.NewLineMap.CommentText != "00600000") { throw new Exception("Error reading line 10 of the EBCDIC text source"); } TextChangeMap tce3 = new TextChangeMap(textSourceListener.LastTextChangedEvent.TextChanges[31], docFormat.ColumnsLayout); if (tce3.LineIndex != 31 || tce3.Type != TextChangeType.LineInserted || tce3.NewLineMap.SequenceNumberText != "000420" || tce3.NewLineMap.IndicatorChar != ' ' || tce3.NewLineMap.SourceText != " 05 FILLER PIC XXX VALUE ' ; '. " || tce3.NewLineMap.CommentText != "00860000") { throw new Exception("Error reading line 32 of the EBCDIC text source"); } TextChangeMap tce4 = new TextChangeMap(textSourceListener.LastTextChangedEvent.TextChanges.Last<TextChange>(), docFormat.ColumnsLayout); if (tce4.LineIndex != 223 || tce4.Type != TextChangeType.LineInserted || tce4.NewLineMap.SequenceNumberText != "002340" || tce4.NewLineMap.IndicatorChar != '*' || tce4.NewLineMap.SourceText != " CALL 'ILBOABN0' USING LCP-ABND-CODE. " || tce4.NewLineMap.CommentText != "02740000") { throw new Exception("Error reading line 224 of the EBCDIC text source"); } }
public static void Check_ASCIICobolFile_ReferenceFormat() { DocumentFormat docFormat = DocumentFormat.RDZReferenceFormat; SourceFileProvider fileProvider = new SourceFileProvider(); fileProvider.AddLocalDirectoryLibrary( PlatformUtils.GetPathForProjectFile(@"Compiler\File\Samples"), false, new string[] { ".cpy" }, docFormat.Encoding, docFormat.EndOfLineDelimiter, docFormat.FixedLineLength); DummyTextSourceListener textSourceListener = new DummyTextSourceListener(); CobolFile cobolFile; if (fileProvider.TryGetFile("AsciiRefFormat", out cobolFile)) { // Load the CobolFile in a TextDocument ReadOnlyTextDocument textDocument = new ReadOnlyTextDocument("MSVCOUT.cpy", docFormat.Encoding, docFormat.ColumnsLayout, cobolFile.ReadChars()); // Send all text lines in one batch to the test observer textDocument.TextChanged += textSourceListener.OnTextChanged; textDocument.StartSendingChangeEvents(); } TextChangeMap tce1 = new TextChangeMap(textSourceListener.LastTextChangedEvent.TextChanges.First<TextChange>(), docFormat.ColumnsLayout); if (tce1.LineIndex != 0 || tce1.Type != TextChangeType.LineInserted || tce1.NewLineMap.SequenceNumberText != "000100" || tce1.NewLineMap.IndicatorChar != '*' || tce1.NewLineMap.SourceText != "----------------------------------------------------------------*" || tce1.NewLineMap.CommentText != "00010000") { throw new Exception("Error reading line 1 of the ASCII text source (reference format)"); } TextChangeMap tce2 = new TextChangeMap(textSourceListener.LastTextChangedEvent.TextChanges[114], docFormat.ColumnsLayout); if (tce2.LineIndex != 114 || tce2.Type != TextChangeType.LineInserted || tce2.NewLineMap.SequenceNumberText != "001780" || tce2.NewLineMap.IndicatorChar != ' ' || tce2.NewLineMap.SourceText != " 20 FILLER PIC X(020). " || tce2.NewLineMap.CommentText != "01550001") { throw new Exception("Error reading line 115 of the ASCII text source (reference format)"); } TextChangeMap tce3 = new TextChangeMap(textSourceListener.LastTextChangedEvent.TextChanges[132], docFormat.ColumnsLayout); if (tce3.LineIndex != 132 || tce3.Type != TextChangeType.LineInserted || tce3.NewLineMap.SequenceNumberText != "002030" || tce3.NewLineMap.IndicatorChar != ' ' || tce3.NewLineMap.SourceText != " 15 :MSVCOUT:-DataElm OCCURS 10 TIMES " || tce3.NewLineMap.CommentText != "01800001") { throw new Exception("Error reading line 132 of the ASCII text source (reference format)"); } TextChangeMap tce4 = new TextChangeMap(textSourceListener.LastTextChangedEvent.TextChanges.Last<TextChange>(), docFormat.ColumnsLayout); if (tce4.LineIndex != 147 || tce4.Type != TextChangeType.LineInserted || tce4.NewLineMap.SequenceNumberText != "002240" || tce4.NewLineMap.IndicatorChar != ' ' || tce4.NewLineMap.SourceText != " 05 PIC X(08) VALUE '/MSVCOUT'. " || tce4.NewLineMap.CommentText != "02010001") { throw new Exception("Error reading line 224 of the ASCII text source (reference format)"); } }
public static void Check_ASCIICobolFile_LinuxReferenceFormat() { DocumentFormat docFormat = DocumentFormat.RDZReferenceFormat; SourceFileProvider fileProvider = new SourceFileProvider(); fileProvider.AddLocalDirectoryLibrary( PlatformUtils.GetPathForProjectFile(@"Compiler\File\Samples"), false, null, docFormat.Encoding, docFormat.EndOfLineDelimiter, docFormat.FixedLineLength); DummyTextSourceListener textSourceListener = new DummyTextSourceListener(); CobolFile cobolFile; if (fileProvider.TryGetFile("AsciiLinuxFormat.14", out cobolFile)) { // Load the CobolFile in a TextDocument ReadOnlyTextDocument textDocument = new ReadOnlyTextDocument("AsciiLinuxFormat.14", docFormat.Encoding, docFormat.ColumnsLayout, cobolFile.ReadChars()); // Send all text lines in one batch to the test observer textDocument.TextChanged += textSourceListener.OnTextChanged; textDocument.StartSendingChangeEvents(); } TextChangeMap tce1 = new TextChangeMap(textSourceListener.LastTextChangedEvent.TextChanges.First<TextChange>(), docFormat.ColumnsLayout); if (tce1.LineIndex != 0 || tce1.Type != TextChangeType.LineInserted || tce1.NewLineMap.SequenceNumberText != null || tce1.NewLineMap.IndicatorChar != ' ' || tce1.NewLineMap.SourceText != null || tce1.NewLineMap.CommentText != null) { throw new Exception("Error reading line 1 of the ASCII Linux text source (reference format)"); } TextChangeMap tce2 = new TextChangeMap(textSourceListener.LastTextChangedEvent.TextChanges[5], docFormat.ColumnsLayout); if (tce2.LineIndex != 5 || tce2.Type != TextChangeType.LineInserted || tce2.NewLineMap.SequenceNumberText != " " || tce2.NewLineMap.IndicatorChar != ' ' || tce2.NewLineMap.SourceText != "COPY \"copy.inc\"" || tce2.NewLineMap.CommentText != null) { throw new Exception("Error reading line 6 of the ASCII Linux text source (reference format)"); } TextChangeMap tce3 = new TextChangeMap(textSourceListener.LastTextChangedEvent.TextChanges[7], docFormat.ColumnsLayout); if (tce3.LineIndex != 7 || tce3.Type != TextChangeType.LineInserted || tce3.NewLineMap.SequenceNumberText != " " || tce3.NewLineMap.IndicatorChar != ' ' || tce3.NewLineMap.SourceText != " LEADING ==NORM== BY ==SECOND==." || tce3.NewLineMap.CommentText != null) { throw new Exception("Error reading line 8 of the ASCII Linux text source (reference format)"); } TextChangeMap tce4 = new TextChangeMap(textSourceListener.LastTextChangedEvent.TextChanges.Last<TextChange>(), docFormat.ColumnsLayout); if (tce4.LineIndex != 13 || tce4.Type != TextChangeType.LineInserted || tce4.NewLineMap.SequenceNumberText != " " || tce4.NewLineMap.IndicatorChar != ' ' || tce4.NewLineMap.SourceText != " STOP RUN." || tce4.NewLineMap.CommentText != null) { throw new Exception("Error reading line 14 of the ASCII Linux text source (reference format)"); } }