diff --git a/src/Forms/FixCommonErrors.cs b/src/Forms/FixCommonErrors.cs index 781de3ca1..57c639faa 100644 --- a/src/Forms/FixCommonErrors.cs +++ b/src/Forms/FixCommonErrors.cs @@ -1373,6 +1373,11 @@ namespace Nikse.SubtitleEdit.Forms { Paragraph p = _subtitle.Paragraphs[i]; Paragraph next = _subtitle.GetParagraphOrDefault(i + 1); + string nextText = string.Empty; + if (next != null) + nextText = Utilities.RemoveHtmlTags(next.Text).TrimStart('-').TrimStart(); + string tempNoHtml = Utilities.RemoveHtmlTags(p.Text).TrimEnd(); + if (IsOneLineUrl(p.Text)) { @@ -1380,11 +1385,11 @@ namespace Nikse.SubtitleEdit.Forms } else if (next != null && next.Text.Length > 0 && - Utilities.GetLetters(true, false, false).Contains(next.Text[0].ToString()) && - p.Text.Length > 0 && - (!"\",.!?:;>-])♪♫".Contains(p.Text[p.Text.Length - 1].ToString()))) + Utilities.GetLetters(true, false, false).Contains(nextText[0].ToString()) && + tempNoHtml.Length > 0 && + (!"\",.!?:;>-])♪♫".Contains(tempNoHtml[tempNoHtml.Length - 1].ToString()))) { - if (!p.Text.EndsWith(")") && !p.Text.EndsWith("]") && !p.Text.EndsWith("*") && !p.Text.EndsWith("¶")) // hear impaired + if (!tempNoHtml.EndsWith(")") && !tempNoHtml.EndsWith("]") && !tempNoHtml.EndsWith("*") && !tempNoHtml.EndsWith("¶")) // hear impaired { if (p.Text != p.Text.ToUpper()) { @@ -1397,10 +1402,22 @@ namespace Nikse.SubtitleEdit.Forms if (AllowFix(i + 1, fixAction)) { string oldText = p.Text; - _totalFixes++; - missigPeriodsAtEndOfLine++; - p.Text += "."; - AddFixToListView(p, i + 1, fixAction, oldText, p.Text); + if (p.Text.EndsWith(">")) + { + int lastLT = p.Text.LastIndexOf("<"); + if (lastLT > 0) + p.Text = p.Text.Insert(lastLT, "."); + } + else + { + p.Text += "."; + } + if (p.Text != oldText) + { + _totalFixes++; + missigPeriodsAtEndOfLine++; + AddFixToListView(p, i + 1, fixAction, oldText, p.Text); + } } } } diff --git a/src/Logic/Configuration.cs b/src/Logic/Configuration.cs index b4bafb6a2..e1abcd7d8 100644 --- a/src/Logic/Configuration.cs +++ b/src/Logic/Configuration.cs @@ -112,6 +112,8 @@ namespace Nikse.SubtitleEdit.Logic Instance._baseDir = Path.GetDirectoryName(a.Location); else Instance._baseDir = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); + if (Instance._baseDir.EndsWith("Test\\bin\\Release")) + Instance._baseDir = Instance._baseDir.Replace("Test\\bin\\Release", "bin\\Release"); if (!Instance._baseDir.EndsWith(Path.DirectorySeparatorChar.ToString())) Instance._baseDir += Path.DirectorySeparatorChar; } diff --git a/src/Test/FixCommonErrorsTest.cs b/src/Test/FixCommonErrorsTest.cs index 23f41c3fa..5816d9827 100644 --- a/src/Test/FixCommonErrorsTest.cs +++ b/src/Test/FixCommonErrorsTest.cs @@ -1,6 +1,6 @@ -using Nikse.SubtitleEdit.Forms; +using System; using Microsoft.VisualStudio.TestTools.UnitTesting; -using System; +using Nikse.SubtitleEdit.Forms; using Nikse.SubtitleEdit.Logic; namespace Test @@ -36,7 +36,14 @@ namespace Test Subtitle subtitle = new Subtitle(); subtitle.Paragraphs.Add(new Paragraph(line, 100, 10000)); target.Initialize(subtitle); - target.ButtonFixClick(null, null); + } + + private static void InitializeFixCommonErrorsLine(FixCommonErrors_Accessor target, string line, string line2) + { + Subtitle subtitle = new Subtitle(); + subtitle.Paragraphs.Add(new Paragraph(line, 100, 10000)); + subtitle.Paragraphs.Add(new Paragraph(line2, 10001, 30000)); + target.Initialize(subtitle); } #region Additional test attributes @@ -70,9 +77,6 @@ namespace Test #endregion #region Merge short lines - /// - ///A test for Merge short lines - /// [TestMethod()] [DeploymentItem("SubtitleEdit.exe")] public void FixShortLinesNormal() @@ -83,9 +87,6 @@ namespace Test Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "This is short!"); } - /// - ///A test for Merge short lines - /// [TestMethod()] [DeploymentItem("SubtitleEdit.exe")] public void FixShortLinesLong() @@ -96,9 +97,6 @@ namespace Test Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "This I'm pretty sure is not a" + Environment.NewLine + "short line, that should be merged!!!"); } - /// - ///A test for Merge short lines - /// [TestMethod()] [DeploymentItem("SubtitleEdit.exe")] public void FixShortLinesNormalItalic() @@ -109,9 +107,6 @@ namespace Test Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "This is short!"); } - /// - ///A test for Merge short lines - /// [TestMethod()] [DeploymentItem("SubtitleEdit.exe")] public void FixShortLinesDialogue() @@ -122,9 +117,6 @@ namespace Test Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "- Hallo!" + Environment.NewLine + "- Hi"); } - /// - ///A test for Merge short lines - /// [TestMethod()] [DeploymentItem("SubtitleEdit.exe")] public void FixShortLinesDialogueItalic() @@ -149,5 +141,130 @@ namespace Test Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "- Hallo!" + Environment.NewLine + "- Hi"); } #endregion + + #region Fix Italics + [TestMethod()] + [DeploymentItem("SubtitleEdit.exe")] + public void FixItalicsBeginOnly() + { + FixCommonErrors_Accessor target = new FixCommonErrors_Accessor(); + InitializeFixCommonErrorsLine(target, "Hey!" + Environment.NewLine + "Boy!"); + target.FixInvalidItalicTags(); + Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "Hey!" + Environment.NewLine + "Boy!"); + } + + [TestMethod()] + [DeploymentItem("SubtitleEdit.exe")] + public void FixItalicsFirstLineEndMissing() + { + FixCommonErrors_Accessor target = new FixCommonErrors_Accessor(); + InitializeFixCommonErrorsLine(target, "(jones) seems their attackers headed north." + Environment.NewLine + "Hi!"); + target.FixInvalidItalicTags(); + Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "(jones) seems their attackers headed north." + Environment.NewLine + "Hi!"); + } + + [TestMethod()] + [DeploymentItem("SubtitleEdit.exe")] + public void FixItalicsStartInMiddle() + { + FixCommonErrors_Accessor target = new FixCommonErrors_Accessor(); + InitializeFixCommonErrorsLine(target, "Seems their attackers headed north."); + target.FixInvalidItalicTags(); + Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "Seems their attackers headed north."); + } + + [TestMethod()] + [DeploymentItem("SubtitleEdit.exe")] + public void FixItalicsEmptyStart() + { + FixCommonErrors_Accessor target = new FixCommonErrors_Accessor(); + InitializeFixCommonErrorsLine(target, "test"); + target.FixInvalidItalicTags(); + Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "test"); + } + + [TestMethod()] + [DeploymentItem("SubtitleEdit.exe")] + public void FixItalicsSecondLineMissingEnd() + { + FixCommonErrors_Accessor target = new FixCommonErrors_Accessor(); + InitializeFixCommonErrorsLine(target, "- And..." + Environment.NewLine + "Awesome it is!"); + target.FixInvalidItalicTags(); + Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "- And..." + Environment.NewLine + "Awesome it is!"); + } + + [TestMethod()] + [DeploymentItem("SubtitleEdit.exe")] + public void FixItalicsBadEnding() + { + FixCommonErrors_Accessor target = new FixCommonErrors_Accessor(); + InitializeFixCommonErrorsLine(target, "Awesome it is!"); + target.FixInvalidItalicTags(); + Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "Awesome it is!"); + } + + [TestMethod()] + [DeploymentItem("SubtitleEdit.exe")] + public void FixItalicsBadEnding2() + { + FixCommonErrors_Accessor target = new FixCommonErrors_Accessor(); + InitializeFixCommonErrorsLine(target, "Awesome it is!"); + target.FixInvalidItalicTags(); + Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "Awesome it is!"); + } + + [TestMethod()] + [DeploymentItem("SubtitleEdit.exe")] + public void FixItalicsBadEnding3() + { + FixCommonErrors_Accessor target = new FixCommonErrors_Accessor(); + InitializeFixCommonErrorsLine(target, "Awesome it is!"); + target.FixInvalidItalicTags(); + Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "Awesome it is!"); + } + + [TestMethod()] + [DeploymentItem("SubtitleEdit.exe")] + public void FixItalicsBadEnding4() + { + FixCommonErrors_Accessor target = new FixCommonErrors_Accessor(); + InitializeFixCommonErrorsLine(target, "Awesome it is!"); + target.FixInvalidItalicTags(); + Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "Awesome it is!"); + } + #endregion + + #region Fix Missing Periods At End Of Line + [TestMethod()] + [DeploymentItem("SubtitleEdit.exe")] + public void FixMissingPeriodsAtEndOfLineNone() + { + FixCommonErrors_Accessor target = new FixCommonErrors_Accessor(); + InitializeFixCommonErrorsLine(target, "This is line one!" + Environment.NewLine + "Boy!", "This is line one!" + Environment.NewLine + "Boy!"); + target.FixMissingPeriodsAtEndOfLine(); + Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "This is line one!" + Environment.NewLine + "Boy!"); + } + + [TestMethod()] + [DeploymentItem("SubtitleEdit.exe")] + public void FixMissingPeriodsAtEndOfLineItalicAndMissing() + { + FixCommonErrors_Accessor target = new FixCommonErrors_Accessor(); + InitializeFixCommonErrorsLine(target, "This is line one!" + Environment.NewLine + "Boy", "This is line one!" + Environment.NewLine + "Boy!"); + target.FixMissingPeriodsAtEndOfLine(); + Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "This is line one!" + Environment.NewLine + "Boy."); + } + + [TestMethod()] + [DeploymentItem("SubtitleEdit.exe")] + public void FixMissingPeriodsAtEndOfLineItalicAndMissing2() + { + FixCommonErrors_Accessor target = new FixCommonErrors_Accessor(); + InitializeFixCommonErrorsLine(target, "This is line one!" + Environment.NewLine + "Boy", "This is line one!" + Environment.NewLine + "Boy!"); + target.FixMissingPeriodsAtEndOfLine(); + Assert.AreEqual(target._subtitle.Paragraphs[0].Text, "This is line one!" + Environment.NewLine + "Boy."); + } + #endregion + } }