2009-10-04 2 views
3

나는 서버 측 사용을 위해 Erlang에 markdown 컴파일러를 작성하고 있습니다. 클라이언트와 작업해야하기 때문에 클라이언트 측 라이브러리 (showdown.js)를 사양으로 채택한 다음 호환성을 위해 내 코드를 테스트하기로 결정했습니다. 반복의 처음 몇에서 마크 다운 및 자바 스크립트 줄 바꿈 이스케이프

나는 내 프로그램 내가 syntax notes를 읽고에 따라 유효 인하 무슨 생각와 호환이었다 출력을 생성 된 것을 확인 260 여개의 단위 테스트를 만들었습니다.

하지만 지금은 단위 테스트를 생성하는 자바 스크립트 프로그램을 작성하려고합니다.

"<p>3 &gt; 4\na</p>" 

와 나는 EUNIT 주장이 점을 꿰매 싶어 : 나는 그것을 '대결'을 실행하려는

"3 > 4\na" 

얻을 :

나는 같은 입력이

"?_assert(conv(\"3 > 4\na\") == \"<p>3 &gt; 4\na</p>\"),", 

이것은 단위 테스트에 유효한 Erlang 구문입니다. 삶을 편하게하고 단위 테스트 생성기를 휴대용으로 만들려면 자바 스크립트 파일에 몇 줄을 추가 한 다음 페이지를 보면 <textarea /> 안에 단위 테스트의 새 세트를 얻을 수 있도록 웹 페이지에서 수행하고 있습니다. 모듈에 복사하여 EUnit을 실행하십시오.

"?_assert(conv(\"3 > 4 
a\") == \"<p>3 &gt; 4 
a</p>\"),", 

나는 다음과 같은 코드를 사용하여 탈출 버전으로 줄 바꿈 변환 시도했다 :

문제는 내가 끝낼 수 있도록 라인이 문자열에 \n로 변환 바꿈을 얻을 수 있다는 것입니다 :

text.replace("\\", "\\\\"); 
text.replace("\n", "\\n"); 

하지만 기쁨은 ...

+0

당신은 백 슬래시의 문자 엔티티를 사용할 수 있습니다 \ – bobbymcr

+0

당신은 여러분의 필요에이 스크립트를 수정할 수 있습니까? http://attacklab.net/showdown/ – Zed

+0

Zed - 우리는 단위 테스트를 생성하는 스크립트로 대결을 사용합니다. 문제는 단지 대결에서 출력을 벗어나는 것이 었습니다. –

답변

2

톰 맥 널티 나를 도와 내 정규식의 슈퍼 바지는 특히 내가 사용하지 않은,이라고 지적 g lobal 플래그 :(

실무 코드는 다음과 같습니다

var converter; 
var text = ""; 
var item; 
var input; 
var output; 
var head; 
var tail; 
converter = new Attacklab.showdown.converter(); 
item = document.getElementById("tests"); 
for (var test in tests) { 
    input = tests[test].replace(/[\n\r]+/gi,"\\n"); 
    input = input.replace(/[\"]+/gi, "\\\""); 
    output = converter.makeHtml(tests[test]).replace(/[\n\r]+/gi, "\\n"); 
    output = output.replace(/[\"]+/gi, "\\\""); 
    text += "  ?_assert(conv(\"" + input + "\") == \"" + output + "\"),\n"; 
}; 
head = "unit_test_() -> \n [\n"; 
tail = "\n ]."; 
text = text.slice(0, text.length - 2); 
item.value = head + text + tail; 
관련 문제