From a3a878c7b21041de0e9babe84960890633e69388 Mon Sep 17 00:00:00 2001 From: Pawel Siemienik Date: Sun, 19 Apr 2020 12:22:15 +0200 Subject: [PATCH] #3 #6 test DumpColsCell, --- README.md | 4 +- .../data/Renderer011-DumpCols/expected.xlsx | Bin 0 -> 7447 bytes .../data/Renderer011-DumpCols/template.xlsx | Bin 0 -> 10273 bytes .../data/Renderer011-DumpCols/viewModel.json | 103 ++++++++++++++++++ 4 files changed, 105 insertions(+), 2 deletions(-) create mode 100644 tests/integration/data/Renderer011-DumpCols/expected.xlsx create mode 100644 tests/integration/data/Renderer011-DumpCols/template.xlsx create mode 100644 tests/integration/data/Renderer011-DumpCols/viewModel.json diff --git a/README.md b/README.md index e2609fb..81dd8bc 100644 --- a/README.md +++ b/README.md @@ -49,13 +49,13 @@ for more example I invite to tests data: [click here and check `Renderer` folder | Navigation | [EndRowCell](./src/cell/EndRowCell.ts) | 2 | `#! END_ROW` | Go to the beginning of next row | | | Worksheet
Navigation
Loop | [FinishCell](./src/cell/FinishCell.ts) | 7 | `#! FINISH conditionPath` | Finish rendering for current worksheet and:
1) go to next worksheet if `conditionPath===true`
2) repeat this template worksheet again (`conditionPath === false`) - looping through worksheets
3) finished whole rendering when this worksheet is the last one. | **Examples:**
`#! FINISHED ` or `#! FINISHED itemFromLoop.__iterated` | | Worksheet | [WsNameCell](./src/cell/WsNameCell.ts) | 13 | `#! WS_NAME pathToVariable` | Set worksheet's name. | **Examples:**
`#! WS_NAME worksheetName`
`#! WS_NAME item.title`
`#! WS_NAME translatedNames.0` | -| Loop | **TODO: describe it!** [DumpColsCell](./src/cell/DumpColsCell.ts) | | | | | +| Loop | [DumpColsCell](./src/cell/DumpColsCell.ts) | 10 | `#! DUMP_COLS pathToArray` | Useful for writing through multiple columns. It put each value of array to next column. | [Example](./tests/integration/data/Renderer011-DumpCols/) | | Loop | **TODO: tests done: simple, stripped; tests todo: nested, with formula, special fields, through worksheets,** [ForEachCell](./src/cell/ForEachCell.ts) | 6 | #! FOR_EACH item items | Begin the loop named `item`, set the first element of `items` into `item` and go to the beginning of next line.| Connected to: `ContinueCell`, `EndLoopCell`, `DeleteCell`, `FinishedCell`, `SumCell`, `AverageCell`. | | Loop | [ContinueCell](./src/cell/ContinueCell.ts) | 9 | `#! CONTINUE item` | Iterate to next element of loop named `item` (check `ForEachCell` for more information) and navigate to the beginning of new line. | | | Loop | [EndLoopCell](./src/cell/EndLoopCell.ts) | 8 | `#! END_LOOP item` | Mark cell when the loop `item` finished. | | | Aggregation| [SumCell](./src/cell/SumCell.ts) | 11 | `#! SUM item` | Write sum formulae for current column and the `item`'s rows. | [Example](./tests/integration/data/Renderer007-ForEach-Sum/) | | Aggregation | [AverageCell](./src/cell/AverageCell.ts) | 12 | `#! AVERAGE item` | Write average formulae for current column and the `item`'s rows. | [Example](./tests/integration/data/Renderer009-ForEach-Average/) | -| View Model | **TODO: test - nested loop** [DeleteCell](./src/cell/DeleteCell.ts) | 14 | `#! DELETE pathToVariable` | Delete variable, useful for nested loops.| [Example](./tests/integration/data/Renderer009-ForEach-Average/) | +| View Model | [DeleteCell](./src/cell/DeleteCell.ts) | 14 | `#! DELETE pathToVariable` | Delete variable, useful for nested loops.| [Example](./tests/integration/data/Renderer009-ForEach-Average/) | ## Commands [PREVIOUS VERSION]: diff --git a/tests/integration/data/Renderer011-DumpCols/expected.xlsx b/tests/integration/data/Renderer011-DumpCols/expected.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..2ccfc381d9c80220e83ecfd881a010b76cd5f016 GIT binary patch literal 7447 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