diff --git a/test/plantuml-indentation-with-tabs-test.el b/test/plantuml-indentation-with-tabs-test.el new file mode 100644 index 0000000..52a5c5f --- /dev/null +++ b/test/plantuml-indentation-with-tabs-test.el @@ -0,0 +1,111 @@ +;;; plantuml-indentation-with-tabs-test.el --- PlantUML Mode indentation tests -*- lexical-binding: t; -*- + +;; Author: René Schmelzer, Tobias Marczewski (mtoboid) +;; Maintainer: Carlo Sciolla (skuro) +;; URL: https://github.com/skuro/plantuml-mode + +;;; Commentary: + +;; Test indentation for class diagrams, specifically using tabs. + +;;; Code: + +(ert-deftest plantuml-test-indentation/tabs/nested-modules () + "Test correct indentation of plantuml class diagram elements. +These code examples are taken from www.plantuml.com" + (plantuml-test-indent-block-with-tabs + + " +@startuml + +'some comment +package org.example.module1 { +interface A { +doStuff(): String +getList(): List +} + +class B { +-name: String ++getName(): String +} +} + +package org.example.module2 { +class C { +-count: int ++getCount(): int +} +} + +A <|.. B +A <|.. C + +@enduml +" + " +@startuml + +'some comment +package org.example.module1 { + interface A { + doStuff(): String + getList(): List + } + + class B { + -name: String + +getName(): String + } +} + +package org.example.module2 { + class C { + -count: int + +getCount(): int + } +} + +A <|.. B +A <|.. C + +@enduml +")) + + +(ert-deftest plantuml-test-block-indentation/tabs/package-empty () + "Test correct indentation of an empty package block." + (plantuml-test-indent-block-with-tabs + " +package APackage () +interface Inter +" + " +package APackage () +interface Inter +")) + + +(ert-deftest platuml-test-block-indentation/tabs/package-interface-nested () + "Test correct indentation of two nested blocks, a package and an interface +Note: package is used in deployment and object diagrams as well, see there for more tests." + (plantuml-test-indent-block-with-tabs + " +package foo { +interface Bar { +baz +} +} +" + " +package foo { + interface Bar { + baz + } +} +")) + + +(provide 'plantuml-indentation-class-test) + +;;; plantuml-indentation-with-tabs-test.el ends here diff --git a/test/test-helper.el b/test/test-helper.el index feb3950..c61902a 100644 --- a/test/test-helper.el +++ b/test/test-helper.el @@ -66,6 +66,37 @@ Finally, the indented text in the buffer will be compared with AFTER." (indent-region (point-min) (point-max)) (should (equal (buffer-string) after)))) +;; FIXME +;; This function is just a copy of the above plantuml-test-indent-block with +;; some minor changes to use indentation with tabs. Perhaps merge the two +;; functions? +(defun plantuml-test-indent-block-with-tabs (before after) + "Helper for the block indentation tests with tabs. + +BEFORE is the text block to be inserted into a temporary buffer. +AFTER is the expected text block after indentation. + +The temporary buffer will be put into `plantuml-mode'. The whole buffer +will be indented with one tab for each level of indentation. + +Finally, the indented text in the buffer will be compared with AFTER." + + (with-temp-buffer + ;; fix the JAR location prior to mode initialization + ;; for some reason, plantuml-mode disregards the setq-local + (setq plantuml-jar-path plantuml-test-jar-path) + (plantuml-init-once 'jar) + + (insert before) + (goto-char (point-min)) + (plantuml-mode) + ;; ensure that plantuml-indent-level is the default value 8 + (setq indent-tabs-mode t) + (setq plantuml-indent-level 8) + + (indent-region (point-min) (point-max)) + (should (equal (buffer-string) after)))) + ;; enable code coverage (when (require 'undercover nil t) (undercover "plantuml-mode.el"))