Move integration tests to their own module
diff --git a/.travis.yml b/.travis.yml
index ce7e86b..7bb6da4 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -15,18 +15,16 @@
# - http://docs.travis-ci.com/user/workers/standard-infrastructure/
sudo: false
-install:
- - go get -t -tags integration
- - go install github.com/mattn/go-sqlite3 # Precompile so test timing is accurate
-
before_script:
- mysql -e 'CREATE DATABASE squirrel;'
- psql -c 'CREATE DATABASE squirrel;' -U postgres
script:
- - go test -tags integration -args -driver sqlite3
- - go test -tags integration -args -driver mysql -dataSource travis@/squirrel
- - go test -tags integration -args -driver postgres -dataSource 'postgres://postgres@localhost/squirrel?sslmode=disable'
+ - go test
+ - cd integration
+ - go test -args -driver sqlite3
+ - go test -args -driver mysql -dataSource travis@/squirrel
+ - go test -args -driver postgres -dataSource 'postgres://postgres@localhost/squirrel?sslmode=disable'
notifications:
irc: "irc.freenode.net#masterminds"
diff --git a/integration/doc.go b/integration/doc.go
new file mode 100644
index 0000000..3796ab9
--- /dev/null
+++ b/integration/doc.go
@@ -0,0 +1,2 @@
+// This is a tests-only package.
+package integration
diff --git a/integration/go.mod b/integration/go.mod
new file mode 100644
index 0000000..8029ff8
--- /dev/null
+++ b/integration/go.mod
@@ -0,0 +1,14 @@
+module github.com/Masterminds/squirrel/integration
+
+go 1.12
+
+require (
+ github.com/Masterminds/squirrel v1.1.0
+ github.com/go-sql-driver/mysql v1.4.1
+ github.com/lib/pq v1.2.0
+ github.com/mattn/go-sqlite3 v1.13.0
+ github.com/stretchr/testify v1.4.0
+ google.golang.org/appengine v1.6.5 // indirect
+)
+
+replace github.com/Masterminds/squirrel => ../
diff --git a/integration/go.sum b/integration/go.sum
new file mode 100644
index 0000000..0bfcfa9
--- /dev/null
+++ b/integration/go.sum
@@ -0,0 +1,34 @@
+github.com/Masterminds/squirrel v1.1.0 h1:baP1qLdoQCeTw3ifCdOq2dkYc6vGcmRdaociKLbEJXs=
+github.com/Masterminds/squirrel v1.1.0/go.mod h1:yaPeOnPG5ZRwL9oKdTsO/prlkPbXWZlRVMQ/gGlzIuA=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA=
+github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
+github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 h1:SOEGU9fKiNWd/HOJuq6+3iTQz8KNCLtVX6idSoTLdUw=
+github.com/lann/builder v0.0.0-20180802200727-47ae307949d0/go.mod h1:dXGbAdH5GtBTC4WfIxhKZfyBF/HBFgRZSWwZ9g/He9o=
+github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 h1:P6pPBnrTSX3DEVR4fDembhRWSsG5rVo6hYhAB/ADZrk=
+github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0/go.mod h1:vmVJ0l/dxyfGW6FmdpVm2joNMFikkuWg0EoCKLGUMNw=
+github.com/lib/pq v1.2.0 h1:LXpIM/LZ5xGFhOpXAQUIMM1HdyqzVYM13zNdjCEEcA0=
+github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
+github.com/mattn/go-sqlite3 v1.13.0 h1:LnJI81JidiW9r7pS/hXe6cFeO5EXNq7KbfvoJLRI69c=
+github.com/mattn/go-sqlite3 v1.13.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
+github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM=
+google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --git a/integration/integration_test.go b/integration/integration_test.go
new file mode 100644
index 0000000..e861e7f
--- /dev/null
+++ b/integration/integration_test.go
@@ -0,0 +1,135 @@
+package integration
+
+import (
+ "context"
+ "database/sql"
+ "flag"
+ "fmt"
+ "os"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+
+ sqrl "github.com/Masterminds/squirrel"
+
+ _ "github.com/go-sql-driver/mysql"
+ _ "github.com/lib/pq"
+ _ "github.com/mattn/go-sqlite3"
+)
+
+const (
+ testSchema = `
+ CREATE TABLE squirrel_integration ( k INT, v TEXT )`
+ testData = `
+ INSERT INTO squirrel_integration VALUES
+ (1, 'foo'),
+ (3, 'bar'),
+ (2, 'foo'),
+ (4, 'baz')
+ `
+)
+
+var (
+ sb sqrl.StatementBuilderType
+)
+
+func TestMain(m *testing.M) {
+ var driver, dataSource string
+ flag.StringVar(&driver, "driver", "", "integration database driver")
+ flag.StringVar(&dataSource, "dataSource", "", "integration database data source")
+ flag.Parse()
+
+ if driver == "" {
+ driver = "sqlite3"
+ }
+
+ if driver == "sqlite3" && dataSource == "" {
+ dataSource = ":memory:"
+ }
+
+ db, err := sql.Open(driver, dataSource)
+ if err != nil {
+ fmt.Printf("error opening database: %v\n", err)
+ os.Exit(-1)
+ }
+
+ _, err = db.Exec(testSchema)
+ if err != nil {
+ fmt.Printf("error creating test schema: %v\n", err)
+ os.Exit(-2)
+ }
+
+ defer func() {
+ _, err = db.Exec("DROP TABLE squirrel_integration")
+ fmt.Printf("error removing test schema: %v\n", err)
+ }()
+
+ _, err = db.Exec(testData)
+ if err != nil {
+ fmt.Printf("error inserting test data: %v\n", err)
+ os.Exit(-3)
+ }
+
+ sb = sqrl.StatementBuilder.RunWith(db)
+
+ if driver == "postgres" {
+ sb = sb.PlaceholderFormat(sqrl.Dollar)
+ }
+
+ os.Exit(m.Run())
+}
+
+func assertVals(t *testing.T, s sqrl.SelectBuilder, expected ...string) {
+ rows, err := s.Query()
+ assert.NoError(t, err)
+ defer rows.Close()
+
+ vals := make([]string, len(expected))
+ for i := range vals {
+ assert.True(t, rows.Next())
+ assert.NoError(t, rows.Scan(&vals[i]))
+ }
+ assert.False(t, rows.Next())
+
+ if expected != nil {
+ assert.Equal(t, expected, vals)
+ }
+}
+
+func TestSimpleSelect(t *testing.T) {
+ assertVals(
+ t,
+ sb.Select("v").From("squirrel_integration"),
+ "foo", "bar", "foo", "baz")
+}
+
+func TestEq(t *testing.T) {
+ s := sb.Select("v").From("squirrel_integration")
+ assertVals(t, s.Where(sqrl.Eq{"k": 4}), "baz")
+ assertVals(t, s.Where(sqrl.NotEq{"k": 2}), "foo", "bar", "baz")
+ assertVals(t, s.Where(sqrl.Eq{"k": []int{1, 4}}), "foo", "baz")
+ assertVals(t, s.Where(sqrl.NotEq{"k": []int{1, 4}}), "bar", "foo")
+ assertVals(t, s.Where(sqrl.Eq{"k": nil}))
+ assertVals(t, s.Where(sqrl.NotEq{"k": nil}), "foo", "bar", "foo", "baz")
+ assertVals(t, s.Where(sqrl.Eq{"k": []int{}}))
+ assertVals(t, s.Where(sqrl.NotEq{"k": []int{}}), "foo", "bar", "foo", "baz")
+}
+
+func TestIneq(t *testing.T) {
+ s := sb.Select("v").From("squirrel_integration")
+ assertVals(t, s.Where(sqrl.Lt{"k": 3}), "foo", "foo")
+ assertVals(t, s.Where(sqrl.Gt{"k": 3}), "baz")
+}
+
+func TestConj(t *testing.T) {
+ s := sb.Select("v").From("squirrel_integration")
+ assertVals(t, s.Where(sqrl.And{sqrl.Gt{"k": 1}, sqrl.Lt{"k": 4}}), "bar", "foo")
+ assertVals(t, s.Where(sqrl.Or{sqrl.Gt{"k": 3}, sqrl.Lt{"k": 2}}), "foo", "baz")
+}
+
+func TestContext(t *testing.T) {
+ s := sb.Select("v").From("squirrel_integration")
+ ctx := context.Background()
+ _, err := s.QueryContext(ctx)
+ assert.NoError(t, err)
+}
diff --git a/integration_test.go b/integration_test.go
deleted file mode 100644
index 743e902..0000000
--- a/integration_test.go
+++ /dev/null
@@ -1,131 +0,0 @@
-// +build integration
-
-package squirrel
-
-import (
- "context"
- "database/sql"
- "flag"
- "fmt"
- "os"
- "testing"
-
- "github.com/stretchr/testify/assert"
-
- _ "github.com/go-sql-driver/mysql"
- _ "github.com/lib/pq"
- _ "github.com/mattn/go-sqlite3"
-)
-
-const (
- testSchema = `
- CREATE TABLE squirrel_integration ( k INT, v TEXT )`
- testData = `
- INSERT INTO squirrel_integration VALUES
- (1, 'foo'),
- (3, 'bar'),
- (2, 'foo'),
- (4, 'baz')
- `
-)
-
-var (
- sqrl StatementBuilderType
-)
-
-func TestMain(m *testing.M) {
- var driver, dataSource string
- flag.StringVar(&driver, "driver", "", "integration database driver")
- flag.StringVar(&dataSource, "dataSource", "", "integration database data source")
- flag.Parse()
-
- if driver == "sqlite3" && dataSource == "" {
- dataSource = ":memory:"
- }
-
- db, err := sql.Open(driver, dataSource)
- if err != nil {
- fmt.Printf("error opening database: %v\n", err)
- os.Exit(-1)
- }
-
- _, err = db.Exec(testSchema)
- if err != nil {
- fmt.Printf("error creating test schema: %v\n", err)
- os.Exit(-2)
- }
-
- defer func() {
- _, err = db.Exec("DROP TABLE squirrel_integration")
- fmt.Printf("error removing test schema: %v\n", err)
- }()
-
- _, err = db.Exec(testData)
- if err != nil {
- fmt.Printf("error inserting test data: %v\n", err)
- os.Exit(-3)
- }
-
- sqrl = StatementBuilder.RunWith(db)
-
- if driver == "postgres" {
- sqrl = sqrl.PlaceholderFormat(Dollar)
- }
-
- os.Exit(m.Run())
-}
-
-func assertVals(t *testing.T, s SelectBuilder, expected ...string) {
- rows, err := s.Query()
- assert.NoError(t, err)
- defer rows.Close()
-
- vals := make([]string, len(expected))
- for i := range vals {
- assert.True(t, rows.Next())
- assert.NoError(t, rows.Scan(&vals[i]))
- }
- assert.False(t, rows.Next())
-
- if expected != nil {
- assert.Equal(t, expected, vals)
- }
-}
-
-func TestSimpleSelect(t *testing.T) {
- assertVals(
- t,
- sqrl.Select("v").From("squirrel_integration"),
- "foo", "bar", "foo", "baz")
-}
-
-func TestEq(t *testing.T) {
- s := sqrl.Select("v").From("squirrel_integration")
- assertVals(t, s.Where(Eq{"k": 4}), "baz")
- assertVals(t, s.Where(NotEq{"k": 2}), "foo", "bar", "baz")
- assertVals(t, s.Where(Eq{"k": []int{1, 4}}), "foo", "baz")
- assertVals(t, s.Where(NotEq{"k": []int{1, 4}}), "bar", "foo")
- assertVals(t, s.Where(Eq{"k": nil}))
- assertVals(t, s.Where(NotEq{"k": nil}), "foo", "bar", "foo", "baz")
- assertVals(t, s.Where(Eq{"k": []int{}}))
- assertVals(t, s.Where(NotEq{"k": []int{}}), "foo", "bar", "foo", "baz")
-}
-
-func TestIneq(t *testing.T) {
- s := sqrl.Select("v").From("squirrel_integration")
- assertVals(t, s.Where(Lt{"k": 3}), "foo", "foo")
- assertVals(t, s.Where(Gt{"k": 3}), "baz")
-}
-
-func TestConj(t *testing.T) {
- s := sqrl.Select("v").From("squirrel_integration")
- assertVals(t, s.Where(And{Gt{"k": 1}, Lt{"k": 4}}), "bar", "foo")
- assertVals(t, s.Where(Or{Gt{"k": 3}, Lt{"k": 2}}), "foo", "baz")
-}
-
-func TestContext(t *testing.T) {
- s := sqrl.Select("v").From("squirrel_integration")
- ctx := context.Background()
- _, err := s.QueryContext(ctx)
- assert.NoError(t, err)
-}