-
Notifications
You must be signed in to change notification settings - Fork 2.3k
/
ImportToolNumericalFailureTest.java
137 lines (118 loc) · 4.12 KB
/
ImportToolNumericalFailureTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/*
* Copyright (c) 2002-2018 "Neo4j,"
* Neo4j Sweden AB [http://neo4j.com]
*
* This file is part of Neo4j.
*
* Neo4j is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.neo4j.tooling;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
import java.io.File;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.neo4j.test.rule.EmbeddedDatabaseRule;
import org.neo4j.test.rule.SuppressOutput;
import org.neo4j.unsafe.impl.batchimport.input.InputException;
import static org.junit.Assert.fail;
import static org.neo4j.tooling.ImportToolTest.assertExceptionContains;
import static org.neo4j.tooling.ImportToolTest.importTool;
/**
* Tests that we fail correctly when given strings which can't be interpreted as numbers when configured to interpret
* them as such.
*/
@RunWith( Parameterized.class )
public class ImportToolNumericalFailureTest
{
@Parameters( name = "{index}: {0}, \"{1}\", \"{2}\"" )
public static List<Object[]> types()
{
ArrayList<Object[]> params = new ArrayList<>();
for ( String type : Arrays.asList( "int", "long", "short", "byte", "float", "double" ) )
{
for ( String val : Arrays.asList( " 1 7 ", " -1 7 ", " - 1 ", " ", " - ", "-", "1. 0", "1 .", ".",
"1E 10", " . 1" ) )
{
// Only include decimals for floating point
if ( val.contains( "." ) && !( type.equals( "float" ) || type.equals( "double" ) ) )
{
continue;
}
final String error;
if ( type.equals( "float" ) || type.equals( "double" ) )
{
error = "Not a number: \"" + val + "\"";
}
else
{
error = "Not an integer: \"" + val + "\"";
}
String[] args = new String[3];
args[0] = type;
args[1] = val;
args[2] = error;
params.add( args );
}
}
return params;
}
@Parameter
public String type;
@Parameter( value = 1 )
public String val;
@Parameter( value = 2 )
public String expectedError;
@Rule
public final EmbeddedDatabaseRule dbRule = new EmbeddedDatabaseRule().startLazily();
@Rule
public final SuppressOutput suppressOutput = SuppressOutput.suppress( SuppressOutput.System.values() );
private int dataIndex;
@Test
public void test() throws Exception
{
// GIVEN
File data = file( fileName( "whitespace.csv" ) );
try ( PrintStream writer = new PrintStream( data ) )
{
writer.println( ":LABEL,adult:" + type );
writer.println( "PERSON," + val );
}
try
{
// WHEN
importTool( "--into", dbRule.getDatabaseDirAbsolutePath(), "--quote", "'", "--nodes", data.getAbsolutePath() );
// THEN
fail( "Expected import to fail" );
}
catch ( Exception e )
{
assertExceptionContains( e, expectedError, InputException.class );
}
}
private String fileName( String name )
{
return dataIndex++ + "-" + name;
}
private File file( String localname )
{
return new File( dbRule.databaseDirectory(), localname );
}
}