# Generate dot syntax from graph objects # helper functions node <- function(id, label = NA) { if (all(is.na(label))) { paste0("'", id, "'") } else { paste0("'", id, "' \\[label = '", label, "'\\]") } } edge <- function(from, to) paste0("'", from, "'->'", to, "'") attrib_block <- "\\[[[:alnum:]'=.,[:space:]]*\\]" expect_dot <- function(graph, pattern) { expect_match( object = generate_dot(graph), regexp = paste0(pattern, collapse = "[[:space:]]*")) } test_that("Simple graph translates into specific form", { # Create simple graph nodes <- create_node_df(n = 10) edges <- create_edge_df( from = 1:9, to = 2:10) graph <- create_graph( nodes_df = nodes, edges_df = edges) expect_dot( graph, c("^digraph", "\\{", "graph", attrib_block, "node", attrib_block, "edge", attrib_block, node(1:10), edge(1:9, 2:10), "\\}$") ) }) # test_that("Graph with clustered nodes create subgraph", { # # # Create node clusters # # nodes <- # create_node_df( # n = 6, # cluster = c(NA, 'foo', 'foo', 'bar', NA, 'bar')) # # edges <- # create_edge_df( # from = 1:5, # to = 2:6) # # graph <- # create_graph( # nodes_df = nodes, # edges_df = edges) # # expect_dot( # graph, # c("^digraph", "\\{", # "graph", attrib_block, # "node", attrib_block, # "edge", attrib_block, # node(c(1,5)), # "subgraph cluster2\\{\nlabel='bar'", # node(c(4,6)), "\\}", # "subgraph cluster3\\{\nlabel='foo'", # node(c(2,3)), "\\}", # edge(1:5, 2:6), # "\\}$") # ) # # # Example from @Enchufa2 # # nodes = data.frame(id = c(1,2,3), # label = c("a","b","c"), # cluster = c(NA,"data","data")) # edges = data.frame(from = c(1,2), # to = c(3,3)) # # graph <- create_graph() %>% # add_nodes_from_table(nodes, label_col = label) %>% # add_edges_from_table(edges, from, to, id_external) %>% # add_global_graph_attrs("layout", "dot", "graph") # # expect_dot( # graph, # c("^digraph", "\\{", # "graph", attrib_block, # "node", attrib_block, # "edge", attrib_block, # node(1, 'a'), # "subgraph cluster2\\{\nlabel='data'", # node(c(2,3), c('b', 'c')), "\\}", # edge(c(1, 2), c(3, 3)), # "\\}$") # ) # })