From 024f3b778c58bedd9da9a188638456e5a4ffdc8f Mon Sep 17 00:00:00 2001 From: Mike Gerwitz Date: Fri, 14 Oct 2011 22:05:22 -0400 Subject: [PATCH] Began adding FallbackMemberBuilder test case This is the first test case to use the new basic xUnit-style system. This system is likely to evolve over time. Right now it's purely for setUp, organizational and output purposes. --- lib/FallbackMemberBuilder.js | 77 ++++++++++++++++++++++++++++ test/FallbackMemberBuilderTest.js | 84 +++++++++++++++++++++++++++++++ test/MemberBuilder-MethodTest.js | 2 +- 3 files changed, 162 insertions(+), 1 deletion(-) create mode 100644 lib/FallbackMemberBuilder.js create mode 100644 test/FallbackMemberBuilderTest.js diff --git a/lib/FallbackMemberBuilder.js b/lib/FallbackMemberBuilder.js new file mode 100644 index 0000000..5408268 --- /dev/null +++ b/lib/FallbackMemberBuilder.js @@ -0,0 +1,77 @@ +/** + * Handles building members (properties, methods) in a pre-ES5 environment + * + * Copyright (C) 2010 Mike Gerwitz + * + * This file is part of ease.js. + * + * ease.js is free software: you can redistribute it and/or modify it under the + * terms of the GNU Lesser General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * @author Mike Gerwitz + * @package core + */ + +/** + * Supertype + */ +var MemberBuilder = require( __dirname + '/MemberBuilder' ); + +/** + * Responsible for building class members + */ +module.exports = exports = function FallbackMemberBuilder( + wrap_method, wrap_override +) +{ + // permit omitting 'new' keyword + if ( !( this instanceof module.exports ) ) + { + return new module.exports( wrap_method, wrap_override ); + } + + // invoke parent constructor + module.exports.prototype.constructor.call( this, + wrap_method, wrap_override + ); +}; + +// inherit from MemberBuilder +module.exports.prototype = new MemberBuilder(); +module.exports.constructor = module.exports; + + +/** + * Getters are unsupported in a pre-ES5 environment + * + * Simply throw an exception, as it clearly represents that the developer did + * not account for the possibility that their software may have been executed in + * a pre-ES5 environment. + */ +exports.prototype.buildGetter = function() +{ + throw Error( 'Getters are unsupported in this environment' ); +}; + + +/** + * Setters are unsupported in a pre-ES5 environment + * + * Simply throw an exception, as it clearly represents that the developer did + * not account for the possibility that their software may have been executed in + * a pre-ES5 environment. + */ +exports.prototype.buildSetter = function() +{ + throw Error( 'Setters are unsupported in this environment' ); +}; diff --git a/test/FallbackMemberBuilderTest.js b/test/FallbackMemberBuilderTest.js new file mode 100644 index 0000000..c719177 --- /dev/null +++ b/test/FallbackMemberBuilderTest.js @@ -0,0 +1,84 @@ +/** + * Tests fallback method builder (for pre-ES5 environment) + * + * Note that this test case can also be run in an ES5 environment. + * + * Copyright (C) 2010 Mike Gerwitz + * + * This file is part of ease.js. + * + * ease.js is free software: you can redistribute it and/or modify it under the + * terms of the GNU Lesser General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * @author Mike Gerwitz + * @package test + */ + +require( './common' ).testCase( +{ + setUp: function() + { + // stub factories used for testing + var stubFactory = this.require( 'MethodWrapperFactory' )( + function( func ) { return func; } + ); + + this.sut = this.require( 'FallbackMemberBuilder' )( + stubFactory, stubFactory + ); + }, + + + 'Inherits from MemberBuilder': function() + { + this.assertOk( this.sut instanceof this.require( 'MemberBuilder' ), + 'FallbackMemberBuilder should inherit from MemberBuilder' + ); + }, + + + /** + * Getters and setters are unsupported in pre-ES5 environments + */ + 'buildGetter() and buildSetter() methods throw exceptions': function() + { + // getter test + try + { + this.sut.buildGetter(); + this.fail( 'Exception should have been called (getter)' ); + } + catch ( e ) + { + this.assertOk( + e.message.match( /unsupported/ ), + 'Incorrect exception thrown (getter)' + ); + } + + // setter test + try + { + this.sut.buildSetter(); + this.fail( 'Exception should have been called (getter)' ); + } + catch ( e ) + { + this.assertOk( + e.message.match( /unsupported/ ), + 'Incorrect exception thrown (setter)' + ); + } + }, +}); + diff --git a/test/MemberBuilder-MethodTest.js b/test/MemberBuilder-MethodTest.js index 228adc0..73f5117 100644 --- a/test/MemberBuilder-MethodTest.js +++ b/test/MemberBuilder-MethodTest.js @@ -28,7 +28,7 @@ var common = require( './common' ), util = common.require( 'util' ), // stub factories used for testing - stubFactory= common.require( '/MethodWrapperFactory' )( + stubFactory = common.require( '/MethodWrapperFactory' )( function( func ) { return func; } ),