-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Updated List Turnouts Command Changed from `T` to `JT` * Renamed `listTurnoutsCommand` to `turnoutsCommand`. Added ability to request an individual Turnout * Added Turnout List Parser * Added Turnout Item Parser
- Loading branch information
1 parent
b4fc37c
commit cdb7557
Showing
13 changed files
with
276 additions
and
20 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
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,22 @@ | ||
import { makeCommandFromAttributes } from '../../utils/index.js' | ||
|
||
interface TurnoutsCommandParams { | ||
turnoutId?: number | ||
} | ||
|
||
const turnoutsCommandKey = 'JT' | ||
|
||
/** | ||
* | ||
* @returns {string|{readonly returnString: string, readonly sendString: string, returnsKey: string, key: string}} | ||
*/ | ||
export const turnoutsCommand: (params?: TurnoutsCommandParams) => string = ({ turnoutId } = {}) => { | ||
return makeCommandFromAttributes([turnoutsCommandKey, turnoutId]) | ||
} | ||
|
||
/** | ||
* @deprecated Use turnoutsCommand instead | ||
*/ | ||
export const listTurnoutsCommand: () => string = () => { | ||
return turnoutsCommand() | ||
} |
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
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,4 @@ | ||
export * from './turnoutParser.js' | ||
export * from './turnoutDCCParser.js' | ||
export * from './turnoutListParser.js' | ||
export * from './turnoutItemParser.js' |
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,47 @@ | ||
import { Command, parseCommand, removeDoubleQuotes } from '../../utils/index.js' | ||
import { | ||
FunctionName, | ||
ParserResult, | ||
ParserStatus | ||
} from '../../types/index.js' | ||
import { ParserAttributeError, ParserKeyError } from '../errors/index.js' | ||
import { TurnoutState } from '../../commands/index.js' | ||
|
||
interface TurnoutItemParams { | ||
turnoutId: number | ||
thrown: TurnoutState | ||
description: string | ||
} | ||
|
||
export type TurnoutItemResult = ParserResult<TurnoutItemParams> | ||
const turnoutItemParserKey = 'jT' | ||
|
||
const parseFromCommand: (params: Command) => TurnoutItemResult = ({ key, attributes }) => { | ||
const [turnoutId, state, description] = attributes | ||
|
||
if (key !== turnoutItemParserKey || attributes.length !== 3) { | ||
throw new ParserKeyError('turnoutItemParser', key) | ||
} | ||
|
||
if (!description.includes('"')) { | ||
throw new ParserAttributeError('description', description, 'description must be wrapped in double quotes') | ||
} | ||
|
||
const thrown = parseInt(state) | ||
|
||
return { | ||
key: turnoutItemParserKey, | ||
parser: FunctionName.TURNOUT_ITEM, | ||
status: ParserStatus.SUCCESS, | ||
params: { | ||
turnoutId: parseInt(turnoutId), | ||
thrown: thrown === 0 ? TurnoutState.CLOSED : TurnoutState.THROWN, | ||
description: removeDoubleQuotes(description) | ||
} | ||
} | ||
} | ||
|
||
export const turnoutItemParser: (command: string) => TurnoutItemResult = (command) => { | ||
const commandParams = parseCommand(command) | ||
return parseFromCommand(commandParams) | ||
} |
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,41 @@ | ||
import { Command, parseCommand } from '../../utils/index.js' | ||
import { FunctionName, ParserResult, ParserStatus } from '../../types/index.js' | ||
import { ParserKeyError } from '../errors/index.js' | ||
|
||
interface TurnoutListParams { | ||
turnoutIds: number[] | ||
} | ||
|
||
export type TurnoutListResult = ParserResult<TurnoutListParams> | ||
const turnoutListParserKey = 'jT' | ||
|
||
const parseFromCommand: (params: Command) => TurnoutListResult = ({ key, attributes }) => { | ||
const possibleTurnoutIds = attributes | ||
|
||
if (key !== turnoutListParserKey) { | ||
throw new ParserKeyError('turnoutListParser', key) | ||
} | ||
|
||
const turnoutIds = possibleTurnoutIds.map(turnoutIdString => { | ||
const turnoutId = parseInt(turnoutIdString) | ||
if (!isNaN(turnoutId) && isFinite(turnoutId)) { | ||
return turnoutId | ||
} | ||
|
||
throw new Error(`Cab ID ${turnoutIdString} is not a number`) | ||
}) | ||
|
||
return { | ||
key: turnoutListParserKey, | ||
parser: FunctionName.TURNOUT_LIST, | ||
status: ParserStatus.SUCCESS, | ||
params: { | ||
turnoutIds | ||
} | ||
} | ||
} | ||
|
||
export const turnoutListParser: (command: string) => TurnoutListResult = (command) => { | ||
const commandParams = parseCommand(command) | ||
return parseFromCommand(commandParams) | ||
} |
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
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,17 @@ | ||
import { turnoutsCommand } from '../../../../src' | ||
|
||
describe('turnoutsCommand()', function () { | ||
it('is valid', () => { | ||
const sendString = '<JT>' | ||
const command = turnoutsCommand() | ||
expect(command).toBe(sendString) | ||
}) | ||
|
||
describe('for a specific Turnout', () => { | ||
it('is valid', function () { | ||
const sendString = '<JT 70>' | ||
const command = turnoutsCommand({ turnoutId: 70 }) | ||
expect(command).toEqual(sendString) | ||
}) | ||
}) | ||
}) |
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
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,32 @@ | ||
import { | ||
FunctionName, ParserKeyError, | ||
ParserStatus, | ||
turnoutItemParser, TurnoutItemResult, | ||
TurnoutState | ||
} from '../../../../src' | ||
|
||
describe('turnoutItemParser()', function () { | ||
it('parses `<jT 1 0 "Description">`', () => { | ||
const result = turnoutItemParser('<jT 1 0 "Description">') | ||
|
||
const expected: TurnoutItemResult = { | ||
key: 'jT', | ||
parser: FunctionName.TURNOUT_ITEM, | ||
status: ParserStatus.SUCCESS, | ||
params: { | ||
turnoutId: 1, | ||
thrown: TurnoutState.CLOSED, | ||
description: 'Description' | ||
} | ||
} | ||
expect(result).toEqual(expected) | ||
}) | ||
|
||
describe('with incorrect key', function () { | ||
it('throws a ParserKeyError', function () { | ||
expect(() => { | ||
turnoutItemParser('<incorrect-key>') | ||
}).toThrowError(ParserKeyError) | ||
}) | ||
}) | ||
}) |
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,48 @@ | ||
import { FunctionName, ParserKeyError, ParserStatus, turnoutListParser, TurnoutListResult } from '../../../../src' | ||
|
||
describe('turnoutListParser()', function () { | ||
describe('without any Turnout Items', function () { | ||
it('parses `<jT>`', () => { | ||
const result = turnoutListParser('<jT>') | ||
|
||
const expected: TurnoutListResult = { | ||
key: 'jT', | ||
parser: FunctionName.TURNOUT_LIST, | ||
params: { | ||
turnoutIds: [] | ||
}, | ||
status: ParserStatus.SUCCESS | ||
} | ||
expect(result).toEqual(expected) | ||
}) | ||
}) | ||
|
||
describe('with Turnout Items', function () { | ||
it('parses `<jT 1 22 333 4444>`', () => { | ||
const result = turnoutListParser('<jT 1 22 333 4444>') | ||
|
||
const expected: TurnoutListResult = { | ||
key: 'jT', | ||
parser: FunctionName.TURNOUT_LIST, | ||
params: { | ||
turnoutIds: [ | ||
1, | ||
22, | ||
333, | ||
4444 | ||
] | ||
}, | ||
status: ParserStatus.SUCCESS | ||
} | ||
expect(result).toEqual(expected) | ||
}) | ||
}) | ||
|
||
describe('with incorrect key', function () { | ||
it('throws a ParserKeyError', function () { | ||
expect(() => { | ||
turnoutListParser('<incorrect-key>') | ||
}).toThrowError(ParserKeyError) | ||
}) | ||
}) | ||
}) |