55 lines
1.2 KiB
JavaScript
55 lines
1.2 KiB
JavaScript
import { expect } from 'chai'
|
|
import dedent from 'dedent-js'
|
|
import { cyclesInDependenciesGraph } from '../source/AST/graph'
|
|
|
|
describe('Cyclic dependencies detectron 3000 ™', () => {
|
|
it('should detect the trivial formule cycle', () => {
|
|
const rules = dedent`
|
|
a:
|
|
formule: a + 1
|
|
`
|
|
const cycles = cyclesInDependenciesGraph(rules)
|
|
expect(cycles).to.deep.equal([['a']])
|
|
})
|
|
|
|
it('should detect nested and parallel formule cycles', () => {
|
|
const rules = dedent`
|
|
a:
|
|
formule: b + 1
|
|
b:
|
|
formule: c + d + 1
|
|
c:
|
|
formule: a + 1
|
|
d:
|
|
formule: b + 1
|
|
`
|
|
const cycles = cyclesInDependenciesGraph(rules)
|
|
expect(cycles).to.deep.equal([['a', 'b', 'c', 'd']])
|
|
})
|
|
|
|
it('should not detect formule cycles due to parent dependancy', () => {
|
|
const rules = dedent`
|
|
a:
|
|
formule: b + 1
|
|
a . b:
|
|
formule: 3
|
|
`
|
|
const cycles = cyclesInDependenciesGraph(rules)
|
|
expect(cycles).to.deep.equal([])
|
|
})
|
|
|
|
it('should not detect cycles due to replacement', () => {
|
|
const rules = dedent`
|
|
a:
|
|
formule: b + 1
|
|
a . b:
|
|
formule: 3
|
|
a . c:
|
|
remplace: b
|
|
formule: a
|
|
`
|
|
const cycles = cyclesInDependenciesGraph(rules)
|
|
expect(cycles).to.deep.equal([['a', 'a . c']])
|
|
})
|
|
})
|