1616*/
1717package org .pentaho .platform .dataaccess .datasource .wizard .service .agile ;
1818
19+ import static org .junit .Assert .assertArrayEquals ;
20+ import static org .junit .Assert .assertEquals ;
21+ import static org .junit .Assert .assertNotNull ;
22+ import static org .junit .Assert .assertTrue ;
1923import static org .junit .Assert .fail ;
24+ import static org .mockito .Matchers .any ;
25+ import static org .mockito .Mockito .doReturn ;
26+ import static org .mockito .Mockito .doThrow ;
27+ import static org .mockito .Mockito .mock ;
28+ import static org .mockito .Mockito .spy ;
29+
30+ import java .sql .DatabaseMetaData ;
31+ import java .sql .SQLException ;
32+ import java .util .ArrayList ;
33+ import java .util .List ;
2034
2135import org .junit .Assert ;
2236import org .junit .Test ;
37+ import org .pentaho .di .core .database .Database ;
38+ import org .pentaho .di .core .database .DatabaseMeta ;
39+ import org .pentaho .di .core .exception .KettleDatabaseException ;
40+ import org .pentaho .di .core .row .RowMetaInterface ;
41+ import org .pentaho .di .core .row .ValueMetaInterface ;
2342import org .pentaho .di .trans .step .StepMeta ;
2443import org .pentaho .di .trans .step .StepMetaInterface ;
2544import org .pentaho .di .trans .steps .selectvalues .SelectValuesMeta ;
2847
2948public class CsvTransformGeneratorTest {
3049
50+ @ Test
51+ public void testGetMaxColumnNameLength () throws Exception {
52+
53+ CsvTransformGenerator ctgNoDatabase10 = spy ( new CsvTransformGenerator ( new ModelInfo (), null ) );
54+ Database db10 = mock ( Database .class );
55+ doReturn ( db10 ).when ( ctgNoDatabase10 ).getDatabase ( any ( DatabaseMeta .class ) );
56+ DatabaseMetaData dbmd10 = mock ( DatabaseMetaData .class );
57+ doReturn ( dbmd10 ).when ( db10 ).getDatabaseMetaData ();
58+ doReturn ( 10 ).when ( dbmd10 ).getMaxColumnNameLength ();
59+ assertEquals ( 10 , ctgNoDatabase10 .getMaxColumnNameLength () );
60+
61+ CsvTransformGenerator ctgNoDatabase0 = spy ( new CsvTransformGenerator ( new ModelInfo (), null ) );
62+ Database db0 = mock ( Database .class );
63+ doReturn ( db0 ).when ( ctgNoDatabase0 ).getDatabase ( any ( DatabaseMeta .class ) );
64+ DatabaseMetaData dbmd0 = mock ( DatabaseMetaData .class );
65+ doReturn ( dbmd0 ).when ( db0 ).getDatabaseMetaData ();
66+ doReturn ( 0 ).when ( dbmd0 ).getMaxColumnNameLength ();
67+ assertEquals ( 0 , ctgNoDatabase0 .getMaxColumnNameLength () );
68+
69+ // As for the case of doReturn( <less then 0> ).when( dbmd0 ).getMaxColumnNameLength();
70+ // It's impossible according to java.sql.DatabaseMetaData.
71+ // @see java.sql.DatabaseMetaData.getMaxColumnNameLength()
72+ //
73+
74+ CsvTransformGenerator ctgDbmdE1 = spy ( new CsvTransformGenerator ( new ModelInfo (), null ) );
75+ Database dbDbmdE1 = mock ( Database .class );
76+ DatabaseMetaData dbmdE1 = mock ( DatabaseMetaData .class );
77+ doReturn ( dbmdE1 ).when ( dbDbmdE1 ).getDatabaseMetaData ();
78+ doThrow ( new SQLException () ).when ( dbmdE1 ).getMaxColumnNameLength ();
79+ assertEquals ( 0 , ctgDbmdE1 .getMaxColumnNameLength () );
80+
81+ CsvTransformGenerator ctgDbmdE2 = spy ( new CsvTransformGenerator ( new ModelInfo (), null ) );
82+ Database dbDbmdE2 = mock ( Database .class );
83+ DatabaseMetaData dbmdE2 = mock ( DatabaseMetaData .class );
84+ doReturn ( dbmdE2 ).when ( dbDbmdE2 ).getDatabaseMetaData ();
85+ doThrow ( new RuntimeException () ).when ( dbmdE2 ).getMaxColumnNameLength ();
86+ assertEquals ( 0 , ctgDbmdE2 .getMaxColumnNameLength () );
87+
88+ CsvTransformGenerator ctgDbmdE3 = spy ( new CsvTransformGenerator ( new ModelInfo (), null ) );
89+ Database dbDbmdE3 = mock ( Database .class );
90+ doThrow ( new KettleDatabaseException () ).when ( dbDbmdE3 ).getDatabaseMetaData ();
91+ assertEquals ( 0 , ctgDbmdE3 .getMaxColumnNameLength () );
92+
93+ CsvTransformGenerator ctgDbmdE4 = spy ( new CsvTransformGenerator ( new ModelInfo (), null ) );
94+ Database dbDbmdE4 = mock ( Database .class );
95+ doThrow ( new RuntimeException () ).when ( dbDbmdE4 ).getDatabaseMetaData ();
96+ assertEquals ( 0 , ctgDbmdE4 .getMaxColumnNameLength () );
97+
98+ CsvTransformGenerator ctgNoDatabase = spy ( new CsvTransformGenerator ( new ModelInfo (), null ) );
99+ doReturn ( null ).when ( ctgNoDatabase ).getDatabase ( any ( DatabaseMeta .class ) );
100+ assertEquals ( 0 , ctgNoDatabase .getMaxColumnNameLength () );
101+
102+ CsvTransformGenerator ctgDatabaseErr = spy ( new CsvTransformGenerator ( new ModelInfo (), null ) );
103+ doThrow ( new RuntimeException () ).when ( ctgDatabaseErr ).getDatabase ( any ( DatabaseMeta .class ) );
104+ assertEquals ( 0 , ctgDatabaseErr .getMaxColumnNameLength () );
105+ }
106+
31107 @ Test
32108 public void testCreateCutLongNamesStep_shortColumnNames () throws Exception {
33109 CsvTransformGenerator ctg = new CsvTransformGenerator ( new ModelInfo (), null );
@@ -38,6 +114,38 @@ public void testCreateCutLongNamesStep_shortColumnNames() throws Exception {
38114 Assert .assertNull ( "step" , step );
39115 }
40116
117+ @ Test
118+ /**
119+ * Very artificial case.
120+ * <code>org.pentaho.di.core.row.RowMeta</code> provides unique names,
121+ * though it's not required in <code>org.pentaho.di.core.row.RowMetaInterface</code>
122+ */
123+ public void testCreateCutLongNamesStep_dupColumnNames () throws Exception {
124+ CsvTransformGenerator ctg = new CsvTransformGenerator ( new ModelInfo (), null );
125+ int maxColumnNameLength = 18 ;
126+ String stepName = "TEST_STEP_DupLongNames" ;
127+ CutLongNamesStepContext testData = new CutLongNamesStepContext ();
128+ RowMetaInterface fields = spy ( testData .fields );
129+ List <ValueMetaInterface > vmList = new ArrayList <ValueMetaInterface >( testData .fields .getValueMetaList () );
130+ vmList .set ( 1 , vmList .get ( 0 ) );
131+ doReturn ( vmList ).when ( fields ).getValueMetaList ();
132+
133+ String [] fieldNamesDups = new String [] {"a" , "a" , "A_1" , "b_1" , "LONGlonglong" , "longlonglong_again" , "a_2" , "lonGlo_1" };
134+ String [] fieldRenames = new String [] {"a" , "a_1" , "A_1_1" , "b_1" , "LONGlonglong" , "longlonglong_again" , "a_2" , "lonGlo_1" };
135+
136+ StepMeta step = ctg .createCutLongNamesStep ( fields , maxColumnNameLength , stepName );
137+ assertNotNull ( "step" , step );
138+ assertEquals ( "step name" , stepName , step .getName () );
139+ StepMetaInterface stepMetaIntegrface = step .getStepMetaInterface ();
140+ assertNotNull ( "stepMetaIntegrface" , stepMetaIntegrface );
141+ assertTrue ( "stepMetaIntegrface instanceof SelectValuesMeta" , stepMetaIntegrface instanceof SelectValuesMeta );
142+ SelectValuesMeta svm = (SelectValuesMeta ) stepMetaIntegrface ;
143+ String [] selectName = svm .getSelectName ();
144+ assertArrayEquals ( "selectName" , fieldNamesDups , selectName );
145+ String [] selectRename = svm .getSelectRename ();
146+ assertArrayEquals ( "selectName" , fieldRenames , selectRename );
147+ }
148+
41149 @ Test
42150 public void testCreateCutLongNamesStep_longColumnNames () throws Exception {
43151 CsvTransformGenerator ctg = new CsvTransformGenerator ( new ModelInfo (), null );
@@ -74,5 +182,4 @@ public void testCreateCutLongNamesStep_littleMaxColumnNameLength() throws Except
74182 }
75183 }
76184
77-
78185}
0 commit comments