Browserslist: caniuse-lite is outdated. Please run:
npx browserslist@latest --update-db

Why you should do it regularly:
https://github.com/browserslist/browserslist#browsers-data-updating
Running "connect:server" (connect) task
Started connect web server on http://localhost:9001

Running "mochaChrome:test" (mochaChrome) task

🌸 p5.js says:
Syntax Error ▶️ "expect" is being redeclared. JavaScript doesn't allow declaring a variable more than once. Check the line number in error for redeclaration of the variable.
For more: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Redeclared_parameter#what_went_wrong

  describe
    p5.prototype.describe
      ✓ should be a function
      ✓ wrong param type at #0
      ✓ no params
      ✓ err when LABEL at param #0
      ✓ should create description as fallback
      ✓ should not add extra period if string ends in "."
      ✓ should not add period if string ends in "!" or "?
      ✓ should create description when called after describeElement()
      ✓ should create Label adjacent to canvas
      ✓ should create Label adjacent to canvas when label of element already exists
    p5.prototype.describeElement
      ✓ should be a function
      ✓ wrong param type at #0 and #1
      ✓ no params
      ✓ err when LABEL at param #0
      ✓ err when LABEL at param #1
      ✓ should create element description as fallback
      ✓ should not add extra ":" if element name ends in colon
      ✓ should replace ";", ",", "." for ":" in element name
      ✓ should create element description when called after describe()
      ✓ should create element label adjacent to canvas
      ✓ should create element label adjacent to canvas when called after describe()
  outputs
    p5.prototype.textOutput
      ✓ should be a function
      ✓ wrong param type at #0
      ✓ should create output as fallback
      ✓ should create output as label
      ✓ should create text output for arc()
      ✓ should create text output for ellipse()
      ✓ should create text output for triangle()
    p5.prototype.gridOutput
      ✓ should be a function
      ✓ wrong param type at #0
      ✓ should create output as fallback
      ✓ should create output as label
      ✓ should create text output for quad()
      ✓ should create text output for point()
      ✓ should create text output for triangle()
      ✓ rgba converts to hsba
  color/p5.ColorConversion
    rgbaToHSBA
      ✓ hsba converts to rgba
    hsbaToRGBA
      ✓ handles maximum hue value
      ✓ hsla converts to rgba
      ✓ handles maximum hue value
      ✓ rgba converts to hsla (low lightness)
      ✓ rgba converts to hsla (high lightness)
      ✓ hsla converts to hsba
    hslaToRGBA
    rgbaToHSLA
    hslaToHSBA
    hsbaToHSLA
      ✓ hsba converts to hsla
  color/CreatingReading
    p5.prototype.alpha
      ✓ no friendly-err-msg I
      ✓ no friendly-err-msg II
      ✓ wrong param type at #0
    p5.prototype.red, green, blue
      ✓ red(): no friendly-err-msg
      ✓ green(): no friendly-err-msg
      ✓ blue(): no friendly-err-msg
    p5.prototype.hue, brightness, lightness, saturation
      ✓ hue(): no friendly-err-msg
      ✓ brightness(): no friendly-err-msg
      ✓ lightness(): no friendly-err-msg
      ✓ saturation(): no friendly-err-msg
    p5.prototype.lerpColor
      ✓ should correctly get lerp colors in RGB
      ✓ should correctly get lerp colors in HSL
      ✓ should correctly get lerp colors in HSB
      ✓ should not extrapolate
      ✓ missing param #2
    p5.prototype.lerpColor with alpha
      ✓ should correctly get lerp colors in RGB with alpha
      ✓ should correctly get lerp colors in HSL with alpha
      ✓ should correctly get lerp colors in HSB with alpha
      ✓ should not extrapolate
  p5.Color
    p5.prototype.color(r,g,b)
      ✓ should create instance of p5.Color
      ✓ should correctly set RGBA property
      ✓ shouldn't set HSBA property before hsb access func is called
      ✓ shouldn't set HSLA property before hsb access func is called
      ✓ color(): missing param #0 + throws error
    p5.prototype.color("#rgb")
      ✓ should create instance of p5.Color
      ✓ should correctly set RGBA property
      ✓ invalid hex values resolve to white
      ✓ should not be able to pass css & alpha
      spot check
        ✓ numeric hex values
        ✓ alphabetic hex values
        ✓ alphanumeric hex values
    p5.prototype.color("#rgba")
      ✓ should create instance of p5.Color
      ✓ should correctly set RGBA property
      ✓ invalid hex values resolve to white
      spot check
        ✓ numeric hex values
        ✓ alphabetic hex values
        ✓ alphanumeric hex values
    p5.prototype.color("#rrggbb")
      ✓ should create instance of p5.Color
      ✓ should correctly set RGBA property
      ✓ invalid hex values resolve to white
      spot check
        ✓ numeric hex values
        ✓ alphabetic hex values
        ✓ alphanumeric hex values
    p5.prototype.color("#rrggbbaa")
      ✓ should create instance of p5.Color
      ✓ should correctly set RGBA property
      ✓ invalid hex values resolve to white
      spot check
        ✓ numeric hex values
        ✓ alphabetic hex values
        ✓ alphanumeric hex values
    p5.prototype.color("rgb(r,g,b)")
      ✓ should create instance of p5.Color
      ✓ should correctly set RGBA property
      ✓ spot check variant spacing
      ✓ invalid RGB values resolve to white
    p5.prototype.color("rgb(r%,g%,b%)")
      ✓ should create instance of p5.Color
      ✓ should correctly set RGBA property
      ✓ spot check variant spacing
      ✓ spot check decimal percentage values
      ✓ invalid percentage values default to white
    p5.prototype.color("rgba(r,g,b,a)")
      ✓ should create instance of p5.Color
      ✓ should correctly set RGBA property
      ✓ spot check variant spacing
      ✓ invalid RGBA values resolve to white
    p5.prototype.color("rgba(r%,g%,b%,a)")
      ✓ should create instance of p5.Color
      ✓ should correctly set RGBA property
      ✓ spot check variant spacing
      ✓ spot check decimal percentage values
      ✓ invalid RGBA percentage values resolve to white
    p5.prototype.color("hsl(h, s%, l%)")
      ✓ should create instance of p5.Color
      ✓ should correctly set RGBA property
    p5.prototype.color("hsla(h, s%, l%, a)")
      ✓ should create instance of p5.Color
      ✓ should correctly set RGBA property
    p5.prototype.color("hsb(h, s%, b%)")
      ✓ should create instance of p5.Color
      ✓ should correctly set RGBA property
    p5.prototype.color("hsba(h, s%, b%, a)")
      ✓ should create instance of p5.Color
      ✓ should correctly set RGBA property
    p5.prototype.color("svgnamedcolor")
      ✓ should create instance of p5.Color
      ✓ should correctly set RGBA property
      ✓ spot check color keywords
    p5.prototype.color([])
      ✓ should create instance of p5.Color
      ✓ should correctly set RGBA property
    p5.prototype.color(r,g,b,a)
      ✓ should create instance of p5.Color
      ✓ should correctly set RGBA property
      ✓ should correctly get hue/saturation/brightness/lightness
      ✓ should correctly get RGBA values
      ✓ should correctly render color string
    in default mode
      ✓ can be modified with alpha setter
      ✓ can be modified with rgb setters
    p5.Color in RGB mode with custom range
      ✓ should correctly convert to RGBA
      ✓ should correctly get RGBA property
      ✓ should correctly render color string
      ✓ should correctly get RGBA property after overwrite
    p5.Color in HSL mode
      ✓ should create instance of p5.Color
      ✓ should correctly set RGBA property
      ✓ can be modified with alpha setter
      ✓ can be modified with rgb setters
    p5.Color in HSL mode with Alpha
      ✓ should create instance of p5.Color
      ✓ should correctly set RGBA property
      ✓ should correctly get hue/saturation/lightness/alpha
    p5.Color in HSL mode with custom range
      ✓ should correctly get HSLA property
      ✓ should correctly convert to RGBA
      ✓ should correctly render color string
      ✓ can be modified with alpha setter
      ✓ can be modified with rgb setters
    p5.Color in HSL mode with RGB string
      ✓ should correctly get HSLA property
      ✓ should correctly convert to RGBA
      ✓ should correctly render color string
    p5.Color in HSL mode with HSL string
      ✓ should correctly get HSLA property
      ✓ should correctly convert to RGBA
      ✓ should correctly render color string
    p5.Color in HSL mode with HSB string
      ✓ should correctly get HSLA property
      ✓ should correctly convert to RGBA
      ✓ should correctly render color string
    p5.Color in HSB mode
      ✓ should create instance of p5.Color
      ✓ should correctly set RGBA property
      ✓ can be modified with alpha setter
      ✓ can be modified with rgb setters
    p5.Color in HSB mode with Alpha
      ✓ should create instance of p5.Color
      ✓ should correctly set RGBA property
      ✓ should correctly get hue/saturation/brightness/alpha
    p5.Color in HSB mode with custom range
      ✓ should correctly get HSBA property
      ✓ should correctly convert to RGBA
      ✓ should correctly render color string
    p5.Color in HSB mode with RGB string
      ✓ should correctly get HSBA property
      ✓ should correctly convert to RGBA
      ✓ should correctly render color string
    p5.Color in HSB mode with HSB string
      ✓ should correctly get HSBA property
      ✓ should correctly convert to RGBA
      ✓ should correctly render color string
    p5.Color in HSB mode with HSL string
      ✓ should correctly get HSBA property
      ✓ should correctly convert to RGBA
      ✓ should correctly render color string
    p5.Color in RGB mode with grayscale value
      ✓ should create instance of p5.Color
      ✓ should correctly set RGB levels
    p5.Color in RGB mode with grayscale value and alpha
      ✓ should create instance of p5.Color
      ✓ should correctly set RGB levels
    p5.Color in HSB mode with grayscale value
      ✓ should create instance of p5.Color
      ✓ should correctly set RGB levels
    p5.Color in HSB mode with grayscale value and alpha
      ✓ should create instance of p5.Color
      ✓ should correctly set RGB levels
    p5.Color in HSL mode with grayscale value
      ✓ should create instance of p5.Color
      ✓ should correctly set RGB levels
    p5.Color in HSL mode with grayscale value and alpha
      ✓ should create instance of p5.Color
      ✓ should correctly set RGB levels
    p5.Color.prototype.toString
      ✓ should generate (r,g,b,a) color string with 0-1 normalized alpha
      ✓ should consistently generate the same output
      ✓ should not mutate color levels
  color/Setting
    p5.prototype.erase
      ✓ should be a function
      ✓ should set renderer to erasing state
      ✓ should cache renderer fill
      ✓ should cache renderer stroke
      ✓ should cache renderer blend
      ✓ should set fill strength
      ✓ should set stroke strength
    p5.RendererGL.prototype.erase
      ✓ should set renderer to erasing state
      ✓ should cache renderer fill
      ✓ should cache renderer stroke
      ✓ should cache renderer blend
      ✓ should set fill strength
      ✓ should set stroke strength
      ✓ should set default values when no arguments
    p5.prototype.noErase
      ✓ should be a function
      ✓ should turn off renderer erasing state

      ✓ should restore cached renderer fill

      ✓ should restore cached renderer stroke
    p5.RendererGL.prototype.noErase

      ✓ should turn off renderer erasing state

      ✓ should restore cached renderer fill

      ✓ should restore cached renderer stroke
    p5.prototype.colorMode

      ✓ should be a function

      ✓ should set mode to RGB

      ✓ should correctly set color RGB maxes

      ✓ should set mode to HSL

      ✓ should correctly set color HSL maxes

      ✓ should set mode to HSB

      ✓ should correctly set color HSB maxes
  2D Primitives
    p5.prototype.arc
      ✓ should be a function
      ✓ no friendly-err-msg
      ✓ missing param #4, #5
      ✓ wrong param type at #0
    p5.prototype.ellipse
      ✓ should be a function
      ✓ no friendly-err-msg
      ✓ missing param #2
      ✓ missing param #2
      ✓ wrong param type at #0
    p5.prototype.line
      ✓ should be a function
      ✓ no friendly-err-msg, 2D
      ✓ no friendly-err-msg, 3D
      ✓ missing param #3
      ✓ missing param #4
      ✓ wrong param type at #1
    p5.prototype.point
      ✓ should be a function
      ✓ no friendly-err-msg, 2D
      ✓ no friendly-err-msg, 3D
      ✓ missing param #1
      ✓ wrong param type at #1
    p5.prototype.quad
      ✓ should be a function
      ✓ no friendly-err-msg, 2D
      ✓ missing param #7
      ✓ wrong param type at #1
    p5.prototype.rect
      ✓ should be a function
      ✓ no friendly-err-msg, format I
      ✓ no friendly-err-msg, format II
      ✓ missing param #4
      ✓ wrong param type at #1
    p5.prototype.triangle
      ✓ should be a function
      ✓ no friendly-err-msg
      ✓ missing param #5
      ✓ wrong param type at #1
    p5.prototype.square
      ✓ should be a function
      ✓ no friendly-err-msg, format I
      ✓ no friendly-err-msg, format II
      ✓ missing param #2
      ✓ wrong param type at #1
    p5.prototype._normalizeArcAngles
      ✓ start/stop both at zero
      ✓ start/stop same but non-zero
      ✓ start/stop both close to zero, start < stop
      ✓ start/stop both close to zero, start > stop
      ✓ start/stop both close to same non-zero, start < stop
      ✓ start/stop both close to same non-zero, start > stop
      ✓ start/stop around zero but not close, start < stop
      ✓ start/stop around zero but not close, start > stop
      ✓ start/stop away from zero and not close, start < stop
      ✓ start/stop away from zero and not close, start > stop
      ✓ scaling correction, quadrants 1 and 3
      ✓ scaling correction, quadrants 2 and 4
  Attributes
    p5.prototype.ellipseMode
      ✓ should be a function
      ✓ missing param #0
      ✓ wrong param type at #0
      ✓ wrong param type at #0
    p5.prototype.rectMode
      ✓ should be a function
      ✓ wrong param type at #0
      ✓ wrong param type at #0
    p5.prototype.noSmooth
      ✓ should be a function
    p5.prototype.smooth
      ✓ should be a function
    p5.prototype.strokeCap
      ✓ should be a function
      ✓ wrong param type at #0
      ✓ wrong param type at #0
    p5.prototype.strokeJoin
      ✓ should be a function
      ✓ wrong param type at #0
      ✓ wrong param type at #0
    p5.prototype.strokeWeight
      ✓ should be a function
      ✓ wrong param type at #0
  Curves
    p5.prototype.bezier
      ✓ should be a function
      ✓ no friendly-err-msg
      ✓ no friendly-err-msg. missing param #6, #7
      ✓ wrong param type at #0
    p5.prototype.bezierPoint
      ✓ should be a function
      ✓ should <response clipped><NOTE>Due to the max output limit, only part of the full response has been shown to you.</NOTE> numbers
    p5.prototype.hex
      ✓ should be a function
      ✓ should return the hex representation of the number
      ✓ should return FFFFFFFF for Infinity
      ✓ should return 00000000 for -Infinity
      ✓ should return array
    p5.prototype.unhex
      ✓ should be a function
      ✓ should return the integer representation of hex
      ✓ should return the NaN for empty string
      - should return the NaN for invalid hex string
      ✓ should return array of numbers
  String functions
    p5.prototype.join
      ✓ should be a function
      ✓ should return joined string
    p5.prototype.match
      ✓ should be a function
      ✓ should return correct index of match strings
    p5.prototype.matchAll
      ✓ should be a function
      ✓ should return correct array of strings
    p5.prototype.nf
      ✓ should be a function
      ✓ should return correct string
      ✓ should return correct string
    p5.prototype.nfc
      ✓ should be a function
      ✓ should return correct string
      ✓ should return correct string
    p5.prototype.nfp
      ✓ should be a function
      ✓ should return correct string
      ✓ should return correct string
    p5.prototype.nfs
      ✓ should be a function
      ✓ should return correct string
      ✓ should return correct string
    p5.prototype.split
      ✓ should be a function
      ✓ should return correct index of match strings
    p5.prototype.splitTokens
      ✓ should be a function
      ✓ should return correct index of match strings
    p5.prototype.trim
      ✓ should be a function
      ✓ should return correct strings
  time and date
    p5.prototype.year
      ✓ should be a function
      ✓ should return this year
    p5.prototype.day
      ✓ should be a function
      ✓ should return todays day
    p5.prototype.month
      ✓ should be a function
      ✓ should return today's month
    p5.prototype.hour
      ✓ should be a function
      ✓ should return this hour
    p5.prototype.second
      ✓ should be a function
      ✓ should return this second
    p5.prototype.minute
      ✓ should be a function
      ✓ should return a number that is this minute
    p5.prototype.millis
      ✓ should be a function
      ✓ result should be a number
      ✓ result should be greater than running time (51ms)
      ✓ result should be > newResult (51ms)
  3D Primitives
    p5.prototype.plane
      ✓ should be a function
      ✓ no friendly-err-msg. missing height param #1. (86ms)
      ✓ wrong param type at #0
      ✓ no friendly-err-msg. no parameters (82ms)
    p5.prototype.box
      ✓ should be a function
      ✓ wrong param type at #0 and #2
      ✓ no friendly-err-msg. missing height, depth; param #1, #2. (82ms)
      ✓ no friendly-err-msg. missing depth param #2. (81ms)
      ✓ no friendly-err-msg. no parameters (85ms)
    p5.prototype.sphere
      ✓ should be a function
      ✓ wrong param type at #0
      ✓ no friendly-err-msg. no parameters (105ms)
    p5.prototype.cylinder
      ✓ should be a function
      ✓ wrong param type at #0
      ✓ no friendly-err-msg. missing height; param #1 (87ms)
      - wrong param type at #4
      ✓ no friendly-err-msg. no parameters (85ms)
    p5.prototype.cone
      ✓ should be a function
      ✓ wrong param type at #0 and #1
      ✓ no friendly-err-msg. missing height; param #1 (83ms)
      - wrong param type at #4

      ✓ no friendly-err-msg. no parameters (83ms)
    p5.prototype.ellipsoid

      ✓ should be a function

      ✓ wrong param type at #0 and #1

      ✓ no friendly-err-msg. missing param #1 #2 (90ms)

      ✓ no friendly-err-msg. no parameters (89ms)
    p5.prototype.torus

      ✓ should be a function

      ✓ wrong param type at #0

      ✓ no friendly-err-msg. missing param #1 (98ms)
      ✓ no friendly-err-msg. no parameters (90ms)
    p5.RendererGL.prototype.ellipse
      ✓ should be a function
      ✓ no friendly-err-msg (89ms)
      ✓ missing param #2
      ✓ missing param #2
      ✓ wrong param type at #0
Cannot apply a stroke to an ellipse with more than 50 detail
      ✓ no friendly-err-msg. detail parameter > 50
    p5.RendererGL.prototype.arc
      ✓ should be a function
      ✓ no friendly-err-msg (84ms)
      ✓ missing param #4, #5
      ✓ wrong param type at #0
Cannot apply a stroke to an arc with more than 50 detail
      ✓ no friendly-err-msg. detail parameter > 50

      ✓ no friendly-err-msg. default mode (82ms)
  Interaction
    p5.prototype.orbitControl

      ✓ should be a function

      ✓ missing params. no friendly-err-msg

      ✓ wrong param type #0
    p5.prototype.debugMode

      ✓ should be a function

      ✓ missing params. no friendly-err-msg

      ✓ wrong param type #0

      ✓ wrong param type #2

      ✓ wrong param type #2
    p5.prototype.noDebugMode

      ✓ should be a function
  p5.Matrix
    construction
      ✓ new p5.Matrix()
      ✓ new p5.Matrix(array)
      ✓ new p5.Matrix(mat3)
      ✓ identity()
    set
      ✓ p5.Matrix
      ✓ array
      ✓ arguments
    get / copy
      ✓ get
      ✓ copy
    mult
      ✓ self
      ✓ p5.Matrix
      ✓ array
      ✓ arguments
    apply
      ✓ self
      ✓ p5.Matrix
      ✓ array
      ✓ arguments
    scale
      ✓ p5.Vector
      ✓ array
      ✓ arguments
    rotate
      ✓ p5.Vector
      ✓ array
      ✓ arguments
  p5.Camera
    createCamera()

      ✓ creates a p5.Camera object

      ✓ createCamera attaches p5.Camera to renderer
    Rotation

      ✓ Pan() with positive parameter sets correct matrix w/o changing     eyeXYZ or upXYZ

      ✓ Pan() with negative parameter sets correct matrix w/o changing     eyeXYZ or upXYZ

      ✓ Pan(0) sets correct matrix w/o changing eyeXYZ or upXYZ

      ✓ Tilt() with positive parameter sets correct Matrix w/o     changing eyeXYZ

      ✓ Tilt() with negative parameter sets correct matrix w/o     changing eyeXYZ

      ✓ Tilt(0) sets correct matrix w/o changing eyeXYZ

      ✓ LookAt() should set centerXYZ without changing eyeXYZ or     upXYZ
    Rotation with angleMode(DEGREES)

      ✓ Pan() with positive parameter sets correct matrix w/o changing     eyeXYZ or upXYZ

      ✓ Tilt() with positive parameter sets correct Matrix w/o     changing eyeXYZ
    Position / Orientation

      ✓ Move() with positive parameters sets correct matrix

      ✓ Move() with negative parameters sets correct matrix

      ✓ Move(0,0,0) sets correct matrix

      ✓ SetPosition() with positive parameters sets correct matrix

      ✓ SetPosition() with negative parameters sets correct matrix

      ✓ SetPosition(0,0,0) sets correct matrix

      ✓ _orbit(1,0,0) sets correct matrix

      ✓ _orbit(0,1,0) sets correct matrix

      ✓ _orbit(0,0,1) sets correct matrix

      ✓ _orbit(-1,0,0) sets correct matrix

      ✓ _orbit(0,-1,0) sets correct matrix

      ✓ _orbit(0,0,-1) sets correct matrix

      ✓ _orbit() ensures altitude phi <= PI

      ✓ _orbit() ensures altitude phi > 0

      ✓ _orbit() ensures radius > 0
      Camera()

        ✓ Camera() with positive parameters sets eye, center, and       up XYZ properties

        ✓ Camera() with negative parameters sets eye, center, and       up XYZ properties
    Projection
      ortho()

        ✓ ortho() sets renderer uPMatrix

        ✓ ortho() sets projection matrix correctly

        ✓ ortho() with no parameters specified (sets default)

        ✓ ortho() with sets cameraType to custom
      perspective()

        ✓ perspective() sets renderer uPMatrix

        ✓ perspective() sets projection matrix correctly

        ✓ perspective() with no parameters specified (sets default)

        ✓ perspective() with no parameters sets cameraType to default
      frustum()

        ✓ frustum() sets renderer uPMatrix

        ✓ frustum() sets projection matrix correctly

        ✓ frustum() with no parameters specified (sets default)

        ✓ frustum() sets cameraType to custom
    Helper Functions

      ✓ copy() returns a new p5.Camera object

      ✓ _getLocalAxes() returns three normalized, orthogonal vectors
    RendererGL Current Camera

      ✓ _isActive() returns true for a camera created with createCamera(),     and false for another p5.Camera

      ✓ setCamera() correctly sets RendererGL current camera

      ✓ Camera's Renderer is correctly set after setAttributes
  p5.RendererGL
    createCanvas(w, h, WEBGL)

      ✓ creates a p5.RendererGL renderer

      ✓ default alpha attribute should be false

      ✓ alpha attribute can be set to true with setAttributes
    default stroke shader
      ✓ check activate and deactivating fill and stroke
    push() and pop() work in WEBGL Mode

      ✓ push/pop and translation works as expected in WEBGL Mode

      ✓ push/pop and directionalLight() works

      ✓ push/pop and ambientLight() works

      ✓ push/pop and pointLight() works

      ✓ push/pop and specularColor() works

      ✓ push/pop and spotLight() works

      ✓ push/pop and noLights() works

      ✓ push/pop and texture() works

      ✓ push/pop and shader() works with fill

      ✓ push/pop builds/unbuilds stack properly
    loadpixels()

      ✓ loadPixels color check

      ✓ get() singlePixel color and size, with loadPixels
    get()

      ✓ get() size check

      ✓ get() can create p5.Image

      ✓ get() singlePixel color and size
    GL Renderer clear()

      ✓ webgl graphics background draws into webgl canvas (188ms)
      1) transparent GL graphics with GL canvas
      ✓ clear color with rgba arguments
      2) semi-transparent GL graphics with GL canvas
      ✓ webgl graphics background draws into 2D canvas


      ✓ transparent GL graphics with 2D canvas


      ✓ semi-transparent GL graphics with 2D canvas
    blendMode()

      ✓ blendMode sets _curBlendMode correctly

BURN, OVERLAY, HARD_LIGHT, SOFT_LIGHT, and DODGE only work for blendMode in 2D mode.
BURN, OVERLAY, HARD_LIGHT, SOFT_LIGHT, and DODGE only work for blendMode in 2D mode.
BURN, OVERLAY, HARD_LIGHT, SOFT_LIGHT, and DODGE only work for blendMode in 2D mode.
BURN, OVERLAY, HARD_LIGHT, SOFT_LIGHT, and DODGE only work for blendMode in 2D mode.
BURN, OVERLAY, HARD_LIGHT, SOFT_LIGHT, and DODGE only work for blendMode in 2D mode.
      ✓ blendMode doesnt change when mode unavailable in 3D

      ✓ blendModes change pixel colors as expected (227ms)
    BufferDef

      ✓ render buffer properties are correctly set (105ms)
    tint() in WEBGL mode

      ✓ default tint value is set and not null

      ✓ tint value is modified correctly when tint() is called

      ✓ tint should be reset after draw loop (52ms)
  p5.Shader
    Shader

      ✓ Light Shader

      ✓ Color Shader definition

      ✓ Immediate Mode Shader definition

      ✓ Normal Shader definition

      ✓ Color Shader is set after fill()

      ✓ Normal Shader is set after normalMaterial()

      ✓ Light shader set after ambientMaterial()

      ✓ Light shader set after specularMaterial()

      ✓ Light shader set after emissiveMaterial()

      ✓ Able to setUniform empty arrays

      ✓ Able to set shininess

      ✓ Shader is reset after resetShader is called

      ✓ isTextureShader returns true if there is a sampler

      ✓ isTextureShader returns false if there is no sampler

      ✓ isLightShader returns true if there are lighting uniforms

      ✓ isLightShader returns false if there are no lighting uniforms

      ✓ isNormalShader returns true if there is a normal attribute

      ✓ isNormalShader returns false if there is no normal attribute

      ✓ isStrokeShader returns true if there is a stroke weight uniform

      ✓ isStrokeShader returns false if there is no stroke weight uniform
  p5.Texture
    p5.Texture


      ✓ Create and cache a single texture with p5.Image
      ✓ Create and cache multiple p5.Image textures
      ✓ Set filter mode to linear
      ✓ Set filter mode to nearest
      ✓ Set wrap mode to clamp
      ✓ Set wrap mode to repeat
      ✓ Set wrap mode to mirror
      ✓ Set textureMode to NORMAL


      ✓ Set textureMode to IMAGE


      ✓ Set global wrap mode to clamp


      ✓ Set global wrap mode to repeat


      ✓ Set global wrap mode to mirror
  light
    Light

      ✓ lightFalloff is initialised and set properly

      ✓ specularColor is initialised and set properly

      ✓ noLights works
    spotlight inputs

      ✓ default

      ✓ color,positions,directions

      ✓ color,positions,directions,angle

      ✓ color,positions,directions,angle,conc

      ✓ c1,c2,c3,positions,directions

      ✓ color,p1,p2,p3,directions

      ✓ color,positions,r1,r2,r3

      ✓ c1,c2,c3,positions,directions,angle

      ✓ color,p1,p2,p3,directions,angle

      ✓ color,positions,r1,r2,r3,angle

      ✓ c1,c2,c3,positions,directions,angle,conc

      ✓ color,p1,p2,p3,directions,angle,conc

      ✓ color,positions,r1,r2,r3,angle,conc

      ✓ c1,c2,c3,p1,p2,p3,directions

      ✓ c1,c2,c3,positions,r1,r2,r3

      ✓ color,p1,p2,p3,r1,r2,r3

      ✓ c1,c2,c3,p1,p2,p3,directions,angle

      ✓ c1,c2,c3,positions,r1,r2,r3,angle
      ✓ color,p1,p2,p3,r1,r2,r3,angle
      ✓ c1,c2,c3,p1,p2,p3,directions,angle,conc
      ✓ c1,c2,c3,positions,r1,r2,r3,angle,conc
      ✓ color,p1,p2,p3,r1,r2,r3,angle,conc
      ✓ c1,c2,c3,p1,p2,p3,r1,r2,r3
      ✓ c1,c2,c3,p1,p2,p3,r1,r2,r3,angle

      ✓ c1,c2,c3,p1,p2,p3,r1,r2,r3,angle,conc
  Test in preload() with success callback
    ✓ Load asynchronously and use success callback
  setup() after preload() with success callback
    ✓ should be loaded if preload() finished
  setup() after preload() without success callback
    ✓ should be loaded now preload() finished
  Test in preload() with success callback
    ✓ Load asynchronously and use success callback
  setup() after preload() with success callback
    ✓ should be loaded if preload() finished
    ✓ gifProperties should be correct after preload
    ✓ should be able to modify gifProperties state
  1635 passing (17s)
  10 pending
  2 failing
  1) p5.RendererGL
       GL Renderer clear()
         transparent GL graphics with GL canvas:

      AssertionError: expected [ 0, 0, 0, 255 ] to deeply equal [ 0, 255, 255, 255 ]
      + expected - actual

       [
         0
      -  0
      -  0
         255
      +  255
      +  255
       ]

      at Function.assert.deepEqual (http://localhost:9001/node_modules/chai/chai.js:2367:32)
      at Context.<anonymous> (unit/webgl/p5.RendererGL.js:348:14)

  2) p5.RendererGL
       GL Renderer clear()
         semi-transparent GL graphics with GL canvas:

      AssertionError: expected [ 100, 100, 100, 255 ] to deeply equal [ 39, 194, 194, 194 ]
      + expected - actual

       [
      -  100
      -  100
      -  100
      -  255
      +  39
      +  194
      +  194
      +  194
       ]

      at Function.assert.deepEqual (http://localhost:9001/node_modules/chai/chai.js:2367:32)
      at Context.<anonymous> (unit/webgl/p5.RendererGL.js:372:14)

Warning: [object Object] Use --force to continue.

Aborted due to warnings.
[The command completed with exit code 3.]
[Current working directory: /workspace/p5.js]
[Python interpreter: /usr/bin/python]
[Command finished with exit code 3]