Skip to content

Commit

Permalink
Publish 0.1.5
Browse files Browse the repository at this point in the history
  • Loading branch information
Kevin Malakoff committed Sep 18, 2012
1 parent 44f5497 commit 0aad41b
Show file tree
Hide file tree
Showing 16 changed files with 1,144 additions and 8 deletions.
2 changes: 1 addition & 1 deletion RELEASE_NOTES.md
Expand Up @@ -3,4 +3,4 @@ Please refer to the following release notes when upgrading your version of Backb
## 0.1.5

* added AMD loader.
* redefined mixin-js-core to mixin-js. You will need to check for the components being added independently.
* redefined mixin-js-core to mixin-js. You will need to check that optional components are bundled after load (or just know whether you are loading the full version or core).
8 changes: 7 additions & 1 deletion test/all_tests.html
Expand Up @@ -18,14 +18,20 @@ <h1 class="qunit-header">Mixin.js - Mixin Tests</h1>
<iframe src="core/test.min.html" scrolling="auto" frameborder="0"></iframe>
<iframe src="core/test-amd.html" scrolling="auto" frameborder="0"></iframe>
<iframe src="mixin-auto-memory/test.html" scrolling="auto" frameborder="0"></iframe>
<iframe src="mixin-auto-memory/test-amd.html" scrolling="auto" frameborder="0"></iframe>
<iframe src="mixin-flags/test.html" scrolling="auto" frameborder="0"></iframe>
<iframe src="mixin-flags/test-amd.html" scrolling="auto" frameborder="0"></iframe>
<iframe src="mixin-ref-count/test.html" scrolling="auto" frameborder="0"></iframe>
<iframe src="mixin-ref-count/test-amd.html" scrolling="auto" frameborder="0"></iframe>
<iframe src="mixin-subscriptions/test.html" scrolling="auto" frameborder="0"></iframe>
<iframe src="mixin-subscriptions/test-amd.html" scrolling="auto" frameborder="0"></iframe>
<iframe src="mixin-subscriptions/test.min.html" scrolling="auto" frameborder="0"></iframe>
<iframe src="mixin-timeouts/test.html" scrolling="auto" frameborder="0"></iframe>
<iframe src="mixin-timeouts/test-amd.html" scrolling="auto" frameborder="0"></iframe>
<iframe src="packaging/test-bundled.html" scrolling="auto" frameborder="0"></iframe>
<iframe src="packaging/test-unbundled.html" scrolling="auto" frameborder="0"></iframe>
<iframe src="lodash/test.html" scrolling="auto" frameborder="0"></iframe>
<iframe src="lodash/test-bundled.html" scrolling="auto" frameborder="0"></iframe>
<iframe src="lodash/test-unbundled.html" scrolling="auto" frameborder="0"></iframe>
</div>

<div class="test-block">
Expand Down
2 changes: 1 addition & 1 deletion test/core/test-amd.coffee
Expand Up @@ -7,7 +7,7 @@ $(->
_ or= window._

test("TEST DEPENDENCY MISSING", ->
ok(!!Mixin); ok(!!_)
ok(!!_); ok(!!Mixin)
)

test("Mixin availability and basic scenario", ->
Expand Down
2 changes: 1 addition & 1 deletion test/core/test.coffee
Expand Up @@ -9,7 +9,7 @@ $(->
_ = Mixin._ unless _

test("TEST DEPENDENCY MISSING", ->
ok(!!Mixin); ok(!!_)
ok(!!_); ok(!!Mixin)
)

test("Mixin availability and basic scenario", ->
Expand Down
335 changes: 335 additions & 0 deletions test/mixin-auto-memory/test-amd.coffee

Large diffs are not rendered by default.

32 changes: 32 additions & 0 deletions test/mixin-auto-memory/test-amd.html
@@ -0,0 +1,32 @@
<!DOCTYPE HTML>
<html>
<head>
<title>Mixin.js Test Suite Auto Memory (AMD)</title>
<link rel="stylesheet" href="../vendor/qunit/qunit.css" type="text/css" media="screen" />
<script type="text/javascript" src="../vendor/qunit/jquery.js"></script>
<script type="text/javascript" src="../vendor/qunit/qunit.js"></script>
<script type="text/javascript" src="../vendor/qunit/jslitmus.js"></script>

<script src="../vendor/require.js"></script>
<script type="text/javascript">
require.config({
paths: {
'underscore': "../../vendor/underscore-1.3.3",
'mixin-js-core': "../../mixin-js-core",
'mixin-js-auto-memory': "../../lib/mixin-js-auto-memory"
}
});
</script>

<script type="text/javascript" src="build/test-amd.js"></script>
</head>
<body>
<div>
<h1 id="qunit-header">Mixin.js Test Suite Auto Memory (AMD)</h1>
<h2 id="qunit-banner"></h2>
<h2 id="qunit-userAgent"></h2>
<ol id="qunit-tests"></ol>
</div>
<script type="text/javascript">QUnit.done = function(failures, total) {if (!total) { $('#qunit-banner').removeClass('qunit-pass').addClass('qunit-fail'); throw 'Warning: no tests run'}}</script>
</body>
</html>
3 changes: 1 addition & 2 deletions test/mixin-auto-memory/test.coffee
Expand Up @@ -12,8 +12,7 @@ $(->
_ = Mixin._ unless _

test("TEST DEPENDENCY MISSING", ->
ok(!!Mixin); ok(!!Mixin.AutoMemory)
ok(!!_)
ok(!!Mixin); ok(!!Mixin.AutoMemory); ok(!!_)
)

test("Use case: autoProperty common usage", ->
Expand Down
89 changes: 89 additions & 0 deletions test/mixin-flags/test-amd.coffee
@@ -0,0 +1,89 @@
$(->
module("mixin-js-amd.js")

# library and dependencies
require(['mixin-js-core', 'mixin-js-flags'], (_Mixin, Mixin) ->
Mixin.DEBUG = true

test("TEST DEPENDENCY MISSING", ->
ok(!!Mixin); ok(!!Mixin.Flags)
)

test("Use case: no initialization flags and basic usage", ->
class ClassWithFlags
constructor: ->
Mixin.in(this, 'Flags')

instance = new ClassWithFlags()
equal(instance.flags(), 0, 'default is flags 0')

flags = instance.flags(1<<0|1<<1)
equal(flags, 1<<0|1<<1, 'flags are now 1<<0|1<<1')
equal(instance.flags(), 1<<0|1<<1, 'flags are now 1<<0|1<<1')
equal(instance.hasFlags(1<<0), true, 'flags bit 1<<0')
equal(instance.hasFlags(1<<1), true, 'flags bit 1<<1')
equal(instance.hasFlags(1<<2), false, 'flags bit 1<<2')

flags = instance.resetFlags(1<<0)
equal(flags, 1<<1, 'flags are now 1<<1')
equal(instance.flags(), 1<<1, 'flags are now 1<<1')
equal(instance.hasFlags(1<<0), false, 'flags bit 1<<0')
equal(instance.hasFlags(1<<1), true, 'flags bit 1<<1')
equal(instance.hasFlags(1<<2), false, 'flags bit 1<<2')

flags = instance.setFlags(1<<3|1<<4)
equal(flags, 1<<1|1<<3|1<<4, 'flags are now 1<<1|1<<3|1<<4')
equal(instance.flags(), 1<<1|1<<3|1<<4, 'flags are now 1<<1|1<<3|1<<4')
equal(instance.hasFlags(1<<0), false, 'flags bit 1<<0')
equal(instance.hasFlags(1<<1), true, 'flags bit 1<<1')
equal(instance.hasFlags(1<<2), false, 'flags bit 1<<2')
equal(instance.hasFlags(1<<3), true, 'flags bit 1<<3')
equal(instance.hasFlags(1<<4), true, 'flags bit 1<<4')
)

test("Use case: initialization flags", ->
class ClassWithInitialzationFlags
constructor: ->
Mixin.in(this, 'Flags', 3)

instance = new ClassWithInitialzationFlags()
equal(instance.flags(), 3, 'flags are initialized with 3')
)

test("Use case: flags and change callback", ->
class ClassWithFlagsAndCallback
constructor: ->
@change_count = 0
Mixin.in(this, 'Flags', 0, => @change_count++)

instance = new ClassWithFlagsAndCallback()
equal(instance.change_count, 0, 'no changes yet')
instance.flags(0)
equal(instance.change_count, 0, 'no changes yet')

instance.flags(1<<1|1<<2)
equal(instance.flags(), 1<<1|1<<2, 'flags are now 1<<1|1<<2')
equal(instance.change_count, 1, '1 change')
instance.flags(1<<1|1<<2)
equal(instance.flags(), 1<<1|1<<2, 'flags are 1<<1|1<<2 still')
equal(instance.change_count, 1, '1 change still')

instance.setFlags(1<<3)
equal(instance.flags(), 1<<1|1<<2|1<<3, 'flags are now 1<<1|1<<2|1<<3')
equal(instance.change_count, 2, '2 changes')
instance.setFlags(1<<2)
equal(instance.flags(), 1<<1|1<<2|1<<3, 'flags are 1<<1|1<<2|1<<3 still')
equal(instance.change_count, 2, '2 changes still')

instance.resetFlags(1<<4)
equal(instance.flags(), 1<<1|1<<2|1<<3, 'flags are 1<<1|1<<2|1<<3 still')
equal(instance.change_count, 2, '2 changes still')
instance.resetFlags(1<<1)
equal(instance.flags(), 1<<2|1<<3, 'flags are 1<<2|1<<3')
equal(instance.change_count, 3, '3 changes')
instance.resetFlags(1<<1)
equal(instance.flags(), 1<<2|1<<3, 'flags are 1<<2|1<<3 still')
equal(instance.change_count, 3, '3 changes still')
)
)
)
31 changes: 31 additions & 0 deletions test/mixin-flags/test-amd.html
@@ -0,0 +1,31 @@
<!DOCTYPE HTML>
<html>
<head>
<title>Mixin.js Test Suite Flags (AMD)</title>
<link rel="stylesheet" href="../vendor/qunit/qunit.css" type="text/css" media="screen" />
<script type="text/javascript" src="../vendor/qunit/jquery.js"></script>
<script type="text/javascript" src="../vendor/qunit/qunit.js"></script>
<script type="text/javascript" src="../vendor/qunit/jslitmus.js"></script>

<script src="../vendor/require.js"></script>
<script type="text/javascript">
require.config({
paths: {
'mixin-js-core': "../../mixin-js-core",
'mixin-js-flags': "../../lib/mixin-js-flags"
}
});
</script>

<script type="text/javascript" src="build/test-amd.js"></script>
</head>
<body>
<div>
<h1 id="qunit-header">Mixin.js Test Suite Flags (AMD)</h1>
<h2 id="qunit-banner"></h2>
<h2 id="qunit-userAgent"></h2>
<ol id="qunit-tests"></ol>
</div>
<script type="text/javascript">QUnit.done = function(failures, total) {if (!total) { $('#qunit-banner').removeClass('qunit-pass').addClass('qunit-fail'); throw 'Warning: no tests run'}}</script>
</body>
</html>
70 changes: 70 additions & 0 deletions test/mixin-ref-count/test-amd.coffee
@@ -0,0 +1,70 @@
$(->
module("mixin-js-amd.js")

# library and dependencies
require(['mixin-js-core', 'mixin-js-ref-count'], (_Mixin, Mixin) ->
Mixin.DEBUG = true

test("TEST DEPENDENCY MISSING", ->
ok(!!Mixin); ok(!!Mixin.RefCount)
)

test("Use case: adding ref counting to a class", ->
class SomeClass
constructor: ->
Mixin.in(this, 'RefCount')
destroy: ->
Mixin.out(this, 'RefCount')

# expected scenario
instance = new SomeClass()
equal(instance.refCount(), 1, 'refcount is started at 1')
instance.retain()
equal(instance.refCount(), 2, 'retain: ref count is now 2')
instance.release()
equal(instance.refCount(), 1, 'release: ref count is now 1')
instance.release()
equal(instance.refCount(), 0, 'release: ref count is now 0')

# right into the danger zone
raises(instance.retain, Error, 'Mixin.RefCount: ref_count is corrupt: 0')
equal(instance.refCount(), 0, 'release: ref count is still 0')
raises(instance.release, Error, 'Mixin.RefCount: ref_count is corrupt: 0')
equal(instance.refCount(), 0, 'release: ref count is still 0')

# cleanup to avoid memory leaks
instance.destroy()
)

test("Use case: adding ref counting to a class with auto destroy", ->
class ClassWithAutoDestroy
constructor: ->
Mixin.in(this, 'RefCount', => @destroy())
@is_destroyed = false
destroy: ->
throw new Error('already destroyed') if @is_destroyed
@is_destroyed = true

# expected scenario
instance = new ClassWithAutoDestroy()
equal(instance.refCount(), 1, 'refcount is started at 1')
instance.retain()
equal(instance.refCount(), 2, 'retain: ref count is now 2')
instance.release()
equal(instance.refCount(), 1, 'release: ref count is now 1')
equal(instance.is_destroyed, false, 'release: not destroyed')
instance.release()
equal(instance.refCount(), 0, 'release: ref count is now 0')
equal(instance.is_destroyed, true, 'release: now destroyed')

# highway to the danger zone
raises(instance.retain, Error, 'Mixin.RefCount: ref_count is corrupt: 0')
equal(instance.refCount(), 0, 'release: ref count is still 0')
raises(instance.release, Error, 'Mixin.RefCount: ref_count is corrupt: 0')
equal(instance.refCount(), 0, 'release: ref count is still 0')

# cleanup to avoid memory leaks
Mixin.out(instance, 'RefCount')
)
)
)
31 changes: 31 additions & 0 deletions test/mixin-ref-count/test-amd.html
@@ -0,0 +1,31 @@
<!DOCTYPE HTML>
<html>
<head>
<title>Mixin.js Test Suite Ref Count (AMD)</title>
<link rel="stylesheet" href="../vendor/qunit/qunit.css" type="text/css" media="screen" />
<script type="text/javascript" src="../vendor/qunit/jquery.js"></script>
<script type="text/javascript" src="../vendor/qunit/qunit.js"></script>
<script type="text/javascript" src="../vendor/qunit/jslitmus.js"></script>

<script src="../vendor/require.js"></script>
<script type="text/javascript">
require.config({
paths: {
'mixin-js-core': "../../mixin-js-core",
'mixin-js-ref-count': "../../lib/mixin-js-ref-count"
}
});
</script>

<script type="text/javascript" src="build/test-amd.js"></script>
</head>
<body>
<div>
<h1 id="qunit-header">Mixin.js Test Suite Ref Count (AMD)</h1>
<h2 id="qunit-banner"></h2>
<h2 id="qunit-userAgent"></h2>
<ol id="qunit-tests"></ol>
</div>
<script type="text/javascript">QUnit.done = function(failures, total) {if (!total) { $('#qunit-banner').removeClass('qunit-pass').addClass('qunit-fail'); throw 'Warning: no tests run'}}</script>
</body>
</html>

0 comments on commit 0aad41b

Please sign in to comment.