| package main |
| |
| import ( |
| "strings" |
| "testing" |
| |
| "github.com/stretchr/testify/assert" |
| "go.skia.org/infra/go/testutils/unittest" |
| ) |
| |
| type testTables struct { |
| TableOne []tableOneRow |
| TableTwo []tableTwoRow |
| } |
| |
| type tableOneRow struct { |
| ColumnOne string `sql:"column_one STRING PRIMARY KEY"` |
| ColumnTwo int `sql:"column_two INT8 NOT NULL"` |
| } |
| |
| type tableTwoRow struct { |
| CompositeKeyOne []byte `sql:"comp_one BYTES"` |
| CompositeKeyTwo []byte `sql:"comp_two BYTES"` |
| // This is a test comment |
| primaryKey struct{} `sql:"PRIMARY KEY (comp_one, comp_two)"` |
| // We have this index for good reasons. Spaces are intentional to make sure they are trimmed |
| indexForSearch struct{} `sql:" INDEX comp_two_desc_idx (comp_two DESC) "` |
| // We have this index for even better reasons. |
| otherIndex struct{} `sql:"INDEX comp_two_asc_idx (comp_two ASC)"` |
| } |
| |
| func TestGenerateSQL_WellFormedInput_CorrectOutput(t *testing.T) { |
| unittest.SmallTest(t) |
| |
| gen := generateSQL(testTables{}, "test_package_one") |
| // We cannot have backticks in the multistring literal, so we substitute $$ for them. |
| expectedOutput := strings.ReplaceAll(`package test_package_one |
| |
| // Generated by //golden/go/sql/exporter/tosql |
| // DO NOT EDIT |
| |
| const Schema = $$CREATE TABLE IF NOT EXISTS TableOne ( |
| column_one STRING PRIMARY KEY, |
| column_two INT8 NOT NULL |
| ); |
| CREATE TABLE IF NOT EXISTS TableTwo ( |
| comp_one BYTES, |
| comp_two BYTES, |
| PRIMARY KEY (comp_one, comp_two), |
| INDEX comp_two_desc_idx (comp_two DESC), |
| INDEX comp_two_asc_idx (comp_two ASC) |
| ); |
| $$ |
| `, "$$", "`") |
| |
| assert.Equal(t, expectedOutput, gen) |
| } |
| |
| type malformedTable struct { |
| TableOne []tableOneRow |
| TableTwo tableTwoRow |
| } |
| |
| func TestGenerateSQL_NonSliceField_Panics(t *testing.T) { |
| unittest.SmallTest(t) |
| |
| assert.Panics(t, func() { |
| generateSQL(malformedTable{}, "test_package_one") |
| }) |
| } |
| |
| type missingSQLStructs struct { |
| TableOne []tableOneRow |
| TableTwo []malformedTable |
| } |
| |
| func TestGenerateSQL_MissingSQLStructTag_Panics(t *testing.T) { |
| unittest.SmallTest(t) |
| |
| assert.Panics(t, func() { |
| generateSQL(missingSQLStructs{}, "test_package_one") |
| }) |
| } |