> p5@1.4.0 build /workspace/p5.js
> grunt build

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 "browserify" task
>> Bundle lib/p5.js created.

Running "browserify:min" (browserify) task
>> Bundle lib/p5.pre-min.js created.

Running "uglify:dist" (uglify) task
>> Destination lib/modules/p5Custom.min.js not written because src files were empty.
>> 1 files created 4.32 MB → 821.05 kB

Running "browserify:test" (browserify) task
>> Bundle lib/p5-test.js created.

Done.
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()
  color/p5.ColorConversion
    rgbaToHSBA
      ✓ rgba converts to hsba
      ✓ hsba converts to rgba
      ✓ 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
      ✓ hsba converts to hsla
    hsbaToRGBA
    hslaToRGBA
    rgbaToHSLA
    hslaToHSBA
    hsbaToHSLA
  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
   <response clipped><NOTE>Due to the max output limit, only part of the full response has been shown to you.</NOTE>
      ✓ should convert a number to true
      ✓ should return true for Infinity
      ✓ should convert 0 to false
      ✓ should convert a string to false
      ✓ should convert a string to false
      ✓ should convert "true" to true
      ✓ should return false for empty string
      ✓ should return array of boolean
    p5.prototype.byte
      ✓ should be a function
      ✓ should return 127 for 127
      ✓ should return -128 for 128
      ✓ should return 23 for 23.4
      ✓ should return 1 for true
      ✓ should return 23 for "23.4"
      ✓ should return NaN for invalid string
      ✓ should return array
      ✓ should be a function
    p5.prototype.char
      ✓ should return the char representation of the number
      ✓ should return the char representation of the string
      ✓ should return array
    p5.prototype.unchar
      ✓ should be a function
      ✓ should return the integer representation of char
      ✓ should return array of 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 (82ms)
      ✓ no friendly-err-msg. no parameters (83ms)
    p5.prototype.box
      ✓ should be a function
      ✓ wrong param type at #0 and #2 (85ms)
      ✓ no friendly-err-msg. missing height, depth; param #1, #2. (84ms)
      ✓ no friendly-err-msg. missing depth param #2. (82ms)
      ✓ no friendly-err-msg. no parameters (83ms)
    p5.prototype.sphere
      ✓ should be a function
      ✓ wrong param type at #0 (105ms)
      ✓ no friendly-err-msg. no parameters (99ms)
    p5.prototype.cylinder
      ✓ should be a function
      ✓ wrong param type at #0 (84ms)
      ✓ no friendly-err-msg. missing height; param #1 (95ms)
      - wrong param type at #4
      ✓ no friendly-err-msg. no parameters (82ms)
    p5.prototype.cone
      ✓ should be a function
      ✓ wrong param type at #0 and #1 (82ms)
      ✓ no friendly-err-msg. missing height; param #1 (84ms)
      - 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 (99ms)

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

      ✓ no friendly-err-msg. no parameters (93ms)
    p5.prototype.torus
      ✓ should be a function
      ✓ wrong param type at #0
      ✓ no friendly-err-msg. missing param #1 (91ms)
      ✓ no friendly-err-msg. no parameters (93ms)
    p5.RendererGL.prototype.ellipse
      ✓ should be a function
      ✓ no friendly-err-msg (89ms)
      ✓ missing param #2 (84ms)
      ✓ missing param #2 (83ms)
      ✓ wrong param type at #0 (83ms)
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 (86ms)
      ✓ missing param #4, #5
      ✓ wrong param type at #0 (82ms)
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 (85ms)
  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 (184ms)



      ✓ transparent GL graphics with GL canvas (186ms)


      ✓ clear color with rgba arguments



      ✓ semi-transparent GL graphics with GL canvas (188ms)

      ✓ 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 (224ms)
    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 (42ms)
  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
  1583 passing (14s)
  10 pending

Done.
[The command completed with exit code 0.]
[Current working directory: /workspace/p5.js]
[Python interpreter: /usr/bin/python]
[Command finished with exit code 0]