collab/mermaid/packages/parser/tests/pie.test.tsblame
View source
6dd74de1import { describe, expect, it } from 'vitest';
6dd74de2
6dd74de3import { Pie } from '../src/language/index.js';
6dd74de4import { expectNoErrorsOrAlternatives, pieParse as parse } from './test-util.js';
6dd74de5
6dd74de6describe('pie', () => {
6dd74de7 describe('should handle pie definition with or without showData', () => {
6dd74de8 it.each([
6dd74de9 `pie`,
6dd74de10 ` pie `,
6dd74de11 `\tpie\t`,
6dd74de12 `
6dd74de13 \tpie
6dd74de14 `,
6dd74de15 ])('should handle regular pie', (context: string) => {
6dd74de16 const result = parse(context);
6dd74de17 expectNoErrorsOrAlternatives(result);
6dd74de18 expect(result.value.$type).toBe(Pie.$type);
6dd74de19 });
6dd74de20
6dd74de21 it.each([
6dd74de22 `pie showData`,
6dd74de23 ` pie showData `,
6dd74de24 `\tpie\tshowData\t`,
6dd74de25 `
6dd74de26 pie\tshowData
6dd74de27 `,
6dd74de28 ])('should handle regular showData', (context: string) => {
6dd74de29 const result = parse(context);
6dd74de30 expectNoErrorsOrAlternatives(result);
6dd74de31 expect(result.value.$type).toBe(Pie.$type);
6dd74de32
6dd74de33 const { showData } = result.value;
6dd74de34 expect(showData).toBeTruthy();
6dd74de35 });
6dd74de36 });
6dd74de37 describe('should handle TitleAndAccessibilities', () => {
6dd74de38 describe('should handle TitleAndAccessibilities without showData', () => {
6dd74de39 it.each([
6dd74de40 `pie title sample title`,
6dd74de41 ` pie title sample title `,
6dd74de42 `\tpie\ttitle sample title\t`,
6dd74de43 `pie
6dd74de44 \ttitle sample title
6dd74de45 `,
6dd74de46 ])('should handle regular pie + title in same line', (context: string) => {
6dd74de47 const result = parse(context);
6dd74de48 expectNoErrorsOrAlternatives(result);
6dd74de49 expect(result.value.$type).toBe(Pie.$type);
6dd74de50
6dd74de51 const { title } = result.value;
6dd74de52 expect(title).toBe('sample title');
6dd74de53 });
6dd74de54
6dd74de55 it.each([
6dd74de56 `pie
6dd74de57 title sample title`,
6dd74de58 `pie
6dd74de59 title sample title
6dd74de60 `,
6dd74de61 `pie
6dd74de62 title sample title`,
6dd74de63 `pie
6dd74de64 title sample title
6dd74de65 `,
6dd74de66 ])('should handle regular pie + title in different line', (context: string) => {
6dd74de67 const result = parse(context);
6dd74de68 expectNoErrorsOrAlternatives(result);
6dd74de69 expect(result.value.$type).toBe(Pie.$type);
6dd74de70
6dd74de71 const { title } = result.value;
6dd74de72 expect(title).toBe('sample title');
6dd74de73 });
6dd74de74 });
6dd74de75
6dd74de76 describe('should handle TitleAndAccessibilities with showData', () => {
6dd74de77 it.each([
6dd74de78 `pie showData title sample title`,
6dd74de79 `pie showData title sample title
6dd74de80 `,
6dd74de81 ])('should handle regular pie + showData + title', (context: string) => {
6dd74de82 const result = parse(context);
6dd74de83 expectNoErrorsOrAlternatives(result);
6dd74de84 expect(result.value.$type).toBe(Pie.$type);
6dd74de85
6dd74de86 const { showData, title } = result.value;
6dd74de87 expect(showData).toBeTruthy();
6dd74de88 expect(title).toBe('sample title');
6dd74de89 });
6dd74de90
6dd74de91 it.each([
6dd74de92 `pie showData
6dd74de93 title sample title`,
6dd74de94 `pie showData
6dd74de95 title sample title
6dd74de96 `,
6dd74de97 `pie showData
6dd74de98 title sample title`,
6dd74de99 `pie showData
6dd74de100 title sample title
6dd74de101 `,
6dd74de102 ])('should handle regular showData + title in different line', (context: string) => {
6dd74de103 const result = parse(context);
6dd74de104 expectNoErrorsOrAlternatives(result);
6dd74de105 expect(result.value.$type).toBe(Pie.$type);
6dd74de106
6dd74de107 const { showData, title } = result.value;
6dd74de108 expect(showData).toBeTruthy();
6dd74de109 expect(title).toBe('sample title');
6dd74de110 });
6dd74de111 });
6dd74de112 });
6dd74de113
6dd74de114 describe('should handle sections', () => {
6dd74de115 it.each([
6dd74de116 `pie
6dd74de117 "GitHub":100
6dd74de118 "GitLab":50`,
6dd74de119 `pie
6dd74de120 "GitHub" : 100
6dd74de121 "GitLab" : 50`,
6dd74de122 `pie
6dd74de123 "GitHub"\t:\t100
6dd74de124 "GitLab"\t:\t50`,
6dd74de125 `pie
6dd74de126 \t"GitHub" \t : \t 100
6dd74de127 \t"GitLab" \t : \t 50
6dd74de128 `,
6dd74de129 ])('should handle regular sections', (context: string) => {
6dd74de130 const result = parse(context);
6dd74de131 expectNoErrorsOrAlternatives(result);
6dd74de132 expect(result.value.$type).toBe(Pie.$type);
6dd74de133
6dd74de134 const { sections } = result.value;
6dd74de135 expect(sections[0].label).toBe('GitHub');
6dd74de136 expect(sections[0].value).toBe(100);
6dd74de137
6dd74de138 expect(sections[1].label).toBe('GitLab');
6dd74de139 expect(sections[1].value).toBe(50);
6dd74de140 });
6dd74de141
6dd74de142 it('should handle sections with showData', () => {
6dd74de143 const context = `pie showData
6dd74de144 "GitHub": 100
6dd74de145 "GitLab": 50`;
6dd74de146 const result = parse(context);
6dd74de147 expectNoErrorsOrAlternatives(result);
6dd74de148 expect(result.value.$type).toBe(Pie.$type);
6dd74de149
6dd74de150 const { showData, sections } = result.value;
6dd74de151 expect(showData).toBeTruthy();
6dd74de152
6dd74de153 expect(sections[0].label).toBe('GitHub');
6dd74de154 expect(sections[0].value).toBe(100);
6dd74de155
6dd74de156 expect(sections[1].label).toBe('GitLab');
6dd74de157 expect(sections[1].value).toBe(50);
6dd74de158 });
6dd74de159
6dd74de160 it('should handle sections with title', () => {
6dd74de161 const context = `pie title sample wow
6dd74de162 "GitHub": 100
6dd74de163 "GitLab": 50`;
6dd74de164 const result = parse(context);
6dd74de165 expectNoErrorsOrAlternatives(result);
6dd74de166 expect(result.value.$type).toBe(Pie.$type);
6dd74de167
6dd74de168 const { title, sections } = result.value;
6dd74de169 expect(title).toBe('sample wow');
6dd74de170
6dd74de171 expect(sections[0].label).toBe('GitHub');
6dd74de172 expect(sections[0].value).toBe(100);
6dd74de173
6dd74de174 expect(sections[1].label).toBe('GitLab');
6dd74de175 expect(sections[1].value).toBe(50);
6dd74de176 });
6dd74de177
6dd74de178 it('should handle value with positive decimal', () => {
6dd74de179 const context = `pie
6dd74de180 "ash": 60.67
6dd74de181 "bat": 40`;
6dd74de182 const result = parse(context);
6dd74de183 expectNoErrorsOrAlternatives(result);
6dd74de184 expect(result.value.$type).toBe(Pie.$type);
6dd74de185
6dd74de186 const { sections } = result.value;
6dd74de187 expect(sections[0].label).toBe('ash');
6dd74de188 expect(sections[0].value).toBe(60.67);
6dd74de189
6dd74de190 expect(sections[1].label).toBe('bat');
6dd74de191 expect(sections[1].value).toBe(40);
6dd74de192 });
6dd74de193
6dd74de194 it('should handle sections with accTitle', () => {
6dd74de195 const context = `pie accTitle: sample wow
6dd74de196 "GitHub": 100
6dd74de197 "GitLab": 50`;
6dd74de198 const result = parse(context);
6dd74de199 expectNoErrorsOrAlternatives(result);
6dd74de200 expect(result.value.$type).toBe(Pie.$type);
6dd74de201
6dd74de202 const { accTitle, sections } = result.value;
6dd74de203 expect(accTitle).toBe('sample wow');
6dd74de204
6dd74de205 expect(sections[0].label).toBe('GitHub');
6dd74de206 expect(sections[0].value).toBe(100);
6dd74de207
6dd74de208 expect(sections[1].label).toBe('GitLab');
6dd74de209 expect(sections[1].value).toBe(50);
6dd74de210 });
6dd74de211
6dd74de212 it('should handle sections with single line accDescr', () => {
6dd74de213 const context = `pie accDescr: sample wow
6dd74de214 "GitHub": 100
6dd74de215 "GitLab": 50`;
6dd74de216 const result = parse(context);
6dd74de217 expectNoErrorsOrAlternatives(result);
6dd74de218 expect(result.value.$type).toBe(Pie.$type);
6dd74de219
6dd74de220 const { accDescr, sections } = result.value;
6dd74de221 expect(accDescr).toBe('sample wow');
6dd74de222
6dd74de223 expect(sections[0].label).toBe('GitHub');
6dd74de224 expect(sections[0].value).toBe(100);
6dd74de225
6dd74de226 expect(sections[1].label).toBe('GitLab');
6dd74de227 expect(sections[1].value).toBe(50);
6dd74de228 });
6dd74de229
6dd74de230 it('should handle sections with multi line accDescr', () => {
6dd74de231 const context = `pie accDescr {
6dd74de232 sample wow
6dd74de233 }
6dd74de234 "GitHub": 100
6dd74de235 "GitLab": 50`;
6dd74de236 const result = parse(context);
6dd74de237 expectNoErrorsOrAlternatives(result);
6dd74de238 expect(result.value.$type).toBe(Pie.$type);
6dd74de239
6dd74de240 const { accDescr, sections } = result.value;
6dd74de241 expect(accDescr).toBe('sample wow');
6dd74de242
6dd74de243 expect(sections[0].label).toBe('GitHub');
6dd74de244 expect(sections[0].value).toBe(100);
6dd74de245
6dd74de246 expect(sections[1].label).toBe('GitLab');
6dd74de247 expect(sections[1].value).toBe(50);
6dd74de248 });
6dd74de249 });
6dd74de250});