diff --git a/agent/doc/UML/agent_device_management_design.puml b/agent/doc/UML/agent_device_management_design.puml index 3cbf72d9f..6835ce68f 100644 --- a/agent/doc/UML/agent_device_management_design.puml +++ b/agent/doc/UML/agent_device_management_design.puml @@ -1,4 +1,4 @@ -@startuml new_design +@startuml 'https://plantuml.com/class-diagram class AgentManagementService { diff --git a/agent/doc/UML/logger_file_design.puml b/agent/doc/UML/logger_file_design.puml index c55e90201..e5e22f5db 100644 --- a/agent/doc/UML/logger_file_design.puml +++ b/agent/doc/UML/logger_file_design.puml @@ -1,4 +1,4 @@ -@startuml +@startuml log_file_path 'https://plantuml.com/class-diagram object DeviceLogger @@ -16,6 +16,6 @@ TestRunLogger -u-|> DeviceLogger @startuml loggers EachTestDevice *--> DeviceLogger -EachTestTaskOnEachTargetDevice *--> TaskOnDeviceLogger -EachTestTaskOnEachTargetDevice *--> LogcatLogger +EachTestRun *--> TestRunLogger +AndroidDevice *--> LogcatLogger @enduml \ No newline at end of file diff --git a/agent/doc/UML/test_runner_design.puml b/agent/doc/UML/test_runner_design.puml index f34a694eb..68641c51e 100644 --- a/agent/doc/UML/test_runner_design.puml +++ b/agent/doc/UML/test_runner_design.puml @@ -1,4 +1,4 @@ -@startuml test_runners_classes +@startuml test_runner_class_relation abstract class TestRunner { #createTestRun(...) #setUp(TestTask) @@ -114,7 +114,7 @@ deactivate TaskCompletion } @endjson -@startuml design +@startuml test_runner_listener_design abstract class Runner interface TestRunnerListener { onTestCaseStart() @@ -128,7 +128,7 @@ interface TestRunnerListener { Runner *--> TestRunnerListener @enduml -@startuml test_objects +@startuml test_entities entity (TestTaskSpec) entity (TestTask) @@ -141,7 +141,7 @@ TestTask *--> TestRun: contain a list of TestRun *--> AndroidTestUnit: contain a list of @enduml -@startuml test_objects +@startuml test_object_relationships entity (TestTaskSpec) entity (TestTask) diff --git a/build.gradle b/build.gradle index ce9fe21b2..5ca000cdd 100644 --- a/build.gradle +++ b/build.gradle @@ -88,4 +88,19 @@ task packageWindowsInstaller(type: Zip) { from 'agent/agent_installer/Windows' archiveName 'Hydra_Agent_Installer_Windows.zip' destinationDir file('build/installer') +} +import com.microsoft.hydralab.compile.UMLImageGenerator + +task generateUMLImage(group: 'documentation') { + doFirst { + def scanningDirList = ['agent/doc/UML'] + def outputDir = new File(projectDir, 'docs/images/UML') + + def generator = new UMLImageGenerator() + scanningDirList.each { + fileTree(new File(projectDir, it)).filter { it.name.endsWith(".puml") }.files.each { + generator.generateUMLImageFromFile(it.absoluteFile, outputDir) + } + } + } } \ No newline at end of file diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle new file mode 100644 index 000000000..3125cdfb8 --- /dev/null +++ b/buildSrc/build.gradle @@ -0,0 +1,10 @@ +repositories { + mavenLocal() + mavenCentral() +} + +dependencies { + implementation gradleApi() + implementation 'net.sourceforge.plantuml:plantuml:1.2021.9' + testImplementation group: 'junit', name: 'junit', version: '4.12' +} \ No newline at end of file diff --git a/buildSrc/src/main/java/com/microsoft/hydralab/compile/UMLImageGenerator.java b/buildSrc/src/main/java/com/microsoft/hydralab/compile/UMLImageGenerator.java new file mode 100644 index 000000000..b37a6eff3 --- /dev/null +++ b/buildSrc/src/main/java/com/microsoft/hydralab/compile/UMLImageGenerator.java @@ -0,0 +1,33 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +package com.microsoft.hydralab.compile; + +import net.sourceforge.plantuml.FileFormat; +import net.sourceforge.plantuml.FileFormatOption; +import net.sourceforge.plantuml.GeneratedImage; +import net.sourceforge.plantuml.SourceFileReader; + +import java.io.File; +import java.io.IOException; +import java.util.List; + +public class UMLImageGenerator { + public void generateUMLImageFromFile(File source) throws IOException { + generateUMLImageFromFile(source, source.getAbsoluteFile().getParentFile(), false); + } + + public void generateUMLImageFromFile(File source, File outputDir) throws IOException { + generateUMLImageFromFile(source, outputDir, false); + } + + public void generateUMLImageFromFile(File source, File outputDir, boolean svg) throws IOException { + if (!source.exists()) throw new RuntimeException(source.getAbsolutePath() + " file doesn't exist"); + + SourceFileReader reader = svg ? + new SourceFileReader(source, outputDir, new FileFormatOption(FileFormat.SVG)) : + new SourceFileReader(source, outputDir); + + List list = reader.getGeneratedImages(); + System.out.printf("Successfully generated %d UML images.\n", list.size()); + } +} \ No newline at end of file diff --git a/buildSrc/src/test/java/com/microsoft/hydralab/compile/TestUMLGeneration.java b/buildSrc/src/test/java/com/microsoft/hydralab/compile/TestUMLGeneration.java new file mode 100644 index 000000000..846f42e2b --- /dev/null +++ b/buildSrc/src/test/java/com/microsoft/hydralab/compile/TestUMLGeneration.java @@ -0,0 +1,9 @@ +package com.microsoft.hydralab.compile; + +import org.junit.Test; + +public class TestUMLGeneration { + @Test + public void emptyTest() { + } +} diff --git a/docs/images/UML/agent_device_management_design.png b/docs/images/UML/agent_device_management_design.png new file mode 100644 index 000000000..ff4f793da Binary files /dev/null and b/docs/images/UML/agent_device_management_design.png differ diff --git a/docs/images/UML/log_file_path.png b/docs/images/UML/log_file_path.png new file mode 100644 index 000000000..7e3d910e5 Binary files /dev/null and b/docs/images/UML/log_file_path.png differ diff --git a/docs/images/UML/loggers.png b/docs/images/UML/loggers.png new file mode 100644 index 000000000..3b4d2db1a Binary files /dev/null and b/docs/images/UML/loggers.png differ diff --git a/docs/images/UML/running_sequence.png b/docs/images/UML/running_sequence.png new file mode 100644 index 000000000..1d7409ed6 Binary files /dev/null and b/docs/images/UML/running_sequence.png differ diff --git a/docs/images/UML/test_entities.png b/docs/images/UML/test_entities.png new file mode 100644 index 000000000..6c88eff09 Binary files /dev/null and b/docs/images/UML/test_entities.png differ diff --git a/docs/images/UML/test_object_relationships.png b/docs/images/UML/test_object_relationships.png new file mode 100644 index 000000000..374af8d03 Binary files /dev/null and b/docs/images/UML/test_object_relationships.png differ diff --git a/docs/images/UML/test_runner_class_relation.png b/docs/images/UML/test_runner_class_relation.png new file mode 100644 index 000000000..c5e889090 Binary files /dev/null and b/docs/images/UML/test_runner_class_relation.png differ diff --git a/docs/images/UML/test_runner_design.png b/docs/images/UML/test_runner_design.png new file mode 100644 index 000000000..a855b852f Binary files /dev/null and b/docs/images/UML/test_runner_design.png differ diff --git a/docs/images/UML/test_runner_listener_design.png b/docs/images/UML/test_runner_listener_design.png new file mode 100644 index 000000000..b05203fef Binary files /dev/null and b/docs/images/UML/test_runner_listener_design.png differ