Sha256: 21e755bde3a08b1a85f35e525a04b6d1e01578d1db8b289a64475f2a37340646

Contents?: true

Size: 1.4 KB

Versions: 2

Compression:

Stored size: 1.4 KB

Contents

describe 'The Mixin System', ->

  window.Luca ||= {}

  Luca.mixin.namespace 'Luca.test_modules'

  Luca.test_modules =
    SecondMixin:
      __included: ()->
        window.secondMixinIncluded = true
      __initializer: ()->
        @trigger "second:mixin"
    FirstMixin:
      __initializer: ()->
        @trigger "first:mixin"
      __privateMethod: ()->
        true
      publicMethod: ()-> 
        true

  sampleView = Luca.register('Luca.components.FirstView')

  sampleView.mixesIn 'FirstMixin'

  sampleView.defines
    sampleMethod: ()->
      "sample"

  secondView = Luca.register("Luca.components.SecondView")
  secondView.extends 'Luca.components.FirstView'
  secondView.mixesIn 'SecondMixin'
  secondView.defines
    version: 2

  it "should omit the private methods defined on the mixin", ->
    sampleView = new Luca.components.FirstView
    expect( sampleView.__privateMethod ).not.toBeDefined()

  it "should extend the prototype with the mixins normal methods", ->
    sampleView = new Luca.components.FirstView
    expect( sampleView.publicMethod ).toBeDefined()

  it "should call the initializer for that module on the instance", ->
    secondView = new Luca.components.SecondView
    expect( secondView ).toHaveTriggered("second:mixin")

  it "should call the initializers up the prototype chain", ->
    secondView = new Luca.components.SecondView
    expect( secondView ).toHaveTriggered("first:mixin")

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
luca-0.9.65 spec/mixin_spec.coffee
luca-0.9.6 spec/mixin_spec.coffee