Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'main/tests/UnitTests/MonoDevelop.Ide.Editor/Commands/CodeCommentTests.cs')
-rw-r--r--main/tests/UnitTests/MonoDevelop.Ide.Editor/Commands/CodeCommentTests.cs207
1 files changed, 207 insertions, 0 deletions
diff --git a/main/tests/UnitTests/MonoDevelop.Ide.Editor/Commands/CodeCommentTests.cs b/main/tests/UnitTests/MonoDevelop.Ide.Editor/Commands/CodeCommentTests.cs
new file mode 100644
index 0000000000..4ac482e082
--- /dev/null
+++ b/main/tests/UnitTests/MonoDevelop.Ide.Editor/Commands/CodeCommentTests.cs
@@ -0,0 +1,207 @@
+//
+// CodeCommentTests.cs
+//
+// Author:
+// Mike Krüger <mkrueger@xamarin.com>
+//
+// Copyright (c) 2015 Xamarin Inc. (http://xamarin.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+using System;
+using System.Text;
+using NUnit.Framework;
+using UnitTests;
+
+namespace MonoDevelop.Ide.Editor
+{
+ [TestFixture]
+ public class CodeCommentTests : TestBase
+ {
+ internal static TextEditor CreateTextEditor (string input)
+ {
+ var editor = TextEditorFactory.CreateNewEditor ();
+ editor.MimeType = "text/x-csharp";
+
+ var sb = new StringBuilder ();
+ int cursorPosition = 0, selectionStart = -1, selectionEnd = -1;
+
+ for (int i = 0; i < input.Length; i++) {
+ var ch = input [i];
+ switch (ch) {
+ case '$':
+ cursorPosition = sb.Length;
+ break;
+ case '<':
+ if (i + 1 < input.Length) {
+ if (input [i + 1] == '-') {
+ selectionStart = sb.Length;
+ i++;
+ break;
+ }
+ }
+ goto default;
+ case '-':
+ if (i + 1 < input.Length) {
+ var next = input [i + 1];
+ if (next == '>') {
+ selectionEnd = sb.Length;
+ i++;
+ break;
+ }
+ }
+ goto default;
+ default:
+ sb.Append (ch);
+ break;
+ }
+ }
+ editor.Text = sb.ToString ();
+ editor.CaretOffset = cursorPosition;
+ if (selectionStart >= 0 && selectionEnd >= 0)
+ editor.SetSelection (selectionStart, selectionEnd);
+ return editor;
+ }
+
+ static void AssertEditorState (TextEditor editor, string input)
+ {
+ var sb = new StringBuilder ();
+ int cursorPosition = -1, selectionStart = -1, selectionEnd = -1;
+
+ for (int i = 0; i < input.Length; i++) {
+ var ch = input [i];
+ switch (ch) {
+ case '$':
+ cursorPosition = sb.Length;
+ break;
+ case '<':
+ if (i + 1 < input.Length) {
+ if (input [i + 1] == '-') {
+ selectionStart = sb.Length;
+ i++;
+ break;
+ }
+ }
+ goto default;
+ case '-':
+ if (i + 1 < input.Length) {
+ var next = input [i + 1];
+ if (next == '>') {
+ selectionEnd = sb.Length;
+ i++;
+ break;
+ }
+ }
+ goto default;
+ default:
+ sb.Append (ch);
+ break;
+ }
+ }
+ if (cursorPosition >= 0)
+ Assert.AreEqual (cursorPosition, editor.CaretOffset, "Cursor position mismatch.");
+ if (selectionStart >= 0) {
+ Assert.AreEqual (selectionStart, editor.SelectionRange.Offset, "Selection start mismatch.");
+ Assert.AreEqual (selectionEnd, editor.SelectionRange.EndOffset, "Selection end mismatch.");
+ }
+ Assert.AreEqual (sb.ToString (), editor.Text, "Editor text doesn't match.");
+ }
+
+ [Test]
+ public void TestAddComment()
+ {
+ var editor = CreateTextEditor (@"class Foo
+{
+ <-void Bar ()
+ {
+
+ }->
+}");
+ ((TextEditorViewContent)editor.GetViewContent ()).AddCodeComment ();
+ AssertEditorState (editor, @"class Foo
+{
+ //<-void Bar ()
+ //{
+
+ //}->
+}");
+ }
+
+ [Test]
+ public void TestRemoveComment()
+ {
+ var editor = CreateTextEditor ( @"class Foo
+{
+ //<-void Bar ()
+ //{
+
+ //}->
+}");
+ ((TextEditorViewContent)editor.GetViewContent ()).RemoveCodeComment ();
+ AssertEditorState (editor,@"class Foo
+{
+ <-void Bar ()
+ {
+
+ }->
+}");
+ }
+
+ [Test]
+ public void TestToggle_Add()
+ {
+ var editor = CreateTextEditor (@"class Foo
+{
+ <-void Bar ()
+ {
+
+ }->
+}");
+ ((TextEditorViewContent)editor.GetViewContent ()).ToggleCodeComment ();
+ AssertEditorState (editor, @"class Foo
+{
+ //<-void Bar ()
+ //{
+
+ //}->
+}");
+ }
+
+ [Test]
+ public void TestToggle_Remove()
+ {
+ var editor = CreateTextEditor ( @"class Foo
+{
+ //<-void Bar ()
+ //{
+
+ //}->
+}");
+ ((TextEditorViewContent)editor.GetViewContent ()).ToggleCodeComment ();
+ AssertEditorState (editor,@"class Foo
+{
+ <-void Bar ()
+ {
+
+ }->
+}");
+ }
+
+ }
+}
+