diff --git a/plab/main.go b/plab/main.go
index db1be0c13173992602975280f3b498cf542a600c..5d3a70836da3d8459400440d986a8ed4b87ca29d 100644
--- a/plab/main.go
+++ b/plab/main.go
@@ -2,11 +2,12 @@ package main
 
 import (
 	"git.sch.bme.hu/insert-epic-projlab-team-name-here/tooling/plab/helpers"
+	"git.sch.bme.hu/insert-epic-projlab-team-name-here/tooling/plab/tests"
 	"os"
 )
 
 func main() {
-	mainCmds := helpers.CmdFrom(os.Args[0], "go projlab tool", Timetable, Javadoc, Classdiag, Check)
+	mainCmds := helpers.CmdFrom(os.Args[0], "go projlab tool", Timetable, Javadoc, Classdiag, Check, tests.TestsToLatex)
 	if len(os.Args) < 2 {
 		os.Args = append(os.Args, "help")
 	}
diff --git a/plab/tests/runtest.go b/plab/tests/runtest.go
new file mode 100644
index 0000000000000000000000000000000000000000..2582245f6bb759c0682ae42bf91f68f44270d65e
--- /dev/null
+++ b/plab/tests/runtest.go
@@ -0,0 +1,34 @@
+package tests
+
+import (
+	"fmt"
+	"io"
+	"os"
+	"os/exec"
+)
+
+func runTest(name string) error {
+	fmt.Println(name)
+	cmd := exec.Command("java", "-jar", "../src/projlab.jar")
+	file, err := os.Open(name)
+	if err != nil {
+		return err
+	}
+	stdin, err := cmd.StdinPipe()
+	if err != nil {
+		return err
+	}
+	_, err = io.Copy(stdin, file)
+	if err != nil {
+		return err
+	}
+	err = stdin.Close()
+	if err != nil {
+		return err
+	}
+	b, err := cmd.CombinedOutput()
+	if err != nil {
+		fmt.Println(string(b))
+	}
+	return err
+}
diff --git a/plab/tests/testsToLatex.go b/plab/tests/testsToLatex.go
new file mode 100644
index 0000000000000000000000000000000000000000..653c1eb08567474002041e1b2ed868a23a86968e
--- /dev/null
+++ b/plab/tests/testsToLatex.go
@@ -0,0 +1,72 @@
+package tests
+
+import (
+	"bytes"
+	"fmt"
+	"git.sch.bme.hu/insert-epic-projlab-team-name-here/tooling/plab/helpers"
+	"io/ioutil"
+	"os"
+	"os/exec"
+	"strings"
+)
+
+var TestsToLatex = helpers.Subcommand{
+	Name: "testtolatex",
+	Command: func(args []string) {
+		const dir = "../tests/"
+		tests, e := ioutil.ReadDir(dir)
+		if e != nil {
+			panic(e)
+		}
+		var buf bytes.Buffer
+		for _, t := range tests {
+			e := runTest(dir + t.Name())
+			if e != nil {
+				panic(e)
+			}
+			e = plantumlToLatex()
+			if e != nil {
+				panic(e)
+			}
+			b, e := ioutil.ReadFile("../seq.latex")
+			buf.WriteString("\\subsubsection{")
+			testname := ""
+			tmp := strings.Split(t.Name(), ".")
+			for i, part := range tmp {
+				if i < len(tmp)-1 {
+					testname += part
+				}
+				if i < len(tmp)-2 {
+					testname += "."
+				}
+			}
+			buf.WriteString(testname)
+			buf.WriteString("}\n")
+			buf.WriteString(`
+\begin{figure}[H]
+    \begin{center}
+        \resizebox*{!}{\textheight-2cm}{`)
+			buf.Write(b)
+			buf.WriteString(`
+        }
+    \end{center}
+\end{figure}
+`)
+			buf.WriteString("\n\\newpage\n")
+		}
+		e = ioutil.WriteFile("/tmp/testseq.latex", buf.Bytes(), os.ModePerm)
+		if e != nil {
+			panic(e)
+		}
+	},
+	Help: "gen seq from test into latex",
+}
+
+func plantumlToLatex() error {
+	b, e := exec.Command("plantuml", "-tlatex:nopreamble", "../seq.puml").CombinedOutput()
+	if e != nil {
+		fmt.Println(string(b))
+		return e
+	}
+	return nil
+}