You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Gradient.js 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. /* globals describe, expect, it, spyOn, jasmine, container */
  2. import { Gradient, SVG, Container } from '../../../src/main.js'
  3. const { any, objectContaining, createSpy } = jasmine
  4. describe('Gradient.js', () => {
  5. describe('()', () => {
  6. it('creates a new object of type LinearGradient', () => {
  7. const gradient = new Gradient('linear')
  8. expect(gradient).toEqual(any(Gradient))
  9. expect(gradient.type).toBe('linearGradient')
  10. })
  11. it('creates a new object of type RadialGradient', () => {
  12. const gradient = new Gradient('radial')
  13. expect(gradient).toEqual(any(Gradient))
  14. expect(gradient.type).toBe('radialGradient')
  15. })
  16. it('sets passed attributes on the element', () => {
  17. expect(new Gradient('linear', { id: 'foo' }).id()).toBe('foo')
  18. })
  19. })
  20. describe('attr()', () => {
  21. it('relays to parents attr method for any call except transformation', () => {
  22. const gradient = new Gradient('linear')
  23. const spy = spyOn(Container.prototype, 'attr')
  24. gradient.attr(1, 2, 3)
  25. gradient.attr('transform', 2, 3)
  26. expect(spy).toHaveBeenCalledWith(1, 2, 3)
  27. expect(spy).toHaveBeenCalledWith('gradientTransform', 2, 3)
  28. })
  29. })
  30. describe('bbox()', () => {
  31. it('returns an empty box', () => {
  32. expect(new Gradient('linear').bbox().isNulled()).toBe(true)
  33. })
  34. })
  35. describe('targets()', () => {
  36. it('gets all targets of this gradient', () => {
  37. const canvas = SVG().addTo(container)
  38. const gradient = canvas.gradient('linear')
  39. const rect = canvas.rect(100, 100).fill(gradient)
  40. expect(gradient.targets()).toEqual([ rect ])
  41. })
  42. })
  43. describe('toString()', () => {
  44. it('calls url() and returns the result', () => {
  45. const gradient = new Gradient('linear')
  46. expect(gradient.toString()).toBe(gradient.url())
  47. })
  48. })
  49. describe('update()', () => {
  50. it('clears the element', () => {
  51. const gradient = new Gradient('linear')
  52. gradient.stop(0.1, '#fff')
  53. expect(gradient.update().children()).toEqual([])
  54. })
  55. it('executes a function in the context of the gradient', () => {
  56. const gradient = new Gradient('linear')
  57. const spy = createSpy('gradient')
  58. gradient.update(spy)
  59. expect(spy.calls.all()).toEqual([
  60. objectContaining({ object: gradient, args: [ gradient ] })
  61. ])
  62. })
  63. })
  64. describe('url()', () => {
  65. it('returns url(#id)', () => {
  66. const gradient = new Gradient('linear').id('foo')
  67. expect(gradient.url()).toBe('url(#foo)')
  68. })
  69. })
  70. describe('Container', () => {
  71. it('relays the call to defs', () => {
  72. const canvas = new SVG()
  73. const defs = canvas.defs()
  74. const spy = spyOn(defs, 'gradient').and.callThrough()
  75. const spy2 = createSpy('gradient')
  76. canvas.gradient('linear', spy2)
  77. expect(spy).toHaveBeenCalledWith('linear', spy2)
  78. expect(spy2).toHaveBeenCalled()
  79. })
  80. })
  81. describe('Defs', () => {
  82. it('creates a pattern in the defs', () => {
  83. const canvas = new SVG()
  84. const defs = canvas.defs()
  85. const spy = createSpy('gradient')
  86. const gradient = defs.gradient('linear', spy)
  87. expect(gradient).toEqual(any(Gradient))
  88. expect(gradient.type).toBe('linearGradient')
  89. expect(defs.children()).toEqual([ gradient ])
  90. expect(spy).toHaveBeenCalled()
  91. })
  92. })
  93. })