모듈:스크리쿤을 유닛으로 이동

Module

------------------------------------------------------------------------------- 스크리분토에 대한 유닛 테스트. ------------------------------------------------------------------------------- 요구하다('''비공식''')  현지의 디버그 도우미 = {} 현지의 스크리쿤을 유닛으로 이동 = {}  cfg 테이블에는 모든 현지화 가능한 문자열과 구성이 포함되어 있습니다. 이 모듈을 다른 Wiki로 이식하는 것이 더 쉽습니다. 현지의 cfg = mw.로드 데이터('모듈:Unit/config'로 스크롤합니다.)  ------------------------------------------------------------------------------- 템플릿 또는 파서 함수 인수 테이블을 표시하는 데 이상적인 키와 값을 연결합니다. @paramkey키키키와 값 사이의 구분자 접착제("="로 표시) @다른 키-값 쌍 사이의 매개 변수 구분 기호 접착제(", "" 참조) @상당한 사기.키 포함({a = 1, b = 2, c = 3, ' => ', ', ') => "a => 1, b => 2, c => 3" -- 기능. 디버그 도우미.키를 사용한 콘트(테이블, 키 구분 기호, 구분자)     키 구분 기호 = 키 구분 기호 또는 ' = '     구분자 = 구분자 또는 ', '     현지의 불평이 많은 = ''     현지의 i = 1     현지의 첫번째 = 진실의     현지의 명명되지 않은 인수 = 진실의     위해서 k, v  쌍들(테이블) 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다         한다면 첫번째 그리고나서             첫번째 = 거짓의         또 다른             불평이 많은 = 불평이 많은 .. 구분자         끝.         한다면 k == i 그리고. 명명되지 않은 인수 그리고나서             i = i + 1             불평이 많은 = 불평이 많은 .. 끈으로 묶는(v)         또 다른             명명되지 않은 인수 = 거짓의             불평이 많은 = 불평이 많은 .. 끈으로 묶는(k) .. 키 구분 기호 .. 끈으로 묶는(v)         끝.     끝.     돌아가다 불평이 많은 끝.  ------------------------------------------------------------------------------- 두 테이블을 재귀적으로 비교합니다(테이블이 아닌 값도 올바르게 처리됨). @param ignoreFalse인 경우 메타테이블, t1.__eq는 비교에 사용됩니다. -- 기능. 디버그 도우미.딥 비교(t1, t2, 메타테이블 무시)     현지의 유형 1 = 유형(t1)     현지의 유형 2 = 유형(t2)      한다면 유형 1 ~= 유형 2 그리고나서          돌아가다 거짓의      끝.     한다면 유형 1 ~= '탁자' 그리고나서          돌아가다 t1 == t2      끝.      현지의 상투적인 = 배불리 먹다(t1)     한다면 것은 아니다. 메타테이블 무시 그리고. 상투적인 그리고. 상투적인.__eq 그리고나서          돌아가다 t1 == t2      끝.      위해서 k1, v1  쌍들(t1) 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다         현지의 v2 = t2[k1]         한다면 v2 == 영의 또는 것은 아니다. 디버그 도우미.딥 비교(v1, v2) 그리고나서              돌아가다 거짓의          끝.     끝.     위해서 k2, v2  쌍들(t2) 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다         한다면 t1[k2] == 영의 그리고나서              돌아가다 거짓의          끝.     끝.      돌아가다 진실의 끝.  ------------------------------------------------------------------------------- 스택 정보에 오류를 발생시킵니다. @param 오류 세부 정보가 포함된 테이블 세부 정보 - 표시할 오류 메시지인 '텍스트' 키가 있어야 합니다. - '스택' 키가 스택 데이터와 함께 추가됩니다. - 및 파일/라인 번호가 있는 '소스' 키 - 오류 처리를 위해 메타테이블이 추가됩니다. -- 기능. 디버그 도우미.올리다(세부 사항, 수평의)     수평의 = (수평의 또는 1) + 1     세부 사항.추적하다 = debug.debugback('', 수평의)     세부 사항.원천 = string.match(세부 사항.추적하다, '^%s*stack 추적:%s*(%S*: )')  설정 가능한 테이블(기본값, { __tostring: function()은 details.text end를 반환합니다. --    })      오류(세부 사항, 수평의) 끝.  ------------------------------------------------------------------------------- 검정에 사용하면 해당 검정이 무시되고 건너뛴 카운트가 1씩 증가합니다. -- 기능. 스크리쿤을 유닛으로 이동:테스트 생략 표시()     디버그 도우미.올리다({스크리쿤을 유닛으로 이동 = 진실의, 건너뛴 = 진실의}, 3) 끝.  ------------------------------------------------------------------------------- 무조건 검정 불합격 @param 메시지(선택 사항)테스트에 대한 설명 -- 기능. 스크리쿤을 유닛으로 이동:실패하다(메세지)     디버그 도우미.올리다({스크리쿤을 유닛으로 이동 = 진실의, 본문 = "테스트 실패", 메세지 = 메세지}, 2) 끝.  ------------------------------------------------------------------------------- 입력이 참인지 확인합니다. @param 메시지(선택 사항)테스트에 대한 설명 -- 기능. 스크리쿤을 유닛으로 이동:참임 주장(실제., 메세지)     한다면 것은 아니다. 실제. 그리고나서         디버그 도우미.올리다({스크리쿤을 유닛으로 이동 = 진실의, 본문 = string.형식("%s가 참이라고 주장하지 못했습니다.", 끈으로 묶는(실제.)), 메세지 = 메세지}, 2)     끝. 끝.  ------------------------------------------------------------------------------- 입력이 거짓인지 확인합니다. @param 메시지(선택 사항)테스트에 대한 설명 -- 기능. 스크리쿤을 유닛으로 이동:assertificate(실제., 메세지)     한다면 실제. 그리고나서         디버그 도우미.올리다({스크리쿤을 유닛으로 이동 = 진실의, 본문 = string.형식("%s가 false라고 주장하지 못했습니다.", 끈으로 묶는(실제.)), 메세지 = 메세지}, 2)     끝. 끝.  ------------------------------------------------------------------------------- 입력 문자열에 필요한 문자열이 포함되어 있는지 확인합니다. @param 메시지(선택 사항)테스트에 대한 설명 @param 일반 검색은 ustring 패턴 대신 일반 문자열로 수행됩니다. -- 기능. 스크리쿤을 유닛으로 이동:assertStringContains(양식, s, 평지, 메세지)  한다면 유형(양식) ~= '끈' 그리고나서   디버그 도우미.올리다({    스크리쿤을 유닛으로 이동 = 진실의,    본문 = mw.ustring.서식을("패턴 유형 오류(예상 문자열, %s을(를) 받았습니다.", 유형(양식)),    메세지 = 메세지   }, 2)  끝.  한다면 유형(s) ~= '끈' 그리고나서   디버그 도우미.올리다({    스크리쿤을 유닛으로 이동 = 진실의,    본문 = mw.ustring.서식을("문자열 유형 오류(예상 문자열, %s을(를) 받았습니다.", 유형(s)),    메세지 = 메세지   }, 2)  끝.  한다면 것은 아니다. mw.ustring.찾아내다(s, 양식, 영의, 평지) 그리고나서   디버그 도우미.올리다({    스크리쿤을 유닛으로 이동 = 진실의,    본문 = mw.ustring.서식을('%s 문자열에서 %s "%s "을(를) 찾지 못했습니다., 평지 그리고. "임의의 문자열" 또는 "스캐너덜너덜, 양식, s),    메세지 = 메세지   }, 2)  끝. 끝.  ------------------------------------------------------------------------------- 입력 문자열에 필요한 문자열이 포함되어 있지 않은지 확인합니다. @param 메시지(선택 사항)테스트에 대한 설명 @param 일반 검색은 ustring 패턴 대신 일반 문자열로 수행됩니다. -- 기능. 스크리쿤을 유닛으로 이동:assertNotStringContains(양식, s, 평지, 메세지)  한다면 유형(양식) ~= '끈' 그리고나서   디버그 도우미.올리다({    스크리쿤을 유닛으로 이동 = 진실의,    본문 = mw.ustring.서식을("패턴 유형 오류(예상 문자열, %s을(를) 받았습니다.", 유형(양식)),    메세지 = 메세지   }, 2)  끝.  한다면 유형(s) ~= '끈' 그리고나서   디버그 도우미.올리다({    스크리쿤을 유닛으로 이동 = 진실의,    본문 = mw.ustring.서식을("문자열 유형 오류(예상 문자열, %s을(를) 받았습니다.", 유형(s)),    메세지 = 메세지   }, 2)  끝.  현지의 i, j = mw.ustring.찾아내다(s, 양식, 영의, 평지)  한다면 i 그리고나서   현지의 경기 = mw.ustring.후보선수(s, i, j)   디버그 도우미.올리다({    스크리쿤을 유닛으로 이동 = 진실의,    본문 = mw.ustring.서식을('%s "에 대해 "%s" 일치하는 항목을 찾았습니다., 경기, 평지 그리고. "임의의 문자열" 또는 "스캐너덜너덜, 양식),    메세지 = 메세지   }, 2)  끝. 끝.  ------------------------------------------------------------------------------- 입력에 예상 값이 있는지 확인합니다. @param 메시지(선택 사항)테스트에 대한 설명 @예: assertEquals(4, add(2,2), "2+2는 4이어야 합니다") -- 기능. 스크리쿤을 유닛으로 이동:평등을 주장합니다.(기대됩니다, 실제., 메세지)  한다면 유형(기대됩니다) == '숫자' 그리고. 유형(실제.) == '숫자' 그리고나서         자신:델타 내에서 주장(기대됩니다, 실제., 1e-8, 메세지)  그렇지 않으면 기대됩니다 ~= 실제. 그리고나서         디버그 도우미.올리다({             스크리쿤을 유닛으로 이동 = 진실의,              본문 = string.형식("%s가 예상되는 %s과(와) 일치하는지 확인하지 못했습니다.", 끈으로 묶는(실제.), 끈으로 묶는(기대됩니다)),              실제. = 실제.,             기대됩니다 = 기대됩니다,             메세지 = 메세지,         }, 2)     끝. 끝.  ------------------------------------------------------------------------------- 입력에 예상 값이 없는지 확인합니다. @param 메시지(선택 사항)테스트에 대한 설명 @예: assertNotEquals(5, add(2,2), "2+2"는 5가 아니어야 함) -- 기능. 스크리쿤을 유닛으로 이동:동일하지 않음을 주장(기대됩니다, 실제., 메세지)  한다면 유형(기대됩니다) == '숫자' 그리고. 유형(실제.) == '숫자' 그리고나서         자신:델타 내에 없음 주장(기대됩니다, 실제., 1e-8, 메세지)  그렇지 않으면 기대됩니다 == 실제. 그리고나서         디버그 도우미.올리다({             스크리쿤을 유닛으로 이동 = 진실의,              본문 = string.형식("%s가 예상 %s과(와) 같지 않다고 주장하지 못했습니다.", 끈으로 묶는(실제.), 끈으로 묶는(기대됩니다)),              실제. = 실제.,             기대됩니다 = 기대됩니다,             메세지 = 메세지,         }, 2)     끝. 끝.  ------------------------------------------------------------------------------- 예상 값과 실제 값이 모두 숫자인지 확인합니다. @param 메시지(선택 사항)테스트에 대한 설명 -- 현지의 기능. 유효성 검사 번호(기대됩니다, 실제., 메세지)     한다면 유형(기대됩니다) ~= "숫자" 그리고나서         디버그 도우미.올리다({             스크리쿤을 유닛으로 이동 = 진실의,             본문 = string.형식("기대값 %s이(가) 숫자가 아닙니다.", 끈으로 묶는(기대됩니다)),             실제. = 실제.,             기대됩니다 = 기대됩니다,             메세지 = 메세지,         }, 3)     끝.     한다면 유형(실제.) ~= "숫자" 그리고나서         디버그 도우미.올리다({             스크리쿤을 유닛으로 이동 = 진실의,             본문 = string.형식("실제 값 %s이(가) 숫자가 아닙니다.", 끈으로 묶는(실제.)),             실제. = 실제.,             기대됩니다 = 기대됩니다,             메세지 = 메세지,         }, 3)     끝. 끝.  ------------------------------------------------------------------------------- '실제'가 'expected'의 'delta' 내에 있는지 확인합니다. @param 메시지(선택 사항)테스트에 대한 설명 @확실한 단언.델타 내(1/3, 3/9, 0.000001, "3/9는 1/3"이어야 함) 기능. 스크리쿤을 유닛으로 이동:델타 내에서 주장(기대됩니다, 실제., 삼각주, 메세지)     유효성 검사 번호(기대됩니다, 실제., 메세지)     현지의 차이가 있는 = 기대됩니다 - 실제.     한다면 차이가 있는 < 0 그리고나서 차이가 있는 = - 차이가 있는 끝.  math.abs를 가져오는 대신     한다면 차이가 있는 > 삼각주 그리고나서         디버그 도우미.올리다({             스크리쿤을 유닛으로 이동 = 진실의,              본문 = string.형식("%f가 예상 %f의 %f 이내에 있다고 주장하지 못했습니다.", 실제., 삼각주, 기대됩니다),              실제. = 실제.,             기대됩니다 = 기대됩니다,             메세지 = 메세지,         }, 2)     끝. 끝.  ------------------------------------------------------------------------------- '실제'가 'expected'의 'delta' 내에 있지 않은지 점검합니다. @param 메시지(선택 사항)테스트에 대한 설명 @예: assertNotWithDelta(1/3, 2/3, 0.000001, "1/3은 2/3이 되어서는 안 됩니다") 기능. 스크리쿤을 유닛으로 이동:델타 내에 없음 주장(기대됩니다, 실제., 삼각주, 메세지)     유효성 검사 번호(기대됩니다, 실제., 메세지)     현지의 차이가 있는 = 기대됩니다 - 실제.     한다면 차이가 있는 < 0 그리고나서 차이가 있는 = - 차이가 있는 끝.  math.abs를 가져오는 대신     한다면 차이가 있는 <= 삼각주 그리고나서         디버그 도우미.올리다({             스크리쿤을 유닛으로 이동 = 진실의,              본문 = string.형식("%f가 예상 %f의 %f 이내에 있지 않다고 주장하지 못했습니다.", 실제., 삼각주, 기대됩니다),              실제. = 실제.,             기대됩니다 = 기대됩니다,             메세지 = 메세지,         }, 2)     끝. 끝.  ------------------------------------------------------------------------------- 테이블에 기대값(하위 테이블 포함)이 있는지 확인합니다. @param 메시지(선택 사항)테스트에 대한 설명 @예: assert DeepEquals({1,3}, {2,4}), 파티션(홀수, {1,2,3,4}) 기능. 스크리쿤을 유닛으로 이동:딥이퀄(DeepEquals(기대됩니다, 실제., 메세지)     한다면 것은 아니다. 디버그 도우미.딥 비교(기대됩니다, 실제.) 그리고나서         한다면 유형(기대됩니다) == '탁자' 그리고나서             기대됩니다 = mw.덤프 개체(기대됩니다)         끝.         한다면 유형(실제.) == '탁자' 그리고나서             실제. = mw.덤프 개체(실제.)         끝.         디버그 도우미.올리다({             스크리쿤을 유닛으로 이동 = 진실의,              본문 = string.형식("%s가 예상되는 %s과(와) 일치하는지 확인하지 못했습니다.", 끈으로 묶는(실제.), 끈으로 묶는(기대됩니다)),              실제. = 실제.,             기대됩니다 = 기대됩니다,             메세지 = 메세지,         }, 2)     끝. 끝.  ------------------------------------------------------------------------------- 처리 후 Wiki 텍스트가 예상 결과를 제공하는지 확인합니다. @param 메시지(선택 사항)테스트에 대한 설명 @예시 assert ResultEquals("Hello world", "{concat hello world}})" 기능. 스크리쿤을 유닛으로 이동:결과를 동일하게 주장(기대됩니다, 본문, 메세지)     현지의  = 자신.     현지의 실제. = :전처리(본문)     한다면 기대됩니다 ~= 실제. 그리고나서         디버그 도우미.올리다({             스크리쿤을 유닛으로 이동 = 진실의,              본문 = string.형식("사전 처리 후 %s이(가) 예상 %s과(와) 일치하는지 확인하지 못했습니다.", 본문, 끈으로 묶는(기대됩니다)),              실제. = 실제.,             실제 원시 = 본문,             기대됩니다 = 기대됩니다,             메세지 = 메세지,         }, 2)     끝. 끝.  ------------------------------------------------------------------------------- 처리 후 두 개의 위키 텍스트가 동일한 결과를 제공하는지 확인합니다. @param 메시지(선택 사항)테스트에 대한 설명 @예시 sameResult("{concat Hello world}"), "{deleteLastChar Hello world!}}") 기능. 스크리쿤을 유닛으로 이동:동일한 결과 주장(텍스트 1, 텍스트 2, 메세지)     현지의  = 자신.     현지의 처리됨1 = :전처리(텍스트 1)     현지의 가공2 = :전처리(텍스트 2)     한다면 처리됨1 ~= 가공2 그리고나서         디버그 도우미.올리다({             스크리쿤을 유닛으로 이동 = 진실의,              본문 = string.형식("사전 처리 후 %s이(가) 예상 %s과(와) 일치하는지 확인하지 못했습니다.", 처리됨1, 가공2),              실제. = 처리됨1,             실제 원시 = 텍스트 1,             기대됩니다 = 가공2,             예상 원시 = 텍스트 2,             메세지 = 메세지,         }, 2)     끝. 끝.  ------------------------------------------------------------------------------- 파서 함수가 예상 출력을 제공하는지 확인합니다. @param 메시지(선택 사항)테스트에 대한 설명 @예: assertParserFunctionEquals("Hello world", "msg:concat", {"Hello", "world"}) 기능. 스크리쿤을 유닛으로 이동:구문 분석기 함수 동일성 주장(기대됩니다, pfname, 논병아리, 메세지)     현지의  = 자신.     현지의 실제. = :콜 파서 함수{ 이름. = pfname, 논병아리 = 논병아리}     한다면 기대됩니다 ~= 실제. 그리고나서         디버그 도우미.올리다({             스크리쿤을 유닛으로 이동 = 진실의,              본문 = string.형식("인수가 %s인 %s이(가) 사전 처리 후 예상 %s과(와) 동일한지 확인하지 못했습니다.",                                   디버그 도우미.키를 사용한 콘트(논병아리), pfname, 기대됩니다),             실제. = 실제.,             실제 원시 = pfname,             기대됩니다 = 기대됩니다,             메세지 = 메세지,         }, 2)     끝. 끝.  ------------------------------------------------------------------------------- 템플릿이 예상 출력을 제공하는지 확인합니다. @param 메시지(선택 사항)테스트에 대한 설명 @확실한 단언.템플릿 동등("Hello world", "concat", {"Hello", "world"}) 기능. 스크리쿤을 유닛으로 이동:템플릿 동일성 확보(기대됩니다, 템플릿, 논병아리, 메세지)     현지의  = 자신.     현지의 실제. = :확장템플릿{ 제목 = 템플릿, 논병아리 = 논병아리}     한다면 기대됩니다 ~= 실제. 그리고나서         디버그 도우미.올리다({             스크리쿤을 유닛으로 이동 = 진실의,              본문 = string.형식("인수가 %s인 %s이(가) 사전 처리 후 예상 %s과(와) 동일한지 확인하지 못했습니다.",                                   디버그 도우미.키를 사용한 콘트(논병아리), 템플릿, 기대됩니다),             실제. = 실제.,             실제 원시 = 템플릿,             기대됩니다 = 기대됩니다,             메세지 = 메세지,         }, 2)     끝. 끝.  ------------------------------------------------------------------------------- 함수가 오류를 발생시키는지 확인합니다. @paramfn 테스트할 함수 @param expectedMessage 옵션 예상 오류 메시지 @param 메시지(선택 사항)테스트에 대한 설명 기능. 스크리쿤을 유닛으로 이동:스로우즈를 주장합니다.(에프앤, 예상 메시지, 메세지)     현지의 성공했다, 실제 메시지 = pcall(에프앤)     한다면 성공했다 그리고나서         디버그 도우미.올리다({             스크리쿤을 유닛으로 이동 = 진실의,             본문 = '예외가 예상되었지만 아무 것도 던져지지 않았습니다.',             메세지 = 메세지,         }, 2)     끝.  문자열의 경우 오류 메시지에 추가된 라인 번호를 제거합니다.     실제 메시지 = 유형(실제 메시지) == '끈'       그리고. string.match(실제 메시지, '모듈:[^:]*:[0-9]*: (.*)')      또는 실제 메시지     현지의 메시지일치 = 디버그 도우미.딥 비교(예상 메시지, 실제 메시지)     한다면 예상 메시지 그리고. 것은 아니다. 메시지일치 그리고나서         디버그 도우미.올리다({             스크리쿤을 유닛으로 이동 = 진실의,             기대됩니다 = 예상 메시지,             실제. = 실제 메시지,             본문 = string.형식('%s 메시지에 예외가 있어야 하지만 %s 메시지가 표시됨',                  끈으로 묶는(예상 메시지), 끈으로 묶는(실제 메시지)             ),             메세지 = 메세지         }, 2)     끝. 끝.  ------------------------------------------------------------------------------- 함수가 오류를 발생시키지 않는지 확인합니다. @paramfn 테스트할 함수 @param 메시지(선택 사항)테스트에 대한 설명 기능. 스크리쿤을 유닛으로 이동:Assert Does Not Throw(에프앤, 메세지)  현지의 성공했다, 실제 메시지 = pcall(에프앤)  한다면 성공했다 그리고나서      돌아가다  끝.  문자열의 경우 오류 메시지에 추가된 라인 번호를 제거합니다.  실제 메시지 = 유형(실제 메시지) == '끈'    그리고. string.match(실제 메시지, '모듈:[^:]*:[0-9]*: (.*)')   또는 실제 메시지  디버그 도우미.올리다({   스크리쿤을 유닛으로 이동 = 진실의,   실제. = 실제 메시지,   본문 = string.형식('예외가 필요하지 않지만 %s 메시지와 함께 예외가 발생했습니다.,    끈으로 묶는(실제 메시지)   ),   메세지 = 메세지  }, 2) 끝.  ------------------------------------------------------------------------------- 새 테스트 세트를 만듭니다. @paramo table with test functions(테스트 기능이 포함된 테이블)(또는 나중에 반환된 제품군에 기능을 추가할 수 있음 -- 기능. 스크리쿤을 유닛으로 이동:신규(o)     o = o 또는 {}     o._지루한 = {}     상을 차리다(o, {      __index = 자신,      __new 인덱스 = 기능. (t, k, v)       한다면 유형(k) == "문자열" 그리고. k:찾아내다('^test') 그리고. 유형(v) == "함수" 그리고나서        정의된 순서대로 테스트 함수 저장        표.삽입(o._지루한, {이름. = k, 시험 = v})       또 다른        미가공의(t, k, v)       끝.      끝.     })     o.달려. = 기능.() 돌아가다 자신:달려.(o, ) 끝.     돌아가다 o 끝.  ------------------------------------------------------------------------------- 글로벌 카운터를 재설정합니다. -- 기능. 스크리쿤을 유닛으로 이동:안에()     자신. =  또는 mw.현재 프레임 가져오기()     자신.성공 횟수 = 0     자신.실패 횟수 = 0     자신.개수 건너뛰기 = 0     자신.결과. = {} 끝.  ------------------------------------------------------------------------------- 단일 테스트 사례 실행 @param 이름 테스트 번호 @인수를 포함하는 매개변수 테스트 함수 -- 기능. 스크리쿤을 유닛으로 이동:테스트 실행(스위트룸, 이름., 시험)     현지의 성공., 세부 사항 = pcall(시험, 스위트룸)          한다면 성공. 그리고나서         자신.성공 횟수 = 자신.성공 횟수 + 1         표.삽입(자신.결과., {이름. = 이름., 성공. = 진실의})     그렇지 않으면 유형(세부 사항) ~= '탁자' 또는 것은 아니다. 세부 사항.스크리쿤을 유닛으로 이동 그리고나서 실패한 주장이 아닌 진짜 오류         자신.실패 횟수 = 자신.실패 횟수 + 1         표.삽입(자신.결과., {이름. = 이름., 오류 = 진실의, 메세지 = '루아 오류 --' .. 끈으로 묶는(세부 사항)})     그렇지 않으면 세부 사항.건너뛴 그리고나서         자신.개수 건너뛰기 = 자신.개수 건너뛰기 + 1         표.삽입(자신.결과., {이름. = 이름., 건너뛴 = 진실의})     또 다른         자신.실패 횟수 = 자신.실패 횟수 + 1         현지의 메세지 = 세부 사항.원천 또는 ""         한다면 세부 사항.메세지 그리고나서             메세지 = 메세지 .. 세부 사항.메세지 .. "\n"         끝.         메세지 = 메세지 .. 세부 사항.본문         표.삽입(자신.결과., {이름. = 이름., 오류 = 진실의, 메세지 = 메세지, 기대됩니다 = 세부 사항.기대됩니다, 실제. = 세부 사항.실제., 시험명 = 세부 사항.메세지})     끝. 끝.  ------------------------------------------------------------------------------- 모든 테스트를 실행하고 결과를 표시합니다. -- 기능. 스크리쿤을 유닛으로 이동:제품군 실행(스위트룸, )     자신:안에()  위해서 i, 테스트 세부 정보  짝을 짓다(스위트룸._지루한) 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다   자신:테스트 실행(스위트룸, 테스트 세부 정보.이름., 테스트 세부 정보.시험)  끝.     돌아가다 {         성공 횟수 = 자신.성공 횟수,         실패 횟수 = 자신.실패 횟수,         개수 건너뛰기 = 자신.개수 건너뛰기,         결과. = 자신.결과.,     } 끝.  ------------------------------------------------------------------------------- #테스트를 실행할 수 있는 진입점입니다. 프레임 없이 호출할 수 있으며, 이 경우 출력에 mw.log를 사용합니다. @param displayMode표시 결과() 참조 -- 기능. 스크리쿤을 유닛으로 이동:달려.(스위트룸, )     현지의 테스트 데이터 = 자신:제품군 실행(스위트룸, )     한다면  그리고. .논병아리 그리고나서         돌아가다 자신:표시결과(테스트 데이터, .논병아리.디스플레이 모드 또는 '탁자')     또 다른         돌아가다 자신:표시결과(테스트 데이터, '로그')     끝. 끝.  ------------------------------------------------------------------------------- 테스트 결과를 표시합니다. @param displayMode: 'table', 'log' 또는 'short' -- 기능. 스크리쿤을 유닛으로 이동:표시결과(테스트 데이터, 디스플레이 모드)     한다면 디스플레이 모드 == '탁자' 그리고나서         돌아가다 자신:결과를 표로 표시(테스트 데이터)     그렇지 않으면 디스플레이 모드 == '로그' 그리고나서         돌아가다 자신:결과를 로그로 표시(테스트 데이터)     그렇지 않으면 디스플레이 모드 == '짧은' 그리고나서         돌아가다 자신:결과를 짧게 표시(테스트 데이터)     또 다른         오류('표시 모드 전환')     끝. 끝.  기능. 스크리쿤을 유닛으로 이동:결과를 로그로 표시(테스트 데이터)     한다면 테스트 데이터.실패 횟수 > 0 그리고나서         mw.로그.('실패!!!')     그렇지 않으면 테스트 데이터.개수 건너뛰기 > 0 그리고나서         mw.로그.('일부 테스트는 프레임 없이 실행할 수 없으며 건너뛰었습니다.이 테스트 제품군을 템플릿으로 호출하여 모든 테스트를 실행합니다.')     끝.     mw.로그.(string.형식('인수: 성공: %d, 오류: %d, 건너뛰기: %d', 테스트 데이터.성공 횟수, 테스트 데이터.실패 횟수, 테스트 데이터.개수 건너뛰기))     mw.로그.('-------------------------------------------------------------------------------')     위해서 _, 결과  짝을 짓다(테스트 데이터.결과.) 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다         한다면 결과.오류 그리고나서             mw.로그.(string.형식('%s: %s', 결과.이름., 결과.메세지))         끝.     끝. 끝.  기능. 스크리쿤을 유닛으로 이동:결과를 짧게 표시(테스트 데이터)     현지의 본문 = string.형식(cfg.짧은 결과 형식, 테스트 데이터.성공 횟수, 테스트 데이터.실패 횟수, 테스트 데이터.개수 건너뛰기)     한다면 테스트 데이터.실패 횟수 > 0 그리고나서         본문 = '<span class="error">' .. 본문 .. '/span'     끝.     돌아가다 본문 끝.  기능. 스크리쿤을 유닛으로 이동:결과를 표로 표시(테스트 데이터)     현지의 성공 아이콘, 실패 아이콘 = 자신.:전처리(cfg.성공 지표), 자신.:전처리(cfg.고장 표시기)     현지의 본문 = ''  한다면 테스트 데이터.실패 횟수 > 0 그리고나서   현지의 메시지 = mw.메세지.새 원시 메시지(cfg.실패 요약, 테스트 데이터.실패 횟수):평지()   메시지 = 자신.:전처리(메시지)   한다면 cfg.실패 카테고리 그리고나서    메시지 = cfg.실패 카테고리 .. 메시지   끝.   본문 = 본문 .. 실패 아이콘 .. ' ' .. 메시지 .. '\n'  또 다른   본문 = 본문 .. 성공 아이콘 .. ' ' .. cfg.성공 요약 .. '\n'  끝.     본문 = 본문 .. class="테스트 테이블에 쓰기 적합하지 않은 스크리빙"\n'     본문 = 본문 .. '!\n! ' .. cfg.nameString .. '\n! ' .. cfg.예상 문자열 .. '\n! ' .. cfg.실제 문자열 .. '\n'     위해서 _, 결과  짝을 짓다(테스트 데이터.결과.) 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다         본문 = 본문 .. ' -\n'         한다면 결과.오류 그리고나서             본문 = 본문 .. '  ' .. 실패 아이콘 .. '\n'             한다면 (결과.기대됩니다 그리고. 결과.실제.) 그리고나서              현지의 이름. = 결과.이름.              한다면 결과.시험명 그리고나서               이름. = 이름. .. ' / ' .. 결과.시험명              끝.                 본문 = 본문 .. mw.본문.노비키(이름.) .. '\n' .. mw.본문.노비키(끈으로 묶는(결과.기대됩니다)) .. '\n' .. mw.본문.노비키(끈으로 묶는(결과.실제.)) .. '\n'             또 다른                 본문 = 본문 .. mw.본문.노비키(결과.이름.) .. '\n' .. colspan="2" ' .. mw.본문.노비키(결과.메세지) .. '\n'             끝.         또 다른             본문 = 본문 .. '  ' .. 성공 아이콘 .. '\n' .. mw.본문.노비키(결과.이름.) .. '\n \n \n'         끝.     끝.     본문 = 본문 .. ' }\n'     돌아가다 본문 끝.  돌아가다 스크리쿤을 유닛으로 이동