diff --git a/src/iam.js b/src/iam.js index fc6588ea1..829c4687d 100644 --- a/src/iam.js +++ b/src/iam.js @@ -63,6 +63,10 @@ var is = require('is'); * // subscription.iam */ function IAM(pubsub, id) { + if (pubsub.Promise) { + this.Promise = pubsub.Promise; + } + this.pubsub = pubsub; this.request = pubsub.request.bind(pubsub); this.id = id; diff --git a/src/index.js b/src/index.js index ec84e038c..df3e6e5da 100644 --- a/src/index.js +++ b/src/index.js @@ -103,6 +103,10 @@ function PubSub(options) { this.api = {}; this.auth = googleAuth(this.options); this.projectId = this.options.projectId || PROJECT_ID_PLACEHOLDER; + + if (this.options.promise) { + this.Promise = this.options.promise; + } } /** diff --git a/src/publisher.js b/src/publisher.js index f1b9c5adf..d91f3add1 100644 --- a/src/publisher.js +++ b/src/publisher.js @@ -53,6 +53,10 @@ var is = require('is'); * var publisher = topic.publisher(); */ function Publisher(topic, options) { + if (topic.Promise) { + this.Promise = topic.Promise; + } + options = extend( true, { diff --git a/src/snapshot.js b/src/snapshot.js index dbb587b12..ee12d5030 100644 --- a/src/snapshot.js +++ b/src/snapshot.js @@ -89,6 +89,10 @@ var is = require('is'); * }); */ function Snapshot(parent, name) { + if (parent.Promise) { + this.Promise = parent.Promise; + } + this.parent = parent; this.name = Snapshot.formatName_(parent.projectId, name); diff --git a/src/subscription.js b/src/subscription.js index 3f1cd0f95..ab58fbf33 100644 --- a/src/subscription.js +++ b/src/subscription.js @@ -155,6 +155,10 @@ var Snapshot = require('./snapshot.js'); * subscription.removeListener('message', onMessage); */ function Subscription(pubsub, name, options) { + if (pubsub.Promise) { + this.Promise = pubsub.Promise; + } + options = options || {}; this.pubsub = pubsub; diff --git a/src/topic.js b/src/topic.js index 3a9f582b9..d16d7dc74 100644 --- a/src/topic.js +++ b/src/topic.js @@ -51,6 +51,10 @@ var Publisher = require('./publisher.js'); * var topic = pubsub.topic('my-topic'); */ function Topic(pubsub, name) { + if (pubsub.Promise) { + this.Promise = pubsub.Promise; + } + this.name = Topic.formatName_(pubsub.projectId, name); this.parent = this.pubsub = pubsub; this.request = pubsub.request.bind(pubsub); diff --git a/test/iam.js b/test/iam.js index 5631e79bd..6d93bbe8d 100644 --- a/test/iam.js +++ b/test/iam.js @@ -36,6 +36,7 @@ describe('IAM', function() { var PUBSUB = { options: {}, + Promise: {}, request: util.noop, }; var ID = 'id'; @@ -53,6 +54,10 @@ describe('IAM', function() { }); describe('initialization', function() { + it('should localize pubsub.Promise', function() { + assert.strictEqual(iam.Promise, PUBSUB.Promise); + }); + it('should localize pubsub', function() { assert.strictEqual(iam.pubsub, PUBSUB); }); diff --git a/test/index.js b/test/index.js index f22487444..add40194a 100644 --- a/test/index.js +++ b/test/index.js @@ -109,7 +109,10 @@ describe('PubSub', function() { var PubSub; var PROJECT_ID = 'test-project'; var pubsub; - var OPTIONS = {projectId: PROJECT_ID}; + var OPTIONS = { + projectId: PROJECT_ID, + promise: {}, + }; var PUBSUB_EMULATOR_HOST = process.env.PUBSUB_EMULATOR_HOST; @@ -261,6 +264,10 @@ describe('PubSub', function() { it('should set isEmulator to false by default', function() { assert.strictEqual(pubsub.isEmulator, false); }); + + it('should localize a Promise override', function() { + assert.strictEqual(pubsub.Promise, OPTIONS.promise); + }); }); describe('createSubscription', function() { diff --git a/test/publisher.js b/test/publisher.js index e0c130504..f4e1a9abd 100644 --- a/test/publisher.js +++ b/test/publisher.js @@ -39,6 +39,7 @@ describe('Publisher', function() { var TOPIC_NAME = 'test-topic'; var TOPIC = { name: TOPIC_NAME, + Promise: {}, request: fakeUtil.noop, }; @@ -61,6 +62,10 @@ describe('Publisher', function() { assert(promisified); }); + it('should localize topic.Promise', function() { + assert.strictEqual(publisher.Promise, TOPIC.Promise); + }); + it('should localize the topic object', function() { assert.strictEqual(publisher.topic, TOPIC); }); diff --git a/test/snapshot.js b/test/snapshot.js index b09b5a07e..cd0348209 100644 --- a/test/snapshot.js +++ b/test/snapshot.js @@ -42,8 +42,9 @@ describe('Snapshot', function() { }; var SUBSCRIPTION = { - pubsub: PUBSUB, + Promise: {}, projectId: PROJECT_ID, + pubsub: PUBSUB, api: {}, createSnapshot: function() {}, seek: function() {}, @@ -81,6 +82,10 @@ describe('Snapshot', function() { assert(promisified); }); + it('should localize parent.Promise', function() { + assert.strictEqual(snapshot.Promise, SUBSCRIPTION.Promise); + }); + it('should localize the parent', function() { assert.strictEqual(snapshot.parent, SUBSCRIPTION); }); diff --git a/test/subscription.js b/test/subscription.js index eed5773b9..f45e0246c 100644 --- a/test/subscription.js +++ b/test/subscription.js @@ -72,6 +72,7 @@ describe('Subscription', function() { var PUBSUB = { projectId: PROJECT_ID, + Promise: {}, request: fakeUtil.noop, }; @@ -98,6 +99,10 @@ describe('Subscription', function() { assert(promisified); }); + it('should localize pubsub.Promise', function() { + assert.strictEqual(subscription.Promise, PUBSUB.Promise); + }); + it('should localize the pubsub object', function() { assert.strictEqual(subscription.pubsub, PUBSUB); }); diff --git a/test/topic.js b/test/topic.js index 9487f156a..4d3b865d5 100644 --- a/test/topic.js +++ b/test/topic.js @@ -65,6 +65,7 @@ describe('Topic', function() { var TOPIC_UNFORMATTED_NAME = TOPIC_NAME.split('/').pop(); var PUBSUB = { + Promise: {}, projectId: PROJECT_ID, createTopic: util.noop, request: util.noop, @@ -99,6 +100,10 @@ describe('Topic', function() { assert(promisified); }); + it('should localize pubsub.Promise', function() { + assert.strictEqual(topic.Promise, PUBSUB.Promise); + }); + it('should format the name', function() { var formattedName = 'a/b/c/d';