public void TestBothEmptySources() { var diffEngine = new MyersDiffEngine(); var operations = diffEngine.GetDiff(null, null); Assert.IsNull(operations); }
private static void Main(string[] args) { if (args == null || args.Length == 0 || (args.Length != 4 && args.Length != 5) || args.Any(string.IsNullOrEmpty)) { PrintUsage(); return; } var operation = args[0]?.Replace("-", string.Empty).ToUpperInvariant(); if (string.IsNullOrEmpty(operation)) { PrintUsage(); return; } var outToConsole = args.Length == 4; ISource source = null, target1 = null, target2 = null; switch (Array.IndexOf(m_operations, operation)) { case 0: source = new StringSource(args[1]); target1 = new StringSource(args[2]); target2 = new StringSource(args[3]); break; case 1: try { source = new TextFileSource(args[1]); target1 = new TextFileSource(args[2]); target2 = new TextFileSource(args[3]); } catch (Exception ex) { Console.WriteLine("Во время загрузки файлов произошла ошибка:"); Console.WriteLine(ex.Message); PrintUsage(); return; } break; default: PrintUsage(); break; } var diffEngine = new MyersDiffEngine(); var operations1 = diffEngine.GetDiff(source, target1); var operations2 = diffEngine.GetDiff(source, target2); var mergeEngine = new MergeEngine(ResolveStrategyAction.AcceptFirst, false); mergeEngine.ConflictOperationsResolveStrategies.Add(OperationKind.Insert, new ResolveStrategy(ResolveStrategyAction.AcceptAll, true)); var final = mergeEngine.GetMergeOperations(operations1.ToList(), operations2.ToList()); Console.WriteLine("Эталон: {0}", source); Console.WriteLine("Первый элемент: {0}", target1); Console.WriteLine("Второй элемент: {0}", target2); var sb = new StringBuilder(); foreach (var op in final) { switch (op.Kind) { case OperationKind.Equal: case OperationKind.Insert: default: sb.AppendFormat("{0}{1}", op.IsConflict ? " Конфликт! >" : string.Empty, op.Source[op.Index]); break; case OperationKind.Unknown: case OperationKind.Delete: break; } } Console.WriteLine(); Console.WriteLine("---РЕЗУЛЬТАТ---"); if (outToConsole) { Console.WriteLine(sb.ToString()); } else { try { using (var wrtr = new StreamWriter(args[4])) { wrtr.Write(sb.ToString()); wrtr.Close(); } Console.WriteLine("Изменения записаны в файл {0}", args[4]); } catch (Exception ex) { Console.WriteLine("Во время записи результата в файл произошла ошибка:"); Console.WriteLine(ex.Message); PrintUsage(); return; } } Console.WriteLine(); Console.WriteLine("Нажмите <Enter> для завершения работы..."); Console.ReadLine(); }