use json_to_table::{json_to_table, Orientation};
use serde_json::json;
use tabled::assert::test_table;
use tabled::settings::Style;
test_table!(
general_json_test_0,
json_to_table(&json!(
{
"widget": {
"debug": "on",
"window": {
"title": "Sample Konfabulator Widget",
"name": "main_window",
"width": 500,
"height": 500
},
"image": {
"src": "Images/Sun.png",
"name": "sun1",
"hOffset": 250,
"vOffset": 250,
"alignment": "center"
},
"text": {
"data": "Click Here",
"size": 36,
"style": "bold",
"name": "text1",
"hOffset": 250,
"vOffset": 100,
"alignment": "center",
"onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"
}
}
}
))
.with(Style::extended()),
"╔════════╦══════════════════════════════════════════════════════════════════════════╗"
"║ widget ║ ╔════════╦═════════════════════════════════════════════════════════════╗ ║"
"║ ║ ║ debug ║ on ║ ║"
"║ ║ ╠════════╬═════════════════════════════════════════════════════════════╣ ║"
"║ ║ ║ image ║ ╔═══════════╦══════════════════╗ ║ ║"
"║ ║ ║ ║ ║ alignment ║ center ║ ║ ║"
"║ ║ ║ ║ ╠═══════════╬══════════════════╣ ║ ║"
"║ ║ ║ ║ ║ hOffset ║ 250 ║ ║ ║"
"║ ║ ║ ║ ╠═══════════╬══════════════════╣ ║ ║"
"║ ║ ║ ║ ║ name ║ sun1 ║ ║ ║"
"║ ║ ║ ║ ╠═══════════╬══════════════════╣ ║ ║"
"║ ║ ║ ║ ║ src ║ Images/Sun.png ║ ║ ║"
"║ ║ ║ ║ ╠═══════════╬══════════════════╣ ║ ║"
"║ ║ ║ ║ ║ vOffset ║ 250 ║ ║ ║"
"║ ║ ║ ║ ╚═══════════╩══════════════════╝ ║ ║"
"║ ║ ╠════════╬═════════════════════════════════════════════════════════════╣ ║"
"║ ║ ║ text ║ ╔═══════════╦═════════════════════════════════════════════╗ ║ ║"
"║ ║ ║ ║ ║ alignment ║ center ║ ║ ║"
"║ ║ ║ ║ ╠═══════════╬═════════════════════════════════════════════╣ ║ ║"
"║ ║ ║ ║ ║ data ║ Click Here ║ ║ ║"
"║ ║ ║ ║ ╠═══════════╬═════════════════════════════════════════════╣ ║ ║"
"║ ║ ║ ║ ║ hOffset ║ 250 ║ ║ ║"
"║ ║ ║ ║ ╠═══════════╬═════════════════════════════════════════════╣ ║ ║"
"║ ║ ║ ║ ║ name ║ text1 ║ ║ ║"
"║ ║ ║ ║ ╠═══════════╬═════════════════════════════════════════════╣ ║ ║"
"║ ║ ║ ║ ║ onMouseUp ║ sun1.opacity = (sun1.opacity / 100) * 90; ║ ║ ║"
"║ ║ ║ ║ ╠═══════════╬═════════════════════════════════════════════╣ ║ ║"
"║ ║ ║ ║ ║ size ║ 36 ║ ║ ║"
"║ ║ ║ ║ ╠═══════════╬═════════════════════════════════════════════╣ ║ ║"
"║ ║ ║ ║ ║ style ║ bold ║ ║ ║"
"║ ║ ║ ║ ╠═══════════╬═════════════════════════════════════════════╣ ║ ║"
"║ ║ ║ ║ ║ vOffset ║ 100 ║ ║ ║"
"║ ║ ║ ║ ╚═══════════╩═════════════════════════════════════════════╝ ║ ║"
"║ ║ ╠════════╬═════════════════════════════════════════════════════════════╣ ║"
"║ ║ ║ window ║ ╔════════╦══════════════════════════════╗ ║ ║"
"║ ║ ║ ║ ║ height ║ 500 ║ ║ ║"
"║ ║ ║ ║ ╠════════╬══════════════════════════════╣ ║ ║"
"║ ║ ║ ║ ║ name ║ main_window ║ ║ ║"
"║ ║ ║ ║ ╠════════╬══════════════════════════════╣ ║ ║"
"║ ║ ║ ║ ║ title ║ Sample Konfabulator Widget ║ ║ ║"
"║ ║ ║ ║ ╠════════╬══════════════════════════════╣ ║ ║"
"║ ║ ║ ║ ║ width ║ 500 ║ ║ ║"
"║ ║ ║ ║ ╚════════╩══════════════════════════════╝ ║ ║"
"║ ║ ╚════════╩═════════════════════════════════════════════════════════════╝ ║"
"╚════════╩══════════════════════════════════════════════════════════════════════════╝"
);
test_table!(
general_json_test_1,
json_to_table(&json!(
{
"widget": {
"debug": "on",
"window": {
"title": "Sample Konfabulator Widget",
"name": "main_window",
"width": 500,
"height": 500
},
"image": {
"src": "Images/Sun.png",
"name": "sun1",
"hOffset": 250,
"vOffset": 250,
"alignment": "center"
},
"text": {
"data": "Click Here",
"size": 36,
"style": "bold",
"name": "text1",
"hOffset": 250,
"vOffset": 100,
"alignment": "center",
"onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"
}
}
}
))
.with(Style::extended())
.collapse(),
"╔════════╦════════╦═══════════════════════════════════════════════════════╗"
"║ widget ║ debug ║ on ║"
"║ ╠════════╬═══════════╦═══════════════════════════════════════════╣"
"║ ║ image ║ alignment ║ center ║"
"║ ║ ╠═══════════╬═══════════════════════════════════════════╣"
"║ ║ ║ hOffset ║ 250 ║"
"║ ║ ╠═══════════╬═══════════════════════════════════════════╣"
"║ ║ ║ name ║ sun1 ║"
"║ ║ ╠═══════════╬═══════════════════════════════════════════╣"
"║ ║ ║ src ║ Images/Sun.png ║"
"║ ║ ╠═══════════╬═══════════════════════════════════════════╣"
"║ ║ ║ vOffset ║ 250 ║"
"║ ╠════════╬═══════════╬═══════════════════════════════════════════╣"
"║ ║ text ║ alignment ║ center ║"
"║ ║ ╠═══════════╬═══════════════════════════════════════════╣"
"║ ║ ║ data ║ Click Here ║"
"║ ║ ╠═══════════╬═══════════════════════════════════════════╣"
"║ ║ ║ hOffset ║ 250 ║"
"║ ║ ╠═══════════╬═══════════════════════════════════════════╣"
"║ ║ ║ name ║ text1 ║"
"║ ║ ╠═══════════╬═══════════════════════════════════════════╣"
"║ ║ ║ onMouseUp ║ sun1.opacity = (sun1.opacity / 100) * 90; ║"
"║ ║ ╠═══════════╬═══════════════════════════════════════════╣"
"║ ║ ║ size ║ 36 ║"
"║ ║ ╠═══════════╬═══════════════════════════════════════════╣"
"║ ║ ║ style ║ bold ║"
"║ ║ ╠═══════════╬═══════════════════════════════════════════╣"
"║ ║ ║ vOffset ║ 100 ║"
"║ ╠════════╬════════╦══╩═══════════════════════════════════════════╣"
"║ ║ window ║ height ║ 500 ║"
"║ ║ ╠════════╬══════════════════════════════════════════════╣"
"║ ║ ║ name ║ main_window ║"
"║ ║ ╠════════╬══════════════════════════════════════════════╣"
"║ ║ ║ title ║ Sample Konfabulator Widget ║"
"║ ║ ╠════════╬══════════════════════════════════════════════╣"
"║ ║ ║ width ║ 500 ║"
"╚════════╩════════╩════════╩══════════════════════════════════════════════╝"
);
test_table!(
general_json_test_3,
json_to_table(&json!(
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}
))
.with(Style::modern()),
"┌──────────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐"
"│ glossary │ ┌──────────┬────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │"
"│ │ │ GlossDiv │ ┌───────────┬────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ │"
"│ │ │ │ │ GlossList │ ┌────────────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ │ │"
"│ │ │ │ │ │ │ GlossEntry │ ┌───────────┬───────────────────────────────────────────────────────────────────────────────────────────────┐ │ │ │ │"
"│ │ │ │ │ │ │ │ │ Abbrev │ ISO 8879:1986 │ │ │ │ │"
"│ │ │ │ │ │ │ │ ├───────────┼───────────────────────────────────────────────────────────────────────────────────────────────┤ │ │ │ │"
"│ │ │ │ │ │ │ │ │ Acronym │ SGML │ │ │ │ │"
"│ │ │ │ │ │ │ │ ├───────────┼───────────────────────────────────────────────────────────────────────────────────────────────┤ │ │ │ │"
"│ │ │ │ │ │ │ │ │ GlossDef │ ┌──────────────┬────────────────────────────────────────────────────────────────────────────┐ │ │ │ │ │"
"│ │ │ │ │ │ │ │ │ │ │ GlossSeeAlso │ ┌───────┐ │ │ │ │ │ │"
"│ │ │ │ │ │ │ │ │ │ │ │ │ GML │ │ │ │ │ │ │"
"│ │ │ │ │ │ │ │ │ │ │ │ ├───────┤ │ │ │ │ │ │"
"│ │ │ │ │ │ │ │ │ │ │ │ │ XML │ │ │ │ │ │ │"
"│ │ │ │ │ │ │ │ │ │ │ │ └───────┘ │ │ │ │ │ │"
"│ │ │ │ │ │ │ │ │ │ ├──────────────┼────────────────────────────────────────────────────────────────────────────┤ │ │ │ │ │"
"│ │ │ │ │ │ │ │ │ │ │ para │ A meta-markup language, used to create markup languages such as DocBook. │ │ │ │ │ │"
"│ │ │ │ │ │ │ │ │ │ └──────────────┴────────────────────────────────────────────────────────────────────────────┘ │ │ │ │ │"
"│ │ │ │ │ │ │ │ ├───────────┼───────────────────────────────────────────────────────────────────────────────────────────────┤ │ │ │ │"
"│ │ │ │ │ │ │ │ │ GlossSee │ markup │ │ │ │ │"
"│ │ │ │ │ │ │ │ ├───────────┼───────────────────────────────────────────────────────────────────────────────────────────────┤ │ │ │ │"
"│ │ │ │ │ │ │ │ │ GlossTerm │ Standard Generalized Markup Language │ │ │ │ │"
"│ │ │ │ │ │ │ │ ├───────────┼───────────────────────────────────────────────────────────────────────────────────────────────┤ │ │ │ │"
"│ │ │ │ │ │ │ │ │ ID │ SGML │ │ │ │ │"
"│ │ │ │ │ │ │ │ ├───────────┼───────────────────────────────────────────────────────────────────────────────────────────────┤ │ │ │ │"
"│ │ │ │ │ │ │ │ │ SortAs │ SGML │ │ │ │ │"
"│ │ │ │ │ │ │ │ └───────────┴───────────────────────────────────────────────────────────────────────────────────────────────┘ │ │ │ │"
"│ │ │ │ │ │ └────────────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ │ │ │"
"│ │ │ │ ├───────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │ │"
"│ │ │ │ │ title │ S │ │ │"
"│ │ │ │ └───────────┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ │ │"
"│ │ ├──────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │"
"│ │ │ title │ example glossary │ │"
"│ │ └──────────┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ │"
"└──────────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘"
);
test_table!(
general_json_test_4,
json_to_table(&json!(
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}
))
.with(Style::modern())
.collapse(),
"┌──────────┬──────────┬───────────┬────────────┬───────────┬─────────────────────────────────────────────────────────────────────────────────────────┐"
"│ glossary │ GlossDiv │ GlossList │ GlossEntry │ Abbrev │ ISO 8879:1986 │"
"│ │ │ │ ├───────────┼─────────────────────────────────────────────────────────────────────────────────────────┤"
"│ │ │ │ │ Acronym │ SGML │"
"│ │ │ │ ├───────────┼──────────────┬──────────────────────────────────────────────────────────────────────────┤"
"│ │ │ │ │ GlossDef │ GlossSeeAlso │ GML │"
"│ │ │ │ │ │ ├──────────────────────────────────────────────────────────────────────────┤"
"│ │ │ │ │ │ │ XML │"
"│ │ │ │ │ ├──────────────┼──────────────────────────────────────────────────────────────────────────┤"
"│ │ │ │ │ │ para │ A meta-markup language, used to create markup languages such as DocBook. │"
"│ │ │ │ ├───────────┼──────────────┴──────────────────────────────────────────────────────────────────────────┤"
"│ │ │ │ │ GlossSee │ markup │"
"│ │ │ │ ├───────────┼─────────────────────────────────────────────────────────────────────────────────────────┤"
"│ │ │ │ │ GlossTerm │ Standard Generalized Markup Language │"
"│ │ │ │ ├───────────┼─────────────────────────────────────────────────────────────────────────────────────────┤"
"│ │ │ │ │ ID │ SGML │"
"│ │ │ │ ├───────────┼─────────────────────────────────────────────────────────────────────────────────────────┤"
"│ │ │ │ │ SortAs │ SGML │"
"│ │ ├───────────┼────────────┴───────────┴─────────────────────────────────────────────────────────────────────────────────────────┤"
"│ │ │ title │ S │"
"│ ├──────────┼───────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤"
"│ │ title │ example glossary │"
"└──────────┴──────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘"
);
test_table!(
general_json_test_5,
json_to_table(&json!(
{
"menu": {
"header": "SVG Viewer",
"items": [
{"id": "Open"},
{"id": "OpenNew", "label": "Open New"},
null,
{"id": "ZoomIn", "label": "Zoom In"},
{"id": "ZoomOut", "label": "Zoom Out"},
{"id": "OriginalView", "label": "Original View"},
null,
{"id": "Quality"},
{"id": "Pause"},
{"id": "Mute"},
null,
{"id": "Find", "label": "Find..."},
{"id": "FindAgain", "label": "Find Again"},
{"id": "Copy"},
{"id": "CopyAgain", "label": "Copy Again"},
{"id": "CopySVG", "label": "Copy SVG"},
{"id": "ViewSVG", "label": "View SVG"},
{"id": "ViewSource", "label": "View Source"},
{"id": "SaveAs", "label": "Save As"},
null,
{"id": "Help"},
{"id": "About", "label": "About Adobe CVG Viewer..."}
]
}
}
))
.with(Style::modern()),
"┌──────┬──────────────────────────────────────────────────────────┐"
"│ menu │ ┌────────┬─────────────────────────────────────────────┐ │"
"│ │ │ header │ SVG Viewer │ │"
"│ │ ├────────┼─────────────────────────────────────────────┤ │"
"│ │ │ items │ ┌─────────────────────────────────────────┐ │ │"
"│ │ │ │ │ ┌────┬────────┐ │ │ │"
"│ │ │ │ │ │ id │ Open │ │ │ │"
"│ │ │ │ │ └────┴────────┘ │ │ │"
"│ │ │ │ ├─────────────────────────────────────────┤ │ │"
"│ │ │ │ │ ┌───────┬────────────┐ │ │ │"
"│ │ │ │ │ │ id │ OpenNew │ │ │ │"
"│ │ │ │ │ ├───────┼────────────┤ │ │ │"
"│ │ │ │ │ │ label │ Open New │ │ │ │"
"│ │ │ │ │ └───────┴────────────┘ │ │ │"
"│ │ │ │ ├─────────────────────────────────────────┤ │ │"
"│ │ │ │ │ │ │ │"
"│ │ │ │ ├─────────────────────────────────────────┤ │ │"
"│ │ │ │ │ ┌───────┬───────────┐ │ │ │"
"│ │ │ │ │ │ id │ ZoomIn │ │ │ │"
"│ │ │ │ │ ├───────┼───────────┤ │ │ │"
"│ │ │ │ │ │ label │ Zoom In │ │ │ │"
"│ │ │ │ │ └───────┴───────────┘ │ │ │"
"│ │ │ │ ├─────────────────────────────────────────┤ │ │"
"│ │ │ │ │ ┌───────┬────────────┐ │ │ │"
"│ │ │ │ │ │ id │ ZoomOut │ │ │ │"
"│ │ │ │ │ ├───────┼────────────┤ │ │ │"
"│ │ │ │ │ │ label │ Zoom Out │ │ │ │"
"│ │ │ │ │ └───────┴────────────┘ │ │ │"
"│ │ │ │ ├─────────────────────────────────────────┤ │ │"
"│ │ │ │ │ ┌───────┬─────────────────┐ │ │ │"
"│ │ │ │ │ │ id │ OriginalView │ │ │ │"
"│ │ │ │ │ ├───────┼─────────────────┤ │ │ │"
"│ │ │ │ │ │ label │ Original View │ │ │ │"
"│ │ │ │ │ └───────┴─────────────────┘ │ │ │"
"│ │ │ │ ├─────────────────────────────────────────┤ │ │"
"│ │ │ │ │ │ │ │"
"│ │ │ │ ├─────────────────────────────────────────┤ │ │"
"│ │ │ │ │ ┌────┬───────────┐ │ │ │"
"│ │ │ │ │ │ id │ Quality │ │ │ │"
"│ │ │ │ │ └────┴───────────┘ │ │ │"
"│ │ │ │ ├─────────────────────────────────────────┤ │ │"
"│ │ │ │ │ ┌────┬─────────┐ │ │ │"
"│ │ │ │ │ │ id │ Pause │ │ │ │"
"│ │ │ │ │ └────┴─────────┘ │ │ │"
"│ │ │ │ ├─────────────────────────────────────────┤ │ │"
"│ │ │ │ │ ┌────┬────────┐ │ │ │"
"│ │ │ │ │ │ id │ Mute │ │ │ │"
"│ │ │ │ │ └────┴────────┘ │ │ │"
"│ │ │ │ ├─────────────────────────────────────────┤ │ │"
"│ │ │ │ │ │ │ │"
"│ │ │ │ ├─────────────────────────────────────────┤ │ │"
"│ │ │ │ │ ┌───────┬───────────┐ │ │ │"
"│ │ │ │ │ │ id │ Find │ │ │ │"
"│ │ │ │ │ ├───────┼───────────┤ │ │ │"
"│ │ │ │ │ │ label │ Find... │ │ │ │"
"│ │ │ │ │ └───────┴───────────┘ │ │ │"
"│ │ │ │ ├─────────────────────────────────────────┤ │ │"
"│ │ │ │ │ ┌───────┬──────────────┐ │ │ │"
"│ │ │ │ │ │ id │ FindAgain │ │ │ │"
"│ │ │ │ │ ├───────┼──────────────┤ │ │ │"
"│ │ │ │ │ │ label │ Find Again │ │ │ │"
"│ │ │ │ │ └───────┴──────────────┘ │ │ │"
"│ │ │ │ ├─────────────────────────────────────────┤ │ │"
"│ │ │ │ │ ┌────┬────────┐ │ │ │"
"│ │ │ │ │ │ id │ Copy │ │ │ │"
"│ │ │ │ │ └────┴────────┘ │ │ │"
"│ │ │ │ ├─────────────────────────────────────────┤ │ │"
"│ │ │ │ │ ┌───────┬──────────────┐ │ │ │"
"│ │ │ │ │ │ id │ CopyAgain │ │ │ │"
"│ │ │ │ │ ├───────┼──────────────┤ │ │ │"
"│ │ │ │ │ │ label │ Copy Again │ │ │ │"
"│ │ │ │ │ └───────┴──────────────┘ │ │ │"
"│ │ │ │ ├─────────────────────────────────────────┤ │ │"
"│ │ │ │ │ ┌───────┬────────────┐ │ │ │"
"│ │ │ │ │ │ id │ CopySVG │ │ │ │"
"│ │ │ │ │ ├───────┼────────────┤ │ │ │"
"│ │ │ │ │ │ label │ Copy SVG │ │ │ │"
"│ │ │ │ │ └───────┴────────────┘ │ │ │"
"│ │ │ │ ├─────────────────────────────────────────┤ │ │"
"│ │ │ │ │ ┌───────┬────────────┐ │ │ │"
"│ │ │ │ │ │ id │ ViewSVG │ │ │ │"
"│ │ │ │ │ ├───────┼────────────┤ │ │ │"
"│ │ │ │ │ │ label │ View SVG │ │ │ │"
"│ │ │ │ │ └───────┴────────────┘ │ │ │"
"│ │ │ │ ├─────────────────────────────────────────┤ │ │"
"│ │ │ │ │ ┌───────┬───────────────┐ │ │ │"
"│ │ │ │ │ │ id │ ViewSource │ │ │ │"
"│ │ │ │ │ ├───────┼───────────────┤ │ │ │"
"│ │ │ │ │ │ label │ View Source │ │ │ │"
"│ │ │ │ │ └───────┴───────────────┘ │ │ │"
"│ │ │ │ ├─────────────────────────────────────────┤ │ │"
"│ │ │ │ │ ┌───────┬───────────┐ │ │ │"
"│ │ │ │ │ │ id │ SaveAs │ │ │ │"
"│ │ │ │ │ ├───────┼───────────┤ │ │ │"
"│ │ │ │ │ │ label │ Save As │ │ │ │"
"│ │ │ │ │ └───────┴───────────┘ │ │ │"
"│ │ │ │ ├─────────────────────────────────────────┤ │ │"
"│ │ │ │ │ │ │ │"
"│ │ │ │ ├─────────────────────────────────────────┤ │ │"
"│ │ │ │ │ ┌────┬────────┐ │ │ │"
"│ │ │ │ │ │ id │ Help │ │ │ │"
"│ │ │ │ │ └────┴────────┘ │ │ │"
"│ │ │ │ ├─────────────────────────────────────────┤ │ │"
"│ │ │ │ │ ┌───────┬─────────────────────────────┐ │ │ │"
"│ │ │ │ │ │ id │ About │ │ │ │"
"│ │ │ │ │ ├───────┼─────────────────────────────┤ │ │ │"
"│ │ │ │ │ │ label │ About Adobe CVG Viewer... │ │ │ │"
"│ │ │ │ │ └───────┴─────────────────────────────┘ │ │ │"
"│ │ │ │ └─────────────────────────────────────────┘ │ │"
"│ │ └────────┴─────────────────────────────────────────────┘ │"
"└──────┴──────────────────────────────────────────────────────────┘"
);
test_table!(
general_json_test_6,
json_to_table(&json!(
{
"menu": {
"header": "SVG Viewer",
"items": [
{"id": "Open"},
{"id": "OpenNew", "label": "Open New"},
null,
{"id": "ZoomIn", "label": "Zoom In"},
{"id": "ZoomOut", "label": "Zoom Out"},
{"id": "OriginalView", "label": "Original View"},
null,
{"id": "Quality"},
{"id": "Pause"},
{"id": "Mute"},
null,
{"id": "Find", "label": "Find..."},
{"id": "FindAgain", "label": "Find Again"},
{"id": "Copy"},
{"id": "CopyAgain", "label": "Copy Again"},
{"id": "CopySVG", "label": "Copy SVG"},
{"id": "ViewSVG", "label": "View SVG"},
{"id": "ViewSource", "label": "View Source"},
{"id": "SaveAs", "label": "Save As"},
null,
{"id": "Help"},
{"id": "About", "label": "About Adobe CVG Viewer..."}
]
}
}
))
.with(Style::modern())
.collapse(),
"┌──────┬────────┬───────────────────────────────────┐"
"│ menu │ header │ SVG Viewer │"
"│ ├────────┼────┬──────────────────────────────┤"
"│ │ items │ id │ Open │"
"│ │ ├────┴──┬───────────────────────────┤"
"│ │ │ id │ OpenNew │"
"│ │ ├───────┼───────────────────────────┤"
"│ │ │ label │ Open New │"
"│ │ ├───────┴───────────────────────────┤"
"│ │ │ │"
"│ │ ├───────┬───────────────────────────┤"
"│ │ │ id │ ZoomIn │"
"│ │ ├───────┼───────────────────────────┤"
"│ │ │ label │ Zoom In │"
"│ │ ├───────┼───────────────────────────┤"
"│ │ │ id │ ZoomOut │"
"│ │ ├───────┼───────────────────────────┤"
"│ │ │ label │ Zoom Out │"
"│ │ ├───────┼───────────────────────────┤"
"│ │ │ id │ OriginalView │"
"│ │ ├───────┼───────────────────────────┤"
"│ │ │ label │ Original View │"
"│ │ ├───────┴───────────────────────────┤"
"│ │ │ │"
"│ │ ├────┬──────────────────────────────┤"
"│ │ │ id │ Quality │"
"│ │ ├────┼──────────────────────────────┤"
"│ │ │ id │ Pause │"
"│ │ ├────┼──────────────────────────────┤"
"│ │ │ id │ Mute │"
"│ │ ├────┴──────────────────────────────┤"
"│ │ │ │"
"│ │ ├───────┬───────────────────────────┤"
"│ │ │ id │ Find │"
"│ │ ├───────┼───────────────────────────┤"
"│ │ │ label │ Find... │"
"│ │ ├───────┼───────────────────────────┤"
"│ │ │ id │ FindAgain │"
"│ │ ├───────┼───────────────────────────┤"
"│ │ │ label │ Find Again │"
"│ │ ├────┬──┴───────────────────────────┤"
"│ │ │ id │ Copy │"
"│ │ ├────┴──┬───────────────────────────┤"
"│ │ │ id │ CopyAgain │"
"│ │ ├───────┼───────────────────────────┤"
"│ │ │ label │ Copy Again │"
"│ │ ├───────┼───────────────────────────┤"
"│ │ │ id │ CopySVG │"
"│ │ ├───────┼───────────────────────────┤"
"│ │ │ label │ Copy SVG │"
"│ │ ├───────┼───────────────────────────┤"
"│ │ │ id │ ViewSVG │"
"│ │ ├───────┼───────────────────────────┤"
"│ │ │ label │ View SVG │"
"│ │ ├───────┼───────────────────────────┤"
"│ │ │ id │ ViewSource │"
"│ │ ├───────┼───────────────────────────┤"
"│ │ │ label │ View Source │"
"│ │ ├───────┼───────────────────────────┤"
"│ │ │ id │ SaveAs │"
"│ │ ├───────┼───────────────────────────┤"
"│ │ │ label │ Save As │"
"│ │ ├───────┴───────────────────────────┤"
"│ │ │ │"
"│ │ ├────┬──────────────────────────────┤"
"│ │ │ id │ Help │"
"│ │ ├────┴──┬───────────────────────────┤"
"│ │ │ id │ About │"
"│ │ ├───────┼───────────────────────────┤"
"│ │ │ label │ About Adobe CVG Viewer... │"
"└──────┴────────┴───────┴───────────────────────────┘"
);
test_table!(
many_splits_between_map_entries_test,
json_to_table(&json!(
{
"menu": { "heade1": { "heade2": { "heade3": "SVG Viewer" } } },
"menu2": { "heade4": { "heade5": { "heade6": { "header": { "header": { "header": { "header": "SVG Viewer" } } } } } } },
"menu3": { "he": { "asdd": { "x": { "1": { "header": { "header": { "header": "SVG Viewer" } } } } } } },
"menu4": { "he": { "asdd": { "xxxx": { "": { "3333": { "2": { "header": "SVG Viewer" } } } } } } },
}
))
.with(Style::modern())
.collapse(),
"┌───────┬────────┬────────┬────────┬────────────────────────────────────────────────┐"
"│ menu │ heade1 │ heade2 │ heade3 │ SVG Viewer │"
"├───────┼────────┼────────┼────────┼────────┬────────┬────────┬────────┬────────────┤"
"│ menu2 │ heade4 │ heade5 │ heade6 │ header │ header │ header │ header │ SVG Viewer │"
"├───────┼────┬───┴──┬───┬─┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴────────┴────────────┤"
"│ menu3 │ he │ asdd │ x │ 1 │ header │ header │ header │ SVG Viewer │"
"├───────┼────┼──────┼───┴──┬┴─┬──────┼───┬────┴───┬────┴────────────────────────────┤"
"│ menu4 │ he │ asdd │ xxxx │ │ 3333 │ 2 │ header │ SVG Viewer │"
"└───────┴────┴──────┴──────┴──┴──────┴───┴────────┴─────────────────────────────────┘"
);
test_table!(
array_split_test_0,
json_to_table(&json!(
{
"menu2": [ { "heade1": { "heade3": "SVG Viewe1" } }, { "heade5": { "heade7": "SVG Viewe9" } } ],
"menu3": [ { "heade2": { "heade4": "SVG Viewe2" } }, { "heade6": { "heade8": "SVG View10" } } ],
}
))
.with(Style::modern())
.collapse(),
"┌───────┬────────┬────────┬────────────┐"
"│ menu2 │ heade1 │ heade3 │ SVG Viewe1 │"
"│ ├────────┼────────┼────────────┤"
"│ │ heade5 │ heade7 │ SVG Viewe9 │"
"├───────┼────────┼────────┼────────────┤"
"│ menu3 │ heade2 │ heade4 │ SVG Viewe2 │"
"│ ├────────┼────────┼────────────┤"
"│ │ heade6 │ heade8 │ SVG View10 │"
"└───────┴────────┴────────┴────────────┘"
);
test_table!(
array_split_test_1,
json_to_table(&json!(
{
"menu2": [
{ "heade1": { "heade3": "SVG Viewe1" } },
{ "heade5": { "heade7": "SVG Viewe9" } },
],
}
))
.with(Style::modern())
.collapse(),
"┌───────┬────────┬────────┬────────────┐"
"│ menu2 │ heade1 │ heade3 │ SVG Viewe1 │"
"│ ├────────┼────────┼────────────┤"
"│ │ heade5 │ heade7 │ SVG Viewe9 │"
"└───────┴────────┴────────┴────────────┘"
);
test_table!(
array_split_test_2,
json_to_table(&json!(
{
"menu2": [ { "header": { "header": "SVG Viewer" } }, { "header": { "header": "SVG Viewer" } } ],
"menu3": [ { "hea": { "header": "SVG Viewer" } }, { "header": { "header": "SVG Viewer" } } ],
}
))
.with(Style::modern())
.collapse(),
"┌───────┬────────┬────────┬────────────┐"
"│ menu2 │ header │ header │ SVG Viewer │"
"│ ├────────┼────────┼────────────┤"
"│ │ header │ header │ SVG Viewer │"
"├───────┼─────┬──┴─────┬──┴────────────┤"
"│ menu3 │ hea │ header │ SVG Viewer │"
"│ ├─────┴──┬─────┴──┬────────────┤"
"│ │ header │ header │ SVG Viewer │"
"└───────┴────────┴────────┴────────────┘"
);
test_table!(
array_split_test_3,
json_to_table(&json!(
{
"host": { "long_os_version": "", "uptime": 0.0 },
"men": { "available": 123123.22 },
}
))
.with(Style::modern())
.collapse(),
"┌──────┬─────────────────┬─────┐"
"│ host │ long_os_version │ │"
"│ ├─────────────────┼─────┤"
"│ │ uptime │ 0.0 │"
"├──────┼───────────┬─────┴─────┤"
"│ men │ available │ 123123.22 │"
"└──────┴───────────┴───────────┘"
);
test_table!(
array_split_test_4,
json_to_table(&json!(
{
"key1": [
{ "name": "groups" },
{ "root": ["root"] },
{ "git": ["git"] },
]
}
))
.with(Style::modern())
.collapse(),
"┌──────┬──────┬────────┐"
"│ key1 │ name │ groups │"
"│ ├──────┼────────┤"
"│ │ root │ root │"
"│ ├─────┬┴────────┤"
"│ │ git │ git │"
"└──────┴─────┴─────────┘"
);
test_table!(
array_split_with_inner_array_test,
json_to_table(&json!(
{
"menu": [
[ { "key1": 123, "key2": "asd" } ],
[ { "key": 123, "ke": "asd" } ] ,
],
}
))
.with(Style::modern())
.collapse(),
"┌──────┬──────┬─────┐"
"│ menu │ key1 │ 123 │"
"│ ├──────┼─────┤"
"│ │ key2 │ asd │"
"│ ├─────┬┴─────┤"
"│ │ ke │ asd │"
"│ ├─────┼──────┤"
"│ │ key │ 123 │"
"└──────┴─────┴──────┘"
);
test_table!(
array_split_with_inner_array_2_test,
json_to_table(&json!(
[
[ [ { "key1": 123 } ], [ "asd", "asd" ] ],
[ [ { "k": 123 } ], [ "v", "z" ] ],
]
))
.with(Style::modern())
.collapse(),
"┌──────┬─────┐"
"│ key1 │ 123 │"
"├──────┴─────┤"
"│ asd │"
"├────────────┤"
"│ asd │"
"├───┬────────┤"
"│ k │ 123 │"
"├───┴────────┤"
"│ v │"
"├────────────┤"
"│ z │"
"└────────────┘"
);
test_table!(
test_map_empty_entity_collapsed_0,
json_to_table(&json!(
{
"field1" : {},
"field2": "Value",
"field3" : {},
"field4": 3,
"field5" : {}
}
))
.with(Style::modern())
.collapse(),
"┌────────┬───────┐"
"│ field1 │ │"
"├────────┼───────┤"
"│ field2 │ Value │"
"├────────┼───────┤"
"│ field3 │ │"
"├────────┼───────┤"
"│ field4 │ 3 │"
"├────────┼───────┤"
"│ field5 │ │"
"└────────┴───────┘"
);
test_table!(
test_map_empty_entity_collapsed_1,
json_to_table(&json!(
{
"field1" : [],
"field2": "Value",
"field3" : [],
"field4": 3,
"field5" : []
}
))
.with(Style::modern())
.collapse(),
"┌────────┬───────┐"
"│ field1 │ │"
"├────────┼───────┤"
"│ field2 │ Value │"
"├────────┼───────┤"
"│ field3 │ │"
"├────────┼───────┤"
"│ field4 │ 3 │"
"├────────┼───────┤"
"│ field5 │ │"
"└────────┴───────┘"
);
test_table!(
test_map_empty_entity_collapsed_2,
json_to_table(&json!(
{
"key0": {},
"field1" : {
"key1": "value1",
"key2": []
},
"field2": "Value",
"field3" : [],
"field4": [
{},
"123",
{},
"sadas",
{}
],
"field5" : []
}
))
.with(Style::modern())
.collapse(),
"┌────────┬──────┬────────┐"
"│ field1 │ key1 │ value1 │"
"│ ├──────┼────────┤"
"│ │ key2 │ │"
"├────────┼──────┴────────┤"
"│ field2 │ Value │"
"├────────┼───────────────┤"
"│ field3 │ │"
"├────────┼───────────────┤"
"│ field4 │ │"
"│ ├───────────────┤"
"│ │ 123 │"
"│ ├───────────────┤"
"│ │ │"
"│ ├───────────────┤"
"│ │ sadas │"
"│ ├───────────────┤"
"│ │ │"
"├────────┼───────────────┤"
"│ field5 │ │"
"├────────┼───────────────┤"
"│ key0 │ │"
"└────────┴───────────────┘"
);
test_table!(
test_list_empty_entity_collapsed_0,
json_to_table(&json!(
[{}, "field1", {}, "field2", {}]
))
.with(Style::modern())
.collapse(),
"┌────────┐"
"│ │"
"├────────┤"
"│ field1 │"
"├────────┤"
"│ │"
"├────────┤"
"│ field2 │"
"├────────┤"
"│ │"
"└────────┘"
);
test_table!(
test_list_empty_entity_collapsed_1,
json_to_table(&json!(
[{}, {}, {}]
))
.with(Style::modern())
.collapse(),
"┌──┐"
"│ │"
"├──┤"
"│ │"
"├──┤"
"│ │"
"└──┘"
);
test_table!(
test_list_empty_entity_collapsed_2,
json_to_table(&json!(
[[], [], []]
))
.with(Style::modern())
.collapse(),
"┌──┐"
"│ │"
"├──┤"
"│ │"
"├──┤"
"│ │"
"└──┘"
);
test_table!(
test_map_empty_entity_collapsed_1_horizontal,
json_to_table(&json!(
{
"field1" : [],
"field2": "Value",
"field3" : [],
"field4": 3,
"field5" : []
}
))
.with(Style::modern())
.array_orientation(Orientation::Row)
.collapse(),
"┌────────┬───────┐"
"│ field1 │ │"
"├────────┼───────┤"
"│ field2 │ Value │"
"├────────┼───────┤"
"│ field3 │ │"
"├────────┼───────┤"
"│ field4 │ 3 │"
"├────────┼───────┤"
"│ field5 │ │"
"└────────┴───────┘"
);
test_table!(
test_map_empty_entity_collapsed_2_horizontal,
json_to_table(&json!(
{
"key0": {},
"field1" : {
"key1": "value1",
"key2": []
},
"field2": "Value",
"field3" : [],
"field4": [
{},
"123",
{},
"sadas",
{}
],
"field5" : []
}
))
.with(Style::modern())
.array_orientation(Orientation::Row)
.collapse(),
"┌────────┬──────┬───────────────┐"
"│ field1 │ key1 │ value1 │"
"│ ├──────┼───────────────┤"
"│ │ key2 │ │"
"├────────┼──────┴───────────────┤"
"│ field2 │ Value │"
"├────────┼──────────────────────┤"
"│ field3 │ │"
"├────────┼──┬─────┬──┬───────┬──┤"
"│ field4 │ │ 123 │ │ sadas │ │"
"├────────┼──┴─────┴──┴───────┴──┤"
"│ field5 │ │"
"├────────┼──────────────────────┤"
"│ key0 │ │"
"└────────┴──────────────────────┘"
);
test_table!(
test_list_empty_entity_collapsed_0_horizontal,
json_to_table(&json!(
[{}, "field1", {}, "field2", {}]
))
.with(Style::modern())
.array_orientation(Orientation::Row)
.collapse(),
"┌──┬────────┬──┬────────┬──┐"
"│ │ field1 │ │ field2 │ │"
"└──┴────────┴──┴────────┴──┘"
);
test_table!(
test_list_empty_entity_collapsed_1_horizontal,
json_to_table(&json!(
[{}, {}, {}]
))
.with(Style::modern())
.array_orientation(Orientation::Row)
.collapse(),
"┌──┬──┬──┐"
"│ │ │ │"
"└──┴──┴──┘"
);
test_table!(
test_list_empty_entity_collapsed_2_horizontal,
json_to_table(&json!(
[[], [], []]
))
.with(Style::modern())
.array_orientation(Orientation::Row)
.collapse(),
"┌──┬──┬──┐"
"│ │ │ │"
"└──┴──┴──┘"
);
test_table!(
test_map_empty_entity_collapsed_1_horizontal_map,
json_to_table(&json!(
{
"field1" : [],
"field2": "Value",
"field3" : [],
"field4": 3,
"field5" : []
}
))
.with(Style::modern())
.object_orientation(Orientation::Row)
.collapse(),
"┌────────┬────────┬────────┬────────┬────────┐"
"│ field1 │ field2 │ field3 │ field4 │ field5 │"
"├────────┼────────┼────────┼────────┼────────┤"
"│ │ Value │ │ 3 │ │"
"└────────┴────────┴────────┴────────┴────────┘"
);
test_table!(
test_map_empty_entity_collapsed_2_horizontal_map,
json_to_table(&json!(
{
"key0": {},
"field1" : {
"key1": "value1",
"key2": []
},
"field2": "Value",
"field3" : [],
"field4": [
{},
"123",
{},
"sadas",
{}
],
"field5" : []
}
))
.with(Style::modern())
.object_orientation(Orientation::Row)
.collapse(),
"┌───────────────┬────────┬────────┬────────┬────────┬──────┐"
"│ field1 │ field2 │ field3 │ field4 │ field5 │ key0 │"
"├────────┬──────┼────────┼────────┼────────┼────────┼──────┤"
"│ key1 │ key2 │ Value │ │ │ │ │"
"├────────┼──────┤ │ ├────────┤ │ │"
"│ value1 │ │ │ │ 123 │ │ │"
"│ │ │ │ ├────────┤ │ │"
"│ │ │ │ │ │ │ │"
"│ │ │ │ ├────────┤ │ │"
"│ │ │ │ │ sadas │ │ │"
"│ │ │ │ ├────────┤ │ │"
"│ │ │ │ │ │ │ │"
"└────────┴──────┴────────┴────────┴────────┴────────┴──────┘"
);
test_table!(
test_list_empty_entity_collapsed_0_horizontal_map,
json_to_table(&json!(
[{}, "field1", {}, "field2", {}]
))
.with(Style::modern())
.object_orientation(Orientation::Row)
.collapse(),
"┌────────┐"
"│ │"
"├────────┤"
"│ field1 │"
"├────────┤"
"│ │"
"├────────┤"
"│ field2 │"
"├────────┤"
"│ │"
"└────────┘"
);
test_table!(
test_list_empty_entity_collapsed_1_horizontal_map,
json_to_table(&json!(
[{}, {}, {}]
))
.with(Style::modern())
.object_orientation(Orientation::Row)
.collapse(),
"┌──┐"
"│ │"
"├──┤"
"│ │"
"├──┤"
"│ │"
"└──┘"
);
test_table!(
test_list_empty_entity_collapsed_2_horizontal_map,
json_to_table(&json!(
[[], [], []]
))
.with(Style::modern())
.object_orientation(Orientation::Row)
.collapse(),
"┌──┐"
"│ │"
"├──┤"
"│ │"
"├──┤"
"│ │"
"└──┘"
);
test_table!(
test_map_empty_entity_plain_0,
json_to_table(&json!(
{
"field1" : {},
"field2": "Value",
"field3" : {},
"field4": 3,
"field5" : {}
}
))
.with(Style::modern()),
"┌────────┬─────────┐"
"│ field1 │ │"
"├────────┼─────────┤"
"│ field2 │ Value │"
"├────────┼─────────┤"
"│ field3 │ │"
"├────────┼─────────┤"
"│ field4 │ 3 │"
"├────────┼─────────┤"
"│ field5 │ │"
"└────────┴─────────┘"
);
test_table!(
test_list_empty_entity_plain_0,
json_to_table(&json!(
[{}, "field1", {}, "field2", {}]
))
.with(Style::modern()),
"┌──────────┐"
"│ │"
"├──────────┤"
"│ field1 │"
"├──────────┤"
"│ │"
"├──────────┤"
"│ field2 │"
"├──────────┤"
"│ │"
"└──────────┘"
);
test_table!(
test_list_empty_entity_plain_1,
json_to_table(&json!(
[[], "field1", [], "field2", []]
))
.with(Style::modern()),
"┌──────────┐"
"│ │"
"├──────────┤"
"│ field1 │"
"├──────────┤"
"│ │"
"├──────────┤"
"│ field2 │"
"├──────────┤"
"│ │"
"└──────────┘"
);
test_table!(
test_list_empty_entity_plain_2,
json_to_table(&json!(
[{}, {}, {}]
))
.with(Style::modern()),
"┌──┐"
"│ │"
"├──┤"
"│ │"
"├──┤"
"│ │"
"└──┘"
);
test_table!(
test_multiline_key_height_bigger_then_value,
json_to_table(&json!(
{
"config": { "key1": 123, "multi_\n_line_\n_key": false, "key2": {"a long long long key": false} },
}
))
.with(Style::modern())
.collapse(),
"┌────────┬────────┬──────────────────────────────┐"
"│ config │ key1 │ 123 │"
"│ ├────────┼──────────────────────┬───────┤"
"│ │ key2 │ a long long long key │ false │"
"│ ├────────┼──────────────────────┴───────┤"
"│ │ multi_ │ false │"
"│ │ _line_ │ │"
"│ │ _key │ │"
"└────────┴────────┴──────────────────────────────┘"
);
test_table!(
test_multiline_key_height_less_then_value,
json_to_table(&json!(
{
"config": { "key1": 123, "multi_\n_line_\n_key": "1\n2\n3\n4\n5\n6\n7\n", "key2": {"a long long long key": false} },
}
))
.with(Style::modern())
.collapse(),
"┌────────┬────────┬──────────────────────────────┐"
"│ config │ key1 │ 123 │"
"│ ├────────┼──────────────────────┬───────┤"
"│ │ key2 │ a long long long key │ false │"
"│ ├────────┼──────────────────────┴───────┤"
"│ │ multi_ │ 1 │"
"│ │ _line_ │ 2 │"
"│ │ _key │ 3 │"
"│ │ │ 4 │"
"│ │ │ 5 │"
"│ │ │ 6 │"
"│ │ │ 7 │"
"│ │ │ │"
"└────────┴────────┴──────────────────────────────┘"
);