Skip to content

Commit

Permalink
feat(uml): make basic transform uml support
Browse files Browse the repository at this point in the history
  • Loading branch information
phodal committed Feb 27, 2021
1 parent 279037d commit 012bc56
Showing 1 changed file with 48 additions and 2 deletions.
50 changes: 48 additions & 2 deletions plugins/coco_struct_analysis/src/plantuml_render.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,23 @@ pub trait PlantUml {
pub struct PlantUmlRender;

impl PlantUmlRender {
pub fn render(_classes: Vec<ClassInfo>) -> String {
let rendered: Vec<String> = vec![];
pub fn render(classes: Vec<ClassInfo>) -> String {
let mut rendered: Vec<String> = vec![];
for clazz in classes {
let mut members = vec![];
for member in clazz.members {
members.push(format!(" {}{}\n", member.access, member.name))
}
let mut methods = vec![];
let mut content = format!("{}", members.join(""));
for method in clazz.methods {
methods.push(format!(" {}{}()\n", method.access, method.name))
}
content = format!("{}{}", content, methods.join(""));

rendered.push(format!("class {{\n{}}}", content));
}

let dep: Vec<String> = vec![];

format!(
Expand All @@ -21,6 +36,7 @@ impl PlantUmlRender {

#[cfg(test)]
mod tests {
use crate::coco_struct::{ClassInfo, MemberInfo, MethodInfo};
use crate::plantuml_render::PlantUmlRender;

#[test]
Expand All @@ -29,4 +45,34 @@ mod tests {
let str = PlantUmlRender::render(classes);
assert_eq!("@startuml\n\n\n\n@enduml", str);
}

#[test]
fn should_render_single_empty_class() {
let mut classes = vec![];
let demo = ClassInfo::new("Demo");
classes.push(demo);

let str = PlantUmlRender::render(classes);
assert_eq!("@startuml\n\nclass {\n}\n\n@enduml", str);
}

#[test]
fn should_render_member_method() {
let mut classes = vec![];
let mut demo = ClassInfo::new("Demo");

let member = MemberInfo::new("demo", "-", "String".to_string());
demo.members.push(member);

let method = MethodInfo::new("method", "-", "String".to_string());
demo.methods.push(method);

classes.push(demo);

let str = PlantUmlRender::render(classes);
assert_eq!(
"@startuml\n\nclass {\n -demo\n -method()\n}\n\n@enduml",
str
);
}
}

0 comments on commit 012bc56

Please sign in to comment.