Skip to content

Commit

Permalink
Added custom graph styling options via GraphOptions.GraphStyle
Browse files Browse the repository at this point in the history
  • Loading branch information
Piotr Smreczyński committed Oct 13, 2020
1 parent 6ebd834 commit 239ef71
Show file tree
Hide file tree
Showing 20 changed files with 676 additions and 414 deletions.
33 changes: 30 additions & 3 deletions DecisionTree.Tests/TestData/DecisionTreeTestData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,28 @@ public class DecisionTreeTestData
GraphTestData("TitleOnlyDefault", false, false, true ),
GraphTestData("TitleOnlyHorizontal", true, false, true ),
GraphTestData("TitleOnlyUniquePaths", false, true, true ),
GraphTestData("TitleOnlyHorizontalUniquePaths", true, true, true )
GraphTestData("TitleOnlyHorizontalUniquePaths", true, true, true ),
GraphTestData("CustomColorsDefault",
graphStyle: new GraphStyle
{
DecisionColor = "white",
DecisionActionColor = "#FFFF00",
ResultColor = "#FF00FF",
ResultActionColor = "#00FFFF",
ActionColor = "black"
}),
GraphTestData("PartialCustomColorsDefault",
graphStyle: new GraphStyle
{
DecisionColor = "#FFFFFF",
ResultColor = "#FF00FF",
ActionColor = "#000000"
}),
GraphTestData("FontDefault",
graphStyle: new GraphStyle
{
FontColor = "red"
})
};

public static string ExpectedExceptionMessageWithPath =>
Expand All @@ -99,12 +120,18 @@ public class DecisionTreeTestData
$"^-- 'False FinishedDecision - SendNotificationAction'{Environment.NewLine}" +
"^-- 'FinishedDecision'";

private static object[] GraphTestData(string title, bool isHorizontal = false, bool hasUniquePaths = false, bool titleOnly = false) =>
private static object[] GraphTestData(
string title,
bool isHorizontal = false,
bool hasUniquePaths = false,
bool titleOnly = false,
GraphStyle graphStyle = null) =>
new object[] { title, new GraphOptions
{
IsHorizontal = isHorizontal,
UseUniquePaths = hasUniquePaths,
TitleOnly = titleOnly
TitleOnly = titleOnly,
GraphStyle = graphStyle
}
};

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
digraph G {
"FinishedDecision" -> "FinishResult" [label = "True"]
"FinishResult" [style = "filled" penwidth = 1 fillcolor = "#00FFFF" fontname = "Courier New" shape = "Mrecord" label = <<table border = "0" cellborder = "0" cellpadding = "3" bgcolor = "#00FFFF"><tr><td bgcolor = "#00FFFF" align = "center"><font color = "#ffffff">FinishResult</font></td></tr><tr><td bgcolor = "#ffffff" cellpadding= "1"></td></tr><tr><td align = "left"><font color = "#ffffff">dto =&gt; dto</font></td></tr><tr><td align = "left"><font color = "#ffffff">.SetResult(&quot;Project is finished.&quot;)</font></td></tr></table>>]
"FinishedDecision" -> "False FinishedDecision - SendNotificationAction" [label = "False"]
"False FinishedDecision - SendNotificationAction" -> "IsOnHoldDecision" [label = "False"]
"IsOnHoldDecision" -> "DoNothingResult" [label = "True"]
"DoNothingResult" [style = "filled" penwidth = 1 fillcolor = "#FF00FF" fontname = "Courier New" shape = "Mrecord" label = <<table border = "0" cellborder = "0" cellpadding = "3" bgcolor = "#FF00FF"><tr><td bgcolor = "#FF00FF" align = "center"><font color = "#ffffff">DoNothingResult</font></td></tr></table>>]
"IsOnHoldDecision" -> "ProjectTypeDecision" [label = "False"]
"ProjectTypeDecision" -> "Internal ProjectTypeDecision - SendNotificationAction" [label = "Internal"]
"Internal ProjectTypeDecision - SendNotificationAction" -> "ResetProjectAction" [label = "Internal"]
"ResetProjectAction" -> "DoNothingResult" [label = "Internal"]
"ResetProjectAction" [style = "filled" penwidth = 1 fillcolor = "black" fontname = "Courier New" shape = "Mrecord" label = <<table border = "0" cellborder = "0" cellpadding = "3" bgcolor = "black"><tr><td bgcolor = "black" align = "center"><font color = "#ffffff">ResetProjectAction</font></td></tr><tr><td bgcolor = "#ffffff" cellpadding= "1"></td></tr><tr><td align = "left"><font color = "#ffffff">dto =&gt; dto</font></td></tr><tr><td align = "left"><font color = "#ffffff">.SetItemsToDo(0)</font></td></tr><tr><td align = "left"><font color = "#ffffff">.SetBudgetRemaining(0)</font></td></tr></table>>]
"Internal ProjectTypeDecision - SendNotificationAction" [style = "filled" penwidth = 1 fillcolor = "black" fontname = "Courier New" shape = "Mrecord" label = <<table border = "0" cellborder = "0" cellpadding = "3" bgcolor = "black"><tr><td bgcolor = "black" align = "center"><font color = "#ffffff">Internal ProjectTypeDecision - SendNotificationAction</font></td></tr><tr><td bgcolor = "#ffffff" cellpadding= "1"></td></tr><tr><td align = "left"><font color = "#ffffff">dto =&gt; dto</font></td></tr><tr><td align = "left"><font color = "#ffffff">.SetSendNotification(True)</font></td></tr></table>>]
"ProjectTypeDecision" -> "ProjectSubTypeDecision" [label = "#null_path"]
"ProjectSubTypeDecision" -> "ToDoDecision" [label = "WordWide"]
"ToDoDecision" -> "DeadlineDecision" [label = "True"]
"DeadlineDecision" -> "True DeadlineDecision - SendNotificationAction" [label = "True"]
"True DeadlineDecision - SendNotificationAction" -> "MoveDeadlineResult" [label = "True"]
"MoveDeadlineResult" [style = "filled" penwidth = 1 fillcolor = "#00FFFF" fontname = "Courier New" shape = "Mrecord" label = <<table border = "0" cellborder = "0" cellpadding = "3" bgcolor = "#00FFFF"><tr><td bgcolor = "#00FFFF" align = "center"><font color = "#ffffff">MoveDeadlineResult</font></td></tr><tr><td bgcolor = "#ffffff" cellpadding= "1"></td></tr><tr><td align = "left"><font color = "#ffffff">dto =&gt; dto</font></td></tr><tr><td align = "left"><font color = "#ffffff">.SetResult(&quot;Timeline reevaluation needed.&quot;)</font></td></tr></table>>]
"True DeadlineDecision - SendNotificationAction" [style = "filled" penwidth = 1 fillcolor = "black" fontname = "Courier New" shape = "Mrecord" label = <<table border = "0" cellborder = "0" cellpadding = "3" bgcolor = "black"><tr><td bgcolor = "black" align = "center"><font color = "#ffffff">True DeadlineDecision - SendNotificationAction</font></td></tr><tr><td bgcolor = "#ffffff" cellpadding= "1"></td></tr><tr><td align = "left"><font color = "#ffffff">dto =&gt; dto</font></td></tr><tr><td align = "left"><font color = "#ffffff">.SetSendNotification(True)</font></td></tr></table>>]
"DeadlineDecision" -> "BudgetDecision" [label = "False"]
"BudgetDecision" -> "RequestBudgetResult" [label = "True"]
"RequestBudgetResult" [style = "filled" penwidth = 1 fillcolor = "#00FFFF" fontname = "Courier New" shape = "Mrecord" label = <<table border = "0" cellborder = "0" cellpadding = "3" bgcolor = "#00FFFF"><tr><td bgcolor = "#00FFFF" align = "center"><font color = "#ffffff">RequestBudgetResult</font></td></tr><tr><td bgcolor = "#ffffff" cellpadding= "1"></td></tr><tr><td align = "left"><font color = "#ffffff">dto =&gt; dto</font></td></tr><tr><td align = "left"><font color = "#ffffff">.SetResult(&quot;Not enough funds.&quot;)</font></td></tr><tr><td align = "left"><font color = "#ffffff">.SetIsOnHold(True)</font></td></tr></table>>]
"BudgetDecision" -> "DoNothingResult" [label = "False"]
"BudgetDecision" [style = "filled" penwidth = 1 fillcolor = "#FFFF00" fontname = "Courier New" shape = "Mrecord" label = <<table border = "0" cellborder = "0" cellpadding = "3" bgcolor = "#FFFF00"><tr><td bgcolor = "#FFFF00" align = "center"><font color = "#ffffff">BudgetDecision</font></td></tr><tr><td bgcolor = "#ffffff" cellpadding= "1"></td></tr><tr><td align = "left"><font color = "#ffffff">dto =&gt; (dto.Project.BudgetRemaining &lt; (dto.Project.ItemsToDo * 1000))</font></td></tr><tr><td bgcolor = "#ffffff" cellpadding= "1"></td></tr><tr><td align = "left"><font color = "#ffffff">dto =&gt; dto</font></td></tr><tr><td align = "left"><font color = "#ffffff">.SetIsBudgetReviewed(True)</font></td></tr></table>>]
"DeadlineDecision" [style = "filled" penwidth = 1 fillcolor = "white" fontname = "Courier New" shape = "Mrecord" label = <<table border = "0" cellborder = "0" cellpadding = "3" bgcolor = "white"><tr><td bgcolor = "white" align = "center"><font color = "#ffffff">DeadlineDecision</font></td></tr><tr><td bgcolor = "#ffffff" cellpadding= "1"></td></tr><tr><td align = "left"><font color = "#ffffff">dto =&gt; (dto.Project.TimeToDeadline.Days &lt; 7)</font></td></tr></table>>]
"ToDoDecision" -> "BudgetDecision" [label = "False"]
"ToDoDecision" [style = "filled" penwidth = 1 fillcolor = "white" fontname = "Courier New" shape = "Mrecord" label = <<table border = "0" cellborder = "0" cellpadding = "3" bgcolor = "white"><tr><td bgcolor = "white" align = "center"><font color = "#ffffff">ToDoDecision</font></td></tr><tr><td bgcolor = "#ffffff" cellpadding= "1"></td></tr><tr><td align = "left"><font color = "#ffffff">dto =&gt; (dto.Project.ItemsToDo &gt; 10)</font></td></tr></table>>]
"ProjectSubTypeDecision" -> "ToDoDecision" [label = "Foreign"]
"ProjectSubTypeDecision" -> "#null ProjectSubTypeDecision - SendNotificationAction" [label = "#null_path"]
"#null ProjectSubTypeDecision - SendNotificationAction" -> "ResetProjectAction" [label = "#null_path"]
"ResetProjectAction" -> "DoNothingResult" [label = "#null_path"]
"#null ProjectSubTypeDecision - SendNotificationAction" [style = "filled" penwidth = 1 fillcolor = "black" fontname = "Courier New" shape = "Mrecord" label = <<table border = "0" cellborder = "0" cellpadding = "3" bgcolor = "black"><tr><td bgcolor = "black" align = "center"><font color = "#ffffff">#null ProjectSubTypeDecision - SendNotificationAction</font></td></tr><tr><td bgcolor = "#ffffff" cellpadding= "1"></td></tr><tr><td align = "left"><font color = "#ffffff">dto =&gt; dto</font></td></tr><tr><td align = "left"><font color = "#ffffff">.SetSendNotification(True)</font></td></tr></table>>]
"ProjectSubTypeDecision" -> "ProjectAreaDecision" [label = "#default_path"]
"ProjectAreaDecision" -> "Hr ProjectAreaDecision - SendNotificationAction" [label = "Hr"]
"Hr ProjectAreaDecision - SendNotificationAction" -> "ResetProjectAction" [label = "Hr"]
"ResetProjectAction" -> "DoNothingResult" [label = "Hr"]
"Hr ProjectAreaDecision - SendNotificationAction" [style = "filled" penwidth = 1 fillcolor = "black" fontname = "Courier New" shape = "Mrecord" label = <<table border = "0" cellborder = "0" cellpadding = "3" bgcolor = "black"><tr><td bgcolor = "black" align = "center"><font color = "#ffffff">Hr ProjectAreaDecision - SendNotificationAction</font></td></tr><tr><td bgcolor = "#ffffff" cellpadding= "1"></td></tr><tr><td align = "left"><font color = "#ffffff">dto =&gt; dto</font></td></tr><tr><td align = "left"><font color = "#ffffff">.SetSendNotification(True)</font></td></tr></table>>]
"ProjectAreaDecision" -> "ToDoDecision" [label = "#default_path"]
"ProjectAreaDecision" [style = "filled" penwidth = 1 fillcolor = "white" fontname = "Courier New" shape = "Mrecord" label = <<table border = "0" cellborder = "0" cellpadding = "3" bgcolor = "white"><tr><td bgcolor = "white" align = "center"><font color = "#ffffff">ProjectAreaDecision</font></td></tr><tr><td bgcolor = "#ffffff" cellpadding= "1"></td></tr><tr><td align = "left"><font color = "#ffffff">dto =&gt; dto.Project.Area</font></td></tr></table>>]
"ProjectSubTypeDecision" [style = "filled" penwidth = 1 fillcolor = "white" fontname = "Courier New" shape = "Mrecord" label = <<table border = "0" cellborder = "0" cellpadding = "3" bgcolor = "white"><tr><td bgcolor = "white" align = "center"><font color = "#ffffff">ProjectSubTypeDecision</font></td></tr><tr><td bgcolor = "#ffffff" cellpadding= "1"></td></tr><tr><td align = "left"><font color = "#ffffff">dto =&gt; dto.Project.SubType</font></td></tr></table>>]
"ProjectTypeDecision" -> "ToDoDecision" [label = "#default_path"]
"ProjectTypeDecision" [style = "filled" penwidth = 1 fillcolor = "white" fontname = "Courier New" shape = "Mrecord" label = <<table border = "0" cellborder = "0" cellpadding = "3" bgcolor = "white"><tr><td bgcolor = "white" align = "center"><font color = "#ffffff">ProjectTypeDecision</font></td></tr><tr><td bgcolor = "#ffffff" cellpadding= "1"></td></tr><tr><td align = "left"><font color = "#ffffff">dto =&gt; dto.Project.Type</font></td></tr></table>>]
"IsOnHoldDecision" [style = "filled" penwidth = 1 fillcolor = "white" fontname = "Courier New" shape = "Mrecord" label = <<table border = "0" cellborder = "0" cellpadding = "3" bgcolor = "white"><tr><td bgcolor = "white" align = "center"><font color = "#ffffff">IsOnHoldDecision</font></td></tr><tr><td bgcolor = "#ffffff" cellpadding= "1"></td></tr><tr><td align = "left"><font color = "#ffffff">dto =&gt; dto.Project.IsOnHold</font></td></tr></table>>]
"False FinishedDecision - SendNotificationAction" [style = "filled" penwidth = 1 fillcolor = "black" fontname = "Courier New" shape = "Mrecord" label = <<table border = "0" cellborder = "0" cellpadding = "3" bgcolor = "black"><tr><td bgcolor = "black" align = "center"><font color = "#ffffff">False FinishedDecision - SendNotificationAction</font></td></tr><tr><td bgcolor = "#ffffff" cellpadding= "1"></td></tr><tr><td align = "left"><font color = "#ffffff">dto =&gt; dto</font></td></tr><tr><td align = "left"><font color = "#ffffff">.SetSendNotification(True)</font></td></tr></table>>]
"FinishedDecision" [style = "filled" penwidth = 1 fillcolor = "white" fontname = "Courier New" shape = "Mrecord" label = <<table border = "0" cellborder = "0" cellpadding = "3" bgcolor = "white"><tr><td bgcolor = "white" align = "center"><font color = "#ffffff">FinishedDecision</font></td></tr><tr><td bgcolor = "#ffffff" cellpadding= "1"></td></tr><tr><td align = "left"><font color = "#ffffff">dto =&gt; (dto.Project.ItemsToDo == 0)</font></td></tr></table>>]
}
Loading

0 comments on commit 239ef71

Please sign in to comment.