319 lines
7.6 KiB
TypeScript
319 lines
7.6 KiB
TypeScript
|
type Testcase = {
|
|||
|
id: number,
|
|||
|
subId: number | null,
|
|||
|
content: string,
|
|||
|
procedure: string,
|
|||
|
testData: string| null,
|
|||
|
expected: string,
|
|||
|
actual: string,
|
|||
|
pass: boolean
|
|||
|
}
|
|||
|
|
|||
|
const testcase: Testcase[] = [
|
|||
|
{
|
|||
|
"id": 1,
|
|||
|
"subId": null,
|
|||
|
"content": "Focus/Unfocus",
|
|||
|
"procedure": "1. 청크를 클릭한다.",
|
|||
|
"testData": null,
|
|||
|
"expected": "",
|
|||
|
"actual": "",
|
|||
|
"pass": true
|
|||
|
},
|
|||
|
{
|
|||
|
"id": 2,
|
|||
|
"subId": null,
|
|||
|
"content": "remove",
|
|||
|
"procedure": "1. 청크를 삭제하는 버튼을 클릭한다.",
|
|||
|
"testData": null,
|
|||
|
"expected": "",
|
|||
|
"actual": "",
|
|||
|
"pass": true
|
|||
|
},
|
|||
|
{
|
|||
|
"id": 3,
|
|||
|
"subId": 1,
|
|||
|
"content": "render - markdown",
|
|||
|
"procedure": "1. 마크다운 청크 렌더링을 확인한다.",
|
|||
|
"testData": " # 제목 ",
|
|||
|
"expected": "",
|
|||
|
"actual": "",
|
|||
|
"pass": true
|
|||
|
},
|
|||
|
{
|
|||
|
"id": 3,
|
|||
|
"subId": 2,
|
|||
|
"content": "render - latex",
|
|||
|
"procedure": "1. LaTex 청크 렌더링을 확인한다.",
|
|||
|
"testData": " sum^n_{n=0}n = \\frac{n(n+1)}2$$ ",
|
|||
|
"expected": "",
|
|||
|
"actual": "",
|
|||
|
"pass": true
|
|||
|
},
|
|||
|
{
|
|||
|
"id": 3,
|
|||
|
"subId": 3,
|
|||
|
"content": "render - link",
|
|||
|
"procedure": "1. Image 청크 렌더링을 확인한다.",
|
|||
|
"testData": " http://picsum.photos/200/300 ",
|
|||
|
"expected": "",
|
|||
|
"actual": "",
|
|||
|
"pass": true
|
|||
|
},
|
|||
|
{
|
|||
|
"id": 4,
|
|||
|
"subId": null,
|
|||
|
"content": "previews",
|
|||
|
"procedure": "1. Katex 청크의 미리보기를 본다.",
|
|||
|
"testData": " sum^n_{n=0}n = \\frac{n(n+1)}2$$ ",
|
|||
|
"expected": "",
|
|||
|
"actual": "",
|
|||
|
"pass": false
|
|||
|
},
|
|||
|
{
|
|||
|
"id": 10,
|
|||
|
"subId": null,
|
|||
|
"content": "autocomplete",
|
|||
|
"procedure": "1. 자동완성을 시험한다.",
|
|||
|
"testData": null,
|
|||
|
"expected": "",
|
|||
|
"actual": "",
|
|||
|
"pass": false
|
|||
|
},
|
|||
|
{
|
|||
|
"id": 11,
|
|||
|
"subId": null,
|
|||
|
"content": "swap positions",
|
|||
|
"procedure": "1. 청크의 위치를 바꾼다.",
|
|||
|
"testData": null,
|
|||
|
"expected": "",
|
|||
|
"actual": "",
|
|||
|
"pass": true
|
|||
|
},
|
|||
|
{
|
|||
|
"id": 27,
|
|||
|
"subId": 1,
|
|||
|
"content": "edit",
|
|||
|
"procedure": "1. 청크를 수정한다.",
|
|||
|
"testData": null,
|
|||
|
"expected": "",
|
|||
|
"actual": "",
|
|||
|
"pass": true
|
|||
|
},
|
|||
|
{
|
|||
|
"id": 27,
|
|||
|
"subId": 2,
|
|||
|
"content": "edit chunk conflict",
|
|||
|
"procedure": "1. 청크를 수정모드에 들어간다.",
|
|||
|
"testData": null,
|
|||
|
"expected": "",
|
|||
|
"actual": "",
|
|||
|
"pass": false
|
|||
|
},
|
|||
|
{
|
|||
|
"id": 5,
|
|||
|
"subId": null,
|
|||
|
"content": "view Chunk",
|
|||
|
"procedure": "1. 문서를 열어 청크가 렌더링되는지 본다.",
|
|||
|
"testData": "test.syd",
|
|||
|
"expected": "",
|
|||
|
"actual": "",
|
|||
|
"pass": true
|
|||
|
},
|
|||
|
{
|
|||
|
"id": 7,
|
|||
|
"subId": null,
|
|||
|
"content": "add/delete tag",
|
|||
|
"procedure": "1. 문서에 태그를 추가한다.<br>2. 문서에 태그를 삭제한다.",
|
|||
|
"testData": "A",
|
|||
|
"expected": "",
|
|||
|
"actual": "",
|
|||
|
"pass": true
|
|||
|
},
|
|||
|
{
|
|||
|
"id": 8,
|
|||
|
"subId": null,
|
|||
|
"content": "Drag And Drop Upload,",
|
|||
|
"procedure": "1. 텍스트를 드래그한다.",
|
|||
|
"testData": null,
|
|||
|
"expected": "",
|
|||
|
"actual": "",
|
|||
|
"pass": true
|
|||
|
},
|
|||
|
{
|
|||
|
"id": 14,
|
|||
|
"subId": null,
|
|||
|
"content": "create/delete/rename file",
|
|||
|
"procedure": "1. 파일을 만든다.",
|
|||
|
"testData": "test.txt",
|
|||
|
"expected": "",
|
|||
|
"actual": "",
|
|||
|
"pass": true
|
|||
|
},
|
|||
|
{
|
|||
|
"id": 15,
|
|||
|
"subId": null,
|
|||
|
"content": "upload/download files",
|
|||
|
"procedure": "1. 파일을 업로드한다.",
|
|||
|
"testData": "test.txt",
|
|||
|
"expected": "",
|
|||
|
"actual": "",
|
|||
|
"pass": true
|
|||
|
},
|
|||
|
{
|
|||
|
"id": 18,
|
|||
|
"subId": null,
|
|||
|
"content": "export document",
|
|||
|
"procedure": "1. export 버튼을 누른다.",
|
|||
|
"testData": null,
|
|||
|
"expected": "",
|
|||
|
"actual": "",
|
|||
|
"pass": false
|
|||
|
},
|
|||
|
{
|
|||
|
"id": 17,
|
|||
|
"subId": null,
|
|||
|
"content": "render",
|
|||
|
"procedure": "1. 스태시가 그려지는지 확인한다",
|
|||
|
"testData": null,
|
|||
|
"expected": "",
|
|||
|
"actual": "",
|
|||
|
"pass": true
|
|||
|
},
|
|||
|
{
|
|||
|
"id": 19,
|
|||
|
"subId": null,
|
|||
|
"content": "add",
|
|||
|
"procedure": "1. 청크를 추가한다",
|
|||
|
"testData": null,
|
|||
|
"expected": "",
|
|||
|
"actual": "",
|
|||
|
"pass": true
|
|||
|
},
|
|||
|
{
|
|||
|
"id": 20,
|
|||
|
"subId": null,
|
|||
|
"content": "remove",
|
|||
|
"procedure": "1. 청크를 삭제한다",
|
|||
|
"testData": null,
|
|||
|
"expected": "",
|
|||
|
"actual": "",
|
|||
|
"pass": true
|
|||
|
},
|
|||
|
{
|
|||
|
"id": 21,
|
|||
|
"subId": null,
|
|||
|
"content": "Drag and Drop to Document",
|
|||
|
"procedure": "1. 청크로부터 문서로 청크를 옮긴다.",
|
|||
|
"testData": null,
|
|||
|
"expected": "",
|
|||
|
"actual": "",
|
|||
|
"pass": true
|
|||
|
},
|
|||
|
{
|
|||
|
"id": 22,
|
|||
|
"subId": null,
|
|||
|
"content": "Login",
|
|||
|
"procedure": "1. 비밀번호를 입력한다.",
|
|||
|
"testData": "admin",
|
|||
|
"expected": "",
|
|||
|
"actual": "",
|
|||
|
"pass": false
|
|||
|
},
|
|||
|
{
|
|||
|
"id": 24,
|
|||
|
"subId": null,
|
|||
|
"content": "Localization",
|
|||
|
"procedure": "1. 다른언어를 지원하는지 언어를 바꿔 확인한다",
|
|||
|
"testData": null,
|
|||
|
"expected": "",
|
|||
|
"actual": "",
|
|||
|
"pass": false
|
|||
|
},
|
|||
|
{
|
|||
|
"id": 16,
|
|||
|
"subId": null,
|
|||
|
"content": "Document Search",
|
|||
|
"procedure": "1. 검색해본다.",
|
|||
|
"testData": null,
|
|||
|
"expected": "",
|
|||
|
"actual": "",
|
|||
|
"pass": false
|
|||
|
},
|
|||
|
{
|
|||
|
"id": 85,
|
|||
|
"subId": null,
|
|||
|
"content": "Permission",
|
|||
|
"procedure": "1. 각각의 기능들에 권한없이 시도한다",
|
|||
|
"testData": null,
|
|||
|
"expected": "",
|
|||
|
"actual": "",
|
|||
|
"pass": true
|
|||
|
}
|
|||
|
]
|
|||
|
|
|||
|
import {Issue} from "./githubType.ts"
|
|||
|
|
|||
|
async function readContent(path?: string): Promise<string> {
|
|||
|
let content = "[]";
|
|||
|
if (path) {
|
|||
|
content = await Deno.readTextFile(path);
|
|||
|
}
|
|||
|
else throw new Error("No input provided. path or stdin.");
|
|||
|
return content;
|
|||
|
}
|
|||
|
|
|||
|
const data = await readContent("../build/issues.json")
|
|||
|
|
|||
|
const issues = JSON.parse(data) as Issue[]
|
|||
|
const table = new Map<string, Issue[]>();
|
|||
|
issues.forEach((x)=>{
|
|||
|
const category = x.title.split(":")[0];
|
|||
|
if(!category) return;
|
|||
|
let c = table.get(category)
|
|||
|
if(!c){
|
|||
|
c = [];
|
|||
|
table.set(category,c);
|
|||
|
}
|
|||
|
c.push(x);
|
|||
|
})
|
|||
|
|
|||
|
const keys = Array.from(table.keys());
|
|||
|
|
|||
|
|
|||
|
keys.forEach(x=>{
|
|||
|
console.log(`\n### ${x}\n`);
|
|||
|
const issues = table.get(x);
|
|||
|
console.log("<table>");
|
|||
|
console.log("<thead>");
|
|||
|
console.log("<tr>");
|
|||
|
//console.log("<th>Category</th>");
|
|||
|
console.log("<th>ID</th>");
|
|||
|
console.log("<th>Content</th>");
|
|||
|
console.log("<th>Procedure</th>");
|
|||
|
console.log("<th>Test Data</th>");
|
|||
|
console.log("<th>P/F</th>");
|
|||
|
console.log("</tr>");
|
|||
|
console.log("</thead>");
|
|||
|
console.log("<tbody>");
|
|||
|
const ts = issues!.map(x=> testcase.filter(y=>y.id==x.number)).flat() as Testcase[];
|
|||
|
|
|||
|
if(ts?.length == 0) return;
|
|||
|
|
|||
|
//console.log(`<tr><th rowspan="${ts?.length}">${x}</th>`);
|
|||
|
|
|||
|
ts.forEach((y,i)=>{
|
|||
|
//if(i>0)
|
|||
|
console.log("<tr>");
|
|||
|
const id = y.subId ? `${y.id}-${y.subId}` : y.id;
|
|||
|
console.log(`<td>${id}</td>`);
|
|||
|
console.log(`<td>${y.content}</td>`);
|
|||
|
console.log(`<td>${y.procedure}</td>`);
|
|||
|
console.log(`<td>${y.testData ?? ""}</td>`);
|
|||
|
console.log(`<td>${y.pass ? "P" : "F"}</td>`);
|
|||
|
console.log("</tr>");
|
|||
|
})
|
|||
|
console.log("</tbody>");
|
|||
|
console.log("</table>");
|
|||
|
})
|