From 96704fdadd3c10e1ae8aa74f63d53bd7748be337 Mon Sep 17 00:00:00 2001 From: Luke Sneeringer Date: Wed, 22 Mar 2017 07:43:22 -0700 Subject: [PATCH 1/4] Throw TypeError if we get a Number to spanner.date. Fixes #2097. --- packages/spanner/src/codec.js | 4 ++++ packages/spanner/test/codec.js | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/packages/spanner/src/codec.js b/packages/spanner/src/codec.js index 9d4f2627677..1d1f0528e8d 100644 --- a/packages/spanner/src/codec.js +++ b/packages/spanner/src/codec.js @@ -26,6 +26,10 @@ var commonGrpc = require('@google-cloud/common-grpc'); var is = require('is'); function SpannerDate(value) { + if (is.number(value)) { + throw new TypeError('The spanner.date function accepts a Date object, ' + + 'or a string parseable by Date\'s constructor.'); + } if (is.undefined(value)) { value = new Date(); } diff --git a/packages/spanner/test/codec.js b/packages/spanner/test/codec.js index 625e7f5e27b..db389cb872c 100644 --- a/packages/spanner/test/codec.js +++ b/packages/spanner/test/codec.js @@ -53,6 +53,12 @@ describe('codec', function() { var spannerDate = new codec.SpannerDate(date); assert.strictEqual(spannerDate.value, date.toJSON().replace(/T.+/, '')); }); + + it('should choke on an integer', function() { + assert.throws(function() { + new codec.SpannerDate(2017); + }, /The spanner\.date function accepts a Date object,/); + }); }); describe('Float', function() { From 326c64ed5a02837d6034d71ddafa15ce8865eda3 Mon Sep 17 00:00:00 2001 From: Luke Sneeringer Date: Wed, 22 Mar 2017 09:08:36 -0700 Subject: [PATCH 2/4] Shift the Spanner.date check to multiple arguments. --- packages/spanner/src/codec.js | 8 +++++--- packages/spanner/test/codec.js | 4 ++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/spanner/src/codec.js b/packages/spanner/src/codec.js index 1d1f0528e8d..6a7d1cdc5b0 100644 --- a/packages/spanner/src/codec.js +++ b/packages/spanner/src/codec.js @@ -26,9 +26,11 @@ var commonGrpc = require('@google-cloud/common-grpc'); var is = require('is'); function SpannerDate(value) { - if (is.number(value)) { - throw new TypeError('The spanner.date function accepts a Date object, ' + - 'or a string parseable by Date\'s constructor.'); + if (arguments.length > 1) { + throw new TypeError( + 'The spanner.date function accepts a Date object, ' + + 'or a single argument parseable by Date\'s constructor.' + ); } if (is.undefined(value)) { value = new Date(); diff --git a/packages/spanner/test/codec.js b/packages/spanner/test/codec.js index db389cb872c..a84c2dd644c 100644 --- a/packages/spanner/test/codec.js +++ b/packages/spanner/test/codec.js @@ -54,9 +54,9 @@ describe('codec', function() { assert.strictEqual(spannerDate.value, date.toJSON().replace(/T.+/, '')); }); - it('should choke on an integer', function() { + it('should choke on multiple arguments', function() { assert.throws(function() { - new codec.SpannerDate(2017); + new codec.SpannerDate(2012, 3, 21); }, /The spanner\.date function accepts a Date object,/); }); }); From 580605b46b831c961d892d34b1835035fb7bff97 Mon Sep 17 00:00:00 2001 From: Stephen Sawchuk Date: Wed, 22 Mar 2017 12:56:01 -0400 Subject: [PATCH 3/4] code style [ci skip] --- packages/spanner/src/codec.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/spanner/src/codec.js b/packages/spanner/src/codec.js index 6a7d1cdc5b0..2c2ed904331 100644 --- a/packages/spanner/src/codec.js +++ b/packages/spanner/src/codec.js @@ -27,11 +27,12 @@ var is = require('is'); function SpannerDate(value) { if (arguments.length > 1) { - throw new TypeError( - 'The spanner.date function accepts a Date object, ' + - 'or a single argument parseable by Date\'s constructor.' - ); + throw new TypeError([ + 'The spanner.date function accepts a Date object or a', + 'single argument parseable by Date\'s constructor.' + ].join(' ')); } + if (is.undefined(value)) { value = new Date(); } From f0b53851af3884cdc4444442d8848b8716331f21 Mon Sep 17 00:00:00 2001 From: Stephen Sawchuk Date: Wed, 22 Mar 2017 12:57:44 -0400 Subject: [PATCH 4/4] code style --- packages/spanner/test/codec.js | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/packages/spanner/test/codec.js b/packages/spanner/test/codec.js index a84c2dd644c..940b132bde0 100644 --- a/packages/spanner/test/codec.js +++ b/packages/spanner/test/codec.js @@ -43,6 +43,17 @@ describe('codec', function() { }); describe('SpannerDate', function() { + it('should choke on multiple arguments', function() { + var expectedErrorMessage = [ + 'The spanner.date function accepts a Date object or a', + 'single argument parseable by Date\'s constructor.' + ].join(' '); + + assert.throws(function() { + new codec.SpannerDate(2012, 3, 21); + }, new RegExp(expectedErrorMessage)); + }); + it('should create an instance from a string', function() { var spannerDate = new codec.SpannerDate('08-20-1969'); assert.strictEqual(spannerDate.value, '1969-08-20'); @@ -53,12 +64,6 @@ describe('codec', function() { var spannerDate = new codec.SpannerDate(date); assert.strictEqual(spannerDate.value, date.toJSON().replace(/T.+/, '')); }); - - it('should choke on multiple arguments', function() { - assert.throws(function() { - new codec.SpannerDate(2012, 3, 21); - }, /The spanner\.date function accepts a Date object,/); - }); }); describe('Float', function() {