-
Notifications
You must be signed in to change notification settings - Fork 172
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[1단계 - 자동차 경주 구현] 엽토(김건엽) 미션 제출합니다. (#167)
* docs: 기능 구현 목록을 작성하다 * docs: 예외처리 목록을 추가하다 * chore: lint, prettier 적용하다 * chore: 파일구조를 구축하다 * chore: lint 수정하다 * feat: Console 객체를 생성하다 * feat: InputView 객체를 생성하다 * feat: RaceMessage를 상수화하다 * feat: 경주할 자동차 이름을 입력받는다 * feat: Car Class를 생성하다. * feat: 자동차 이름 입력에 대한 값을 예외처리하다 * feat: 시도횟수가 1 이상의 숫자가 아닐 경우 예외처리한다 * feat: 자동차 이름이 한개 이하일 경우엔 예외처리한다 * feat: 시도할 횟수를 입력받는다 * style: 변수명을 수정하다 * feat: 난수 생성 메서드를 만들다 * feat: 난수가 4 이상일 경우 자동차를 전진시키다 * feat: 입력받은 수만큼 시도 후 자동차 경주 결과를 출력하다 * feat: 최종 우승자를 출력하고 종료한다 * refactor: 상수를 분리하다 * refactor: 메서드 명을 변경하다 * test: Car Class 테스트 코드를 작성하다 * test: Race Class 테스트 코드를 작성하다 * test: Validator 테스트 코드를 작성하다 * refactor: Validator에 대해 수정하다 * refactor: 자동차 이름 입력 값이 빈 값이거나 정의되지 않았다면 예외처리한다 * refactor: 자동차 이름이 중복될 경우 예외처리한다 * refactor: Validator 메서드 이름을 변경하다 * docs: 예외 처리 목록 추가 * chore: EOL를 처리하다 * chore: prettierignore을 삭제하다 node_modules만 있어서 삭제하다 * chore: Car Class 테스트 파일을 수정하다 * chore: .vscode 디렉토리를 gitignore에 추가하다 * chore: Validator 테스트 코드에서 설명을 수정하다 * refactor: 구분자를 상수화 하지 않다 * refactor: 이름에 숫자가 포함된 경우는 예외처리를 하지 않는다 * reafactor: Controller handleRace 메서드명을 변경하다 * chore: lock 파일을 지우다 lock 파일이 두개가 생성되어 yarn.lock을 지우다 * docs: 기능 구현 목록 수정하다 이름에 숫자만 있거나 이름이 특수문자라면 예외처리한다로 수정하다 * chore: EOL을 수동으로 설정하다 * refactor: 변하지 않는 값을 상수화하지 않다 * refactor: move 메서드 테스트 코드 설명을 수정하다 * chore: prettier printWidth를 변경하다 80은 defalut값이기도 하면서 요즘은 브라우저가 넓어서 오히려 좁을 수 있다 * refactor: Console Error Message를 변경하다 일관성이 있도록 한글로 변경하다
- Loading branch information
Showing
25 changed files
with
17,670 additions
and
4,015 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
module.exports = { | ||
env: { | ||
browser: true, | ||
es2021: true, | ||
node: true, | ||
}, | ||
extends: ['eslint:recommended', 'airbnb-base', 'prettier'], | ||
plugins: ['prettier'], | ||
rules: { | ||
'import/prefer-default-export': 'off', | ||
'import/extensions': ['off'], | ||
'class-methods-use-this': 'off', | ||
'no-alert': 'off', | ||
'no-undef': 'off', | ||
'no-new': 'off', | ||
'lines-between-class-members': 'off', | ||
}, | ||
parserOptions: { | ||
ecmaVersion: 13, | ||
sourceType: 'module', | ||
}, | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,3 @@ | ||
node_modules/ | ||
dist/ | ||
.vscode |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
/** | ||
* Prettier 옵션 | ||
* - https://prettier.io/docs/en/options.html | ||
*/ | ||
module.exports = { | ||
printWidth: 110, // 한 줄 최대 문자 수 | ||
tabWidth: 2, // 들여쓰기 시, 탭 너비 | ||
useTabs: false, // 스페이스 대신 탭 사용 | ||
semi: true, // 문장 끝 세미콜론 사용 | ||
singleQuote: true, // 작은 따옴표 사용 | ||
trailingComma: 'all', // 꼬리 콤마 사용 | ||
bracketSpacing: true, // 중괄호 내에 공백 사용 | ||
arrowParens: 'avoid', // 화살표 함수 단일 인자 시, 괄호 생략 | ||
proseWrap: 'never', // 마크다운 포매팅 제외 | ||
endOfLine: 'auto', // 개행문자 유지 (혼합일 경우, 첫 줄 개행문자로 통일) | ||
}; |
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
const Car = require('../src/Models/Car'); | ||
|
||
test('move 인자로 4이상의 수가 들어온다면 position을 1만큼 이동한다.', () => { | ||
// given | ||
const car = new Car('garam'); | ||
const numbers = [1, 3, 4, 5, 6, 2, 0]; | ||
const resultPosition = 3; | ||
|
||
// when | ||
numbers.forEach(number => { | ||
car.move(number); | ||
}); | ||
|
||
// then | ||
expect(car.getPosition()).toEqual(resultPosition); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
const Car = require('../src/Models/Car'); | ||
const Race = require('../src/Models/Race'); | ||
const RandomNumGenerator = require('../src/Utils/RandomNumGenerator'); | ||
|
||
const mockRandoms = numbers => { | ||
RandomNumGenerator.generateNumber = jest.fn(); | ||
numbers.reduce( | ||
(acc, number) => acc.mockReturnValueOnce(number), | ||
RandomNumGenerator.generateNumber, | ||
); | ||
}; | ||
|
||
test('Race Class 테스트', () => { | ||
// given | ||
const cars = []; | ||
['garam', 'yeop'].forEach(name => { | ||
cars.push(new Car(name)); | ||
}); | ||
const race = new Race(cars); | ||
const tryCount = 3; | ||
mockRandoms([1, 2, 3, 4, 5, 6]); | ||
const result = new Map([ | ||
['garam', 1], | ||
['yeop', 2], | ||
]); | ||
|
||
// when | ||
for (let i = 0; i < tryCount; i += 1) { | ||
race.go(); | ||
} | ||
|
||
// then | ||
expect(race.getResult()).toEqual(result); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
const { RACE_ERROR_MESSAGE } = require('../src/Constant/ErrorMessage'); | ||
const Validator = require('../src/Utils/Validator'); | ||
|
||
describe('Validator 테스트', () => { | ||
test.each([[['garam'], [''], ['garam', 'garam']]])( | ||
'자동차 이름이 한개 이하거나 중복될 경우 예외처리한다.', | ||
input => { | ||
expect(() => { | ||
Validator.validateNamesOfCars(input); | ||
}).toThrow(RACE_ERROR_MESSAGE.numberOfNames); | ||
}, | ||
); | ||
|
||
test.each([['yeopto'], ['garame']])( | ||
'이름이 5자를 초과하는 경우 예외처리한다.', | ||
input => { | ||
expect(() => { | ||
Validator.validateCarName(input); | ||
}).toThrow(RACE_ERROR_MESSAGE.lengthOfName); | ||
}, | ||
); | ||
|
||
test.each([[' '], ['!'], [''], ['123']])( | ||
'자동차 이름이 문자이거나 숫자만 들어간 경우 경우 예외처리한다.', | ||
input => { | ||
expect(() => { | ||
Validator.validateCarName(input); | ||
}).toThrow(RACE_ERROR_MESSAGE.invalidInput); | ||
}, | ||
); | ||
|
||
test.each([[0], [-1]])('시도 횟수가 1이상이 아니면 예외처리한다', input => { | ||
expect(() => { | ||
Validator.validateTryCount(input); | ||
}).toThrow(RACE_ERROR_MESSAGE.rangeOfTryCount); | ||
}); | ||
|
||
test.each([['aa'], [' '], ['한']])( | ||
'숫자가 아니라면 예외처리를 한다', | ||
input => { | ||
expect(() => { | ||
Validator.validateTryCount(input); | ||
}).toThrow(RACE_ERROR_MESSAGE.rangeOfTryCount); | ||
}, | ||
); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
## 기능 구현 목록 | ||
|
||
- [x] 경주할 자동차 이름을 입력받는다.(쉼표를 기준으로) | ||
- [x] 시도할 횟수를 입력받는다. (수 제한 없음) | ||
- 각 자동차 마다 0에서 9까지의 무작위 값을 구한다. | ||
- [x] 0에서 9까지의 무작위 값을 구한다. | ||
- [x] 4 이상인 자동차인 경우는 전진시킨다. | ||
- [x] 입력받은 수만큼 시도 후 자동차 경주 결과를 출력한다. | ||
- [x] 최종 우승자를 출력하고 종료한다. | ||
|
||
## 예외 처리 | ||
|
||
- [x] 시도횟수가 1이상의 숫자가 아닐 경우 예외처리한다. | ||
- [x] 이름이 다섯자 이하가 아닐 경우 예외처리한다. | ||
- [x] 이름에 숫자만 있거나 이름이 특수문자라면 예외처리한다. | ||
- [x] 자동차 이름이 한개 이하일 경우엔 예외처리한다. | ||
- [x] 자동차 이름이 중복된 경우엔 예외처리한다. |
Oops, something went wrong.