Skip to content

Commit

Permalink
fix(test): always use valid example
Browse files Browse the repository at this point in the history
  • Loading branch information
azu committed Mar 3, 2016
1 parent e4ef656 commit ce2b024
Show file tree
Hide file tree
Showing 14 changed files with 260 additions and 24 deletions.
2 changes: 1 addition & 1 deletion example/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
"author": "azu",
"license": "MIT",
"devDependencies": {
"textlint": "^5.1.0",
"textlint": "^5.5.1-0",
"textlint-rule-preset-jtf-style": "file:.."
}
}
2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
"build": "babel src --out-dir lib --source-maps",
"watch": "babel src --out-dir lib --watch --source-maps",
"prepublish": "npm run --if-present build",
"pretest": "node tool/create-fixtures.js",
"test": "mocha && npm run test:textlint",
"test:textlint": "(cd example && npm t)"
},
Expand All @@ -37,6 +38,7 @@
],
"devDependencies": {
"babel": "^5.8.23",
"glob": "^7.0.0",
"mocha": "^2.3.3",
"textlint": "^5.5.1-0",
"textlint-tester": "^0.5.1-0"
Expand Down
2 changes: 1 addition & 1 deletion src/2.1.5.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ function reporter(context) {
return;
}
const text = getSource(node);
const matches = matchCaptureGroupAll(text, /([\uFF65-\uFF9F]+)/);
const matches = matchCaptureGroupAll(text, /([\uFF65-\uFF9F]+)/g);
matches.forEach(match => {
const {index, text} = match;
report(node, {
Expand Down
6 changes: 4 additions & 2 deletions src/3.1.2.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@
"use strict";
import {isUserWrittenNode} from "./util/node-util";
import {matchAll} from "./util/match-index";

import regx from 'regx';
import {japaneseRegExp} from "./util/regexp";
const rx = regx("g");
/*
3.1.2. 全角文字どうし
Expand All @@ -18,7 +20,7 @@ function reporter(context) {
}
const text = getSource(node);
// 全角同士の間は半角スペースを入れない
const matchReg = /(?:[\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF]|[\uD840-\uD87F][\uDC00-\uDFFF]|[ぁ-んァ-ヶ])( )(?:[\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF]|[\uD840-\uD87F][\uDC00-\uDFFF]|[ぁ-んァ-ヶ])/g;
const matchReg = rx`${japaneseRegExp}( )${japaneseRegExp}`;
const katakakana = /[ァ-ヶ]( )[ァ-ヶ]/;
matchAll(text, matchReg).forEach(match => {
const {input, captureGroups} = match;
Expand Down
5 changes: 4 additions & 1 deletion src/4.2.2.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@
*/
import {isUserWrittenNode} from "./util/node-util";
import {matchCaptureGroupAll} from "./util/match-index";
import regx from 'regx';
import {japaneseRegExp} from "./util/regexp";
const rx = regx("g");
function reporter(context) {
let {Syntax, RuleError, report, fixer, getSource} = context;
return {
Expand All @@ -21,7 +24,7 @@ function reporter(context) {
}
let text = getSource(node);
// 和文で半角の?は利用しない
const matchRegExp = /(?:[\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF]|[\uD840-\uD87F][\uDC00-\uDFFF]|[ぁ-んァ-ヶ])(\?)/;
const matchRegExp = rx`${japaneseRegExp}(\?)`;
matchCaptureGroupAll(text, matchRegExp).forEach(match => {
const {index} = match;
return report(node, new RuleError("疑問符(?)を使用する場合は「全角」で表記します。", {
Expand Down
17 changes: 17 additions & 0 deletions test/2.1.5-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,23 @@ tester.run("2.1.5.カタカナ", rule, {
}
]
},
{
text: `
アジア
`,
output:`
アジア
`,
errors: [
{
message: "カタカナは「全角」で表記します。"
}
]
},
{
text: "ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚",
output: "ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゛゜",
Expand Down
4 changes: 2 additions & 2 deletions test/3.1.2-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ tester.run("3.1.2. 全角文字どうし", rule, {
]
},
{
text: "これは どういうこと?",
output: "これはどういうこと?",
text: "これは どういうこと",
output: "これはどういうこと",
errors: [
{
message: "原則として、全角文字どうしの間にスペースを入れません。",
Expand Down
12 changes: 6 additions & 6 deletions test/4.1.1-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,23 +10,23 @@ tester.run("4.1.1.句点(。)", rule, {
],
invalid: [
{
text: "A 氏は「5 月に新製品を発売します。」と述べました。",
output: "A 氏は「5 月に新製品を発売します」と述べました。",
text: "A氏は「5月に新製品を発売します。」と述べました。",
output: "A氏は「5月に新製品を発売します」と述べました。",
errors: [
{
message: "文中にかぎかっこが入る場合は、閉じかっこの前に句点を打ちません。",
column: 19
column: 17
}
]
},
{
text: "従業員は約 30,000 人です(関連企業を含みます。)",
output: "従業員は約 30,000 人です(関連企業を含みます)",
text: "従業員は約30,000人です(関連企業を含みます。",
output: "従業員は約30,000人です(関連企業を含みます",
errors: [
{
message: "文中にかぎかっこが入る場合は、閉じかっこの前に句点を打ちません。",
line: 1,
column: 27
column: 25
}
]
}
Expand Down
17 changes: 12 additions & 5 deletions test/fixer-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,19 @@ import {TextLintCore} from "textlint"
import * as fs from "fs";
describe("fixer-test", function () {
it("should convert expected", function () {
const expected = fs.readFileSync(__dirname + "/fixtures/expected.md", "utf-8");
const expected = fs.readFileSync(__dirname + "/fixtures/output.md", "utf-8");
const textlint = new TextLintCore();
textlint.setupRules(preset.rules, preset.rulesConfig);
return textlint.fixFile(__dirname + "/fixtures/replace.md").then(result => {
const output = result.output;
assert.equal(output, expected);
// all true
textlint.setupRules(preset.rules);
return textlint.fixFile(__dirname + "/fixtures/input.md").then(result => {
assert.equal(result.remainingMessages.length, 0);
const inputs = result.output.split("\n");
const outputs = expected.split("\n");
for (var i = 0; i < inputs.length; i++) {
const input = inputs[i];
const output = outputs[i];
assert.equal(input, output);
}
});
});
});
3 changes: 0 additions & 3 deletions test/fixtures/expected.md

This file was deleted.

88 changes: 88 additions & 0 deletions test/fixtures/input.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
# 見出し。

### 見出し。

### 見出し。
test

これは,見本となる例です.

785,105

785.105

0,01

0,1

これは10個あるうちの0,1分

ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚

オヤツは300円まで

200円はダメ

おやつは300円まで

これはABC全角

一億百十万人

百八つのボタン

第三回大会

サンフランシスコマラソン第三回大会

これは世界1

1部の文章

朝1番に

数100倍

数10億

しばしば数10万行以上に

数10年に一度の奇跡

JTF 標準

これは Unicode

これは Unicode

これは ダメ

これは どういうこと?

「 ダメ」

これは 「ダメ」です

A氏は「5月に新製品を発売します。」と述べました。

従業員は約30,000人です(関連企業を含みます。)

半角感嘆符!

驚きの速さ! これが新製品のキャッチコピーでした。半角 

半角疑問符?

驚きの速さ!? これが新製品のキャッチコピーでした? これは問題なし

18~22歳まで

例:〜

クォーク(物質の素粒子)

例)test

半角[かっこ

半角]かっこ
88 changes: 88 additions & 0 deletions test/fixtures/output.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
# 見出し

### 見出し

### 見出し
test

これは、見本となる例です。

785,105

785.105

0.01

0.1

これは10個あるうちの0.1分

ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゛゜

オヤツは300円まで

200円はダメ

おやつは300円まで

これはABC全角

1億百十万人

108つのボタン

第3回大会

サンフランシスコマラソン第3回大会

これは世界一

一部の文章

朝一番に

数百倍

数十億

しばしば数十万行以上に

数十年に一度の奇跡

JTF標準

これはUnicode

これはUnicode

これはダメ

これはどういうこと?

「ダメ」

これは「ダメ」です

A氏は「5月に新製品を発売します」と述べました。

従業員は約30,000人です(関連企業を含みます)

半角感嘆符!

驚きの速さ! これが新製品のキャッチコピーでした。半角 

半角疑問符?

驚きの速さ!? これが新製品のキャッチコピーでした? これは問題なし

18〜22歳まで

例:〜

クォーク(物質の素粒子)

例)test

半角[かっこ

半角]かっこ
3 changes: 0 additions & 3 deletions test/fixtures/replace.md

This file was deleted.

35 changes: 35 additions & 0 deletions tool/create-fixtures.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// LICENSE : MIT
"use strict";
const path = require("path");
const fs = require("fs");
const glob = require("glob");
// result
const RESULT = {
input: [],
output: []
};
function processFile(filePath) {
const contents = fs.readFileSync(filePath, "utf-8");
const lines = contents.split(/\n/);
const inputRegExp = /text:\s*?"(.*?)"/;
const outputRegExp = /output:\s*?"(.*?)"/;
lines.forEach(function (line, index) {
const nextLine = lines[index + 1];
if (inputRegExp.test(line) && outputRegExp.test(nextLine)) {
const inputMatch = line.match(inputRegExp)[1];
// \\n => \n
RESULT.input.push(inputMatch.replace(/\\n/g, "\n"));
} else if (outputRegExp.test(line)) {
const outputMatch = line.match(outputRegExp)[1];
RESULT.output.push(outputMatch.replace(/\\n/g, "\n"));
}
});
}


const testDir = path.join(__dirname, "..", "test");
const filePathList = glob.sync(testDir + "/*-test.js");
filePathList.forEach(processFile);

fs.writeFileSync(path.join(testDir, "fixtures/input.md"), RESULT.input.join("\n\n"), "utf-8");
fs.writeFileSync(path.join(testDir, "fixtures/output.md"), RESULT.output.join("\n\n"), "utf-8");

0 comments on commit ce2b024

Please sign in to comment.