Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add compiler errors for ignored parameters #25

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,14 @@ public class CompilerPluginTest {
"are supported for fields, and other types are not allowed.";
static final String UNSUPPORTED_TUPLE_MEMBER_TYPE = "Unsupported type in the tuple member: " +
"Tuple members can only be basic types, other types are not supported.";
static final String IGNORE_OUTPUT_HEADERS_FOR_RECORD_ARRAY = "The option 'outputWithHeaders' will be ignored" +
" since the expected type is a subtype record array.";
static final String IGNORE_HEADERS_ORDER_FOR_RECORD_ARRAY = "The option 'headersOrder' will be ignored" +
" since the expected type is a subtype record array.";
static final String IGNORE_CUSTOM_HEADERS_PARAMETER_WHEN_HEADER_PRESENT = "The option " +
"'customHeadersIfHeadersAbsent' will be ignored since the header is present.";
static final String CUSTOM_HEADERS_SHOULD_BE_PROVIDED = "customHeaders parameter should be provided since the" +
" headerRows larger than 1.";

@Test
public void testInvalidExpectedUnionType() {
Expand Down Expand Up @@ -148,4 +156,114 @@ public void testInvalidExpectedUnionType2() {
Assert.assertEquals(errorDiagnosticsList.get(8).diagnosticInfo().messageFormat(), UNSUPPORTED_TYPE);
Assert.assertEquals(errorDiagnosticsList.get(9).diagnosticInfo().messageFormat(), UNSUPPORTED_TYPE);
}

@Test
public void testIgnoredCustomHeaderIfAbsentOptions() {
DiagnosticResult diagnosticResult =
CompilerPluginTestUtils.loadPackage("sample_package_7").getCompilation().diagnosticResult();
List<Diagnostic> errorDiagnosticsList = diagnosticResult.diagnostics().stream()
.filter(r -> r.diagnosticInfo().severity().equals(DiagnosticSeverity.ERROR))
.collect(Collectors.toList());
Assert.assertEquals(errorDiagnosticsList.size(), 3);
Assert.assertEquals(errorDiagnosticsList.get(0).diagnosticInfo()
.messageFormat(), IGNORE_CUSTOM_HEADERS_PARAMETER_WHEN_HEADER_PRESENT);
Assert.assertEquals(errorDiagnosticsList.get(1).diagnosticInfo()
.messageFormat(), IGNORE_CUSTOM_HEADERS_PARAMETER_WHEN_HEADER_PRESENT);
Assert.assertEquals(errorDiagnosticsList.get(2).diagnosticInfo()
.messageFormat(), IGNORE_CUSTOM_HEADERS_PARAMETER_WHEN_HEADER_PRESENT);
}

@Test
public void testIgnoredOutputHeaderOptions() {
DiagnosticResult diagnosticResult =
CompilerPluginTestUtils.loadPackage("sample_package_8").getCompilation().diagnosticResult();
List<Diagnostic> errorDiagnosticsList = diagnosticResult.diagnostics().stream()
.filter(r -> r.diagnosticInfo().severity().equals(DiagnosticSeverity.ERROR))
.collect(Collectors.toList());
Assert.assertEquals(errorDiagnosticsList.size(), 8);
Assert.assertEquals(errorDiagnosticsList.get(0).diagnosticInfo()
.messageFormat(), IGNORE_OUTPUT_HEADERS_FOR_RECORD_ARRAY);
Assert.assertEquals(errorDiagnosticsList.get(1).diagnosticInfo()
.messageFormat(), IGNORE_OUTPUT_HEADERS_FOR_RECORD_ARRAY);
Assert.assertEquals(errorDiagnosticsList.get(2).diagnosticInfo()
.messageFormat(), IGNORE_CUSTOM_HEADERS_PARAMETER_WHEN_HEADER_PRESENT);
Assert.assertEquals(errorDiagnosticsList.get(3).diagnosticInfo()
.messageFormat(), IGNORE_OUTPUT_HEADERS_FOR_RECORD_ARRAY);
Assert.assertEquals(errorDiagnosticsList.get(4).diagnosticInfo()
.messageFormat(), IGNORE_CUSTOM_HEADERS_PARAMETER_WHEN_HEADER_PRESENT);
Assert.assertEquals(errorDiagnosticsList.get(5).diagnosticInfo()
.messageFormat(), IGNORE_OUTPUT_HEADERS_FOR_RECORD_ARRAY);
Assert.assertEquals(errorDiagnosticsList.get(6).diagnosticInfo()
.messageFormat(), IGNORE_OUTPUT_HEADERS_FOR_RECORD_ARRAY);
Assert.assertEquals(errorDiagnosticsList.get(7).diagnosticInfo()
.messageFormat(), IGNORE_OUTPUT_HEADERS_FOR_RECORD_ARRAY);
}

@Test
public void testIgnoredHeadersOrderOptions() {
DiagnosticResult diagnosticResult =
CompilerPluginTestUtils.loadPackage("sample_package_9").getCompilation().diagnosticResult();
List<Diagnostic> errorDiagnosticsList = diagnosticResult.diagnostics().stream()
.filter(r -> r.diagnosticInfo().severity().equals(DiagnosticSeverity.ERROR))
.collect(Collectors.toList());
Assert.assertEquals(errorDiagnosticsList.size(), 7);
Assert.assertEquals(errorDiagnosticsList.get(0).diagnosticInfo()
.messageFormat(), IGNORE_HEADERS_ORDER_FOR_RECORD_ARRAY);
Assert.assertEquals(errorDiagnosticsList.get(1).diagnosticInfo()
.messageFormat(), IGNORE_OUTPUT_HEADERS_FOR_RECORD_ARRAY);
Assert.assertEquals(errorDiagnosticsList.get(2).diagnosticInfo()
.messageFormat(), IGNORE_HEADERS_ORDER_FOR_RECORD_ARRAY);
Assert.assertEquals(errorDiagnosticsList.get(3).diagnosticInfo()
.messageFormat(), IGNORE_HEADERS_ORDER_FOR_RECORD_ARRAY);
Assert.assertEquals(errorDiagnosticsList.get(4).diagnosticInfo()
.messageFormat(), IGNORE_OUTPUT_HEADERS_FOR_RECORD_ARRAY);
Assert.assertEquals(errorDiagnosticsList.get(5).diagnosticInfo()
.messageFormat(), IGNORE_HEADERS_ORDER_FOR_RECORD_ARRAY);
Assert.assertEquals(errorDiagnosticsList.get(6).diagnosticInfo()
.messageFormat(), IGNORE_OUTPUT_HEADERS_FOR_RECORD_ARRAY);
}

@Test
public void testIgnoredCustomHeaderOptions() {
DiagnosticResult diagnosticResult =
CompilerPluginTestUtils.loadPackage("sample_package_10").getCompilation().diagnosticResult();
List<Diagnostic> errorDiagnosticsList = diagnosticResult.diagnostics().stream()
.filter(r -> r.diagnosticInfo().severity().equals(DiagnosticSeverity.ERROR))
.collect(Collectors.toList());
Assert.assertEquals(errorDiagnosticsList.size(), 12);
Assert.assertEquals(errorDiagnosticsList.get(0).diagnosticInfo()
.messageFormat(), CUSTOM_HEADERS_SHOULD_BE_PROVIDED);
Assert.assertEquals(errorDiagnosticsList.get(1).diagnosticInfo()
.messageFormat(), CUSTOM_HEADERS_SHOULD_BE_PROVIDED);
Assert.assertEquals(errorDiagnosticsList.get(2).diagnosticInfo()
.messageFormat(), CUSTOM_HEADERS_SHOULD_BE_PROVIDED);
Assert.assertEquals(errorDiagnosticsList.get(3).diagnosticInfo()
.messageFormat(), IGNORE_OUTPUT_HEADERS_FOR_RECORD_ARRAY);
Assert.assertEquals(errorDiagnosticsList.get(4).diagnosticInfo()
.messageFormat(), CUSTOM_HEADERS_SHOULD_BE_PROVIDED);
Assert.assertEquals(errorDiagnosticsList.get(5).diagnosticInfo()
.messageFormat(), CUSTOM_HEADERS_SHOULD_BE_PROVIDED);
Assert.assertEquals(errorDiagnosticsList.get(6).diagnosticInfo()
.messageFormat(), CUSTOM_HEADERS_SHOULD_BE_PROVIDED);
Assert.assertEquals(errorDiagnosticsList.get(7).diagnosticInfo()
.messageFormat(), CUSTOM_HEADERS_SHOULD_BE_PROVIDED);
Assert.assertEquals(errorDiagnosticsList.get(8).diagnosticInfo()
.messageFormat(), CUSTOM_HEADERS_SHOULD_BE_PROVIDED);
Assert.assertEquals(errorDiagnosticsList.get(9).diagnosticInfo()
.messageFormat(), IGNORE_OUTPUT_HEADERS_FOR_RECORD_ARRAY);
Assert.assertEquals(errorDiagnosticsList.get(10).diagnosticInfo()
.messageFormat(), CUSTOM_HEADERS_SHOULD_BE_PROVIDED);
Assert.assertEquals(errorDiagnosticsList.get(11).diagnosticInfo()
.messageFormat(), IGNORE_OUTPUT_HEADERS_FOR_RECORD_ARRAY);
}

@Test
public void testNonCsvFunctionCall() {
DiagnosticResult diagnosticResult =
CompilerPluginTestUtils.loadPackage("sample_package_11").getCompilation().diagnosticResult();
List<Diagnostic> errorDiagnosticsList = diagnosticResult.diagnostics().stream()
.filter(r -> r.diagnosticInfo().severity().equals(DiagnosticSeverity.ERROR))
.collect(Collectors.toList());
Assert.assertEquals(errorDiagnosticsList.size(), 0);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[package]
org = "wso2"
name = "sample_package_10"
version = "0.1.0"
distribution = "2201.9.2"

[build-options]
observabilityIncluded = true
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import ballerina/data.csv;

string[]? headers = ();

record{}[] _ = check csv:parseList([["1", "2"]], {headersRows: 0});
record{}[] _ = check csv:parseList([["1", "2"]], {headersRows: 0, customHeaders: ["a", "b"]});
record{}[] _ = check csv:parseList([["1", "2"]], {headersRows: 0, customHeaders: ()});
record{}[] _ = check csv:parseList([["1", "2"]], {headersRows: 0, customHeaders: headers});
record{}[] _ = check csv:parseList([["1", "2"]], {headersRows: 1});
record{}[] _ = check csv:parseList([["1", "2"]], {headersRows: 1, customHeaders: ["a", "b"]});
record{}[] _ = check csv:parseList([["1", "2"]], {headersRows: 1, customHeaders: ()});
record{}[] _ = check csv:parseList([["1", "2"]], {headersRows: 1, customHeaders: headers});
record{}[] _ = check csv:parseList([["1", "2"]], {headersRows: 2});
record{}[] _ = check csv:parseList([["1", "2"]], {headersRows: 2, customHeaders: ["a", "b"]});
record{}[] _ = check csv:parseList([["1", "2"]], {headersRows: 2, customHeaders: ()});
record{}[] _ = check csv:parseList([["1", "2"]], {headersRows: 2, customHeaders: null, outputWithHeaders: false});
record{}[] _ = check csv:parseList([["1", "2"]], {headersRows: 2, customHeaders: headers});

public function main() returns error? {
record{}[] val = check csv:parseList([["1", "2"]], {headersRows: 0});
val = check csv:parseList([["1", "2"]], {headersRows: 0});

record{}[] _ = check csv:parseList([["1", "2"]], {headersRows: 0, customHeaders: ["a", "b"]});
val = check csv:parseList([["1", "2"]], {headersRows: 0, customHeaders: ["a", "b"]});

record{}[] _ = check csv:parseList([["1", "2"]], {headersRows: 0, customHeaders: ()});
val = check csv:parseList([["1", "2"]], {headersRows: 0, customHeaders: ()});

record{}[] _ = check csv:parseList([["1", "2"]], {headersRows: 0, customHeaders: headers});
val = check csv:parseList([["1", "2"]], {headersRows: 0, customHeaders: headers});

record{}[] _ = check csv:parseList([["1", "2"]], {headersRows: 1});
val = check csv:parseList([["1", "2"]], {headersRows: 1});

record{}[] _ = check csv:parseList([["1", "2"]], {headersRows: 1, customHeaders: ["a", "b"]});
val = check csv:parseList([["1", "2"]], {headersRows: 1, customHeaders: ["a", "b"]});

record{}[] _ = check csv:parseList([["1", "2"]], {headersRows: 1, customHeaders: ()});
val = check csv:parseList([["1", "2"]], {headersRows: 1, customHeaders: ()});

record{}[] _ = check csv:parseList([["1", "2"]], {headersRows: 1, customHeaders: headers});
val = check csv:parseList([["1", "2"]], {headersRows: 1, customHeaders: headers});

record{}[] _ = check csv:parseList([["1", "2"]], {headersRows: 2});
val = check csv:parseList([["1", "2"]], {headersRows: 2});

record{}[] _ = check csv:parseList([["1", "2"]], {headersRows: 2, customHeaders: ["a", "b"]});
val = check csv:parseList([["1", "2"]], {headersRows: 2, customHeaders: ["a", "b"]});

record{}[] _ = check csv:parseList([["1", "2"]], {headersRows: 2, customHeaders: ()});
val = check csv:parseList([["1", "2"]], {headersRows: 2, customHeaders: ()});

record{}[] _ = check csv:parseList([["1", "2"]], {headersRows: 2, customHeaders: null, outputWithHeaders: true});
val = check csv:parseList([["1", "2"]], {headersRows: 2, customHeaders: null, outputWithHeaders: true});

record{}[] _ = check csv:parseList([["1", "2"]], {headersRows: 2, customHeaders: headers});
val = check csv:parseList([["1", "2"]], {headersRows: 2, customHeaders: headers});
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[package]
org = "wso2"
name = "sample_package_11"
version = "0.1.0"
distribution = "2201.9.2"

[build-options]
observabilityIncluded = true
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import ballerina/data.csv;

type A record {
int:Unsigned32 headerRows = 0;
string[] customHeaders = [];
boolean outputWithHeaders = false;
};

public function main() returns error? {
record {}[] a = check csv:parseString(string `a,b`, {});
record {}[] b = test({headerRows: 2, outputWithHeaders: false});
}

function test(A a) returns record{}[] {
return [{}];
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[package]
org = "wso2"
name = "sample_package_7"
version = "0.1.0"
distribution = "2201.9.2"

[build-options]
observabilityIncluded = true
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import ballerina/data.csv;

string[] customHeaders = ["a", "b"];
int:Unsigned32 header = 0;
false header2 = false;

record{}[] val = check csv:parseString(string `a, b`, {header: 0, customHeadersIfHeadersAbsent: ["a", "b"]});
record{}[] val2 = check csv:parseString(string `a, b`, {header: 0, customHeadersIfHeadersAbsent: ()});
record{}[] val3 = check csv:parseString(string `a, b`, {header: false, customHeadersIfHeadersAbsent: ["a", "b"]});
record{}[] val4 = check csv:parseString(string `a, b`, {header: false, customHeadersIfHeadersAbsent: ()});
record{}[] val5 = check csv:parseString(string `a, b`, {customHeadersIfHeadersAbsent: ()});
record{}[] val6 = check csv:parseString(string `a, b`, {header: false});
record{}[] val7 = check csv:parseString(string `a, b`, {customHeadersIfHeadersAbsent: ["a", "b"]});
record{}[] val8 = check csv:parseString(string `a, b`, {header: 0, customHeadersIfHeadersAbsent: null});
record{}[] val9 = check csv:parseString(string `a, b`, {header: false, customHeadersIfHeadersAbsent: null});
record{}[] val10 = check csv:parseString(string `a, b`, {header: 0, customHeadersIfHeadersAbsent: customHeaders});
record{}[] val11 = check csv:parseString(string `a, b`, {header: header, customHeadersIfHeadersAbsent: customHeaders});
record{}[] val12 = check csv:parseString(string ``, {header: header2, customHeadersIfHeadersAbsent: customHeaders});

public function main() returns error? {
record{}[] val = check csv:parseString(string `a, b`, {header: 0, customHeadersIfHeadersAbsent: ["a", "b"]});
val = check csv:parseString(string ``, {header: 0, customHeadersIfHeadersAbsent: ["a", "b"]});

record{}[] val2 = check csv:parseString(string `a, b`, {header: 0, customHeadersIfHeadersAbsent: ()});
val2 = check csv:parseString(string ``, {header: 0, customHeadersIfHeadersAbsent: ()});

record{}[] val3 = check csv:parseString(string `a, b`, {header: false, customHeadersIfHeadersAbsent: ["a", "b"]});
val3 = check csv:parseString(string ``, {header: false, customHeadersIfHeadersAbsent: ["a", "b"]});

record{}[] val4 = check csv:parseString(string `a, b`, {header: false, customHeadersIfHeadersAbsent: ()});
val4 = check csv:parseString(string ``, {header: false, customHeadersIfHeadersAbsent: ()});

record{}[] val5 = check csv:parseString(string `a, b`, {customHeadersIfHeadersAbsent: ()});
val5 = check csv:parseString(string ``, {customHeadersIfHeadersAbsent: ()});

record{}[] val6 = check csv:parseString(string `a, b`, {header: false});
val6 = check csv:parseString(string ``, {header: false});

record{}[] val7 = check csv:parseString(string `a, b`, {customHeadersIfHeadersAbsent: ["a", "b"]});
val7 = check csv:parseString(string ``, {customHeadersIfHeadersAbsent: ["a", "b"]});

record{}[] val8 = check csv:parseString(string `a, b`, {header: 0, customHeadersIfHeadersAbsent: null});
val8 = check csv:parseString(string ``, {header: 0, customHeadersIfHeadersAbsent: null});

record{}[] val9 = check csv:parseString(string `a, b`, {header: false, customHeadersIfHeadersAbsent: null});
val9 = check csv:parseString(string ``, {header: false, customHeadersIfHeadersAbsent: null});

record{}[] val10 = check csv:parseString(string `a, b`, {header: 0, customHeadersIfHeadersAbsent: customHeaders});
val10 = check csv:parseString(string ``, {header: 0, customHeadersIfHeadersAbsent: customHeaders});

record{}[] val11 = check csv:parseString(string `a, b`, {header: header, customHeadersIfHeadersAbsent: customHeaders});
val11 = check csv:parseString(string `a, b`, {header: header, customHeadersIfHeadersAbsent: customHeaders});

record{}[] val12 = check csv:parseString(string ``, {header: header2, customHeadersIfHeadersAbsent: customHeaders});
val11 = check csv:parseString(string ``, {header: header2, customHeadersIfHeadersAbsent: customHeaders});
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[package]
org = "wso2"
name = "sample_package_8"
version = "0.1.0"
distribution = "2201.9.2"

[build-options]
observabilityIncluded = true
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import ballerina/data.csv;

boolean o = false;
record{}[] val = check csv:parseString(string `a, b`, {outputWithHeaders: false});
record{}[] val2 = check csv:parseString(string `a, b`, {header: 0, customHeadersIfHeadersAbsent: (), outputWithHeaders: true});
record{}[] val3 = check csv:parseString(string `a, b`, {header: false, customHeadersIfHeadersAbsent: ["a", "b"]});
record{}[] val4 = check csv:parseString(string `a, b`, {header: 0, customHeadersIfHeadersAbsent: (), outputWithHeaders: o});

public function main() returns error? {
record{}[] val = check csv:parseString(string `a, b`, {header: 0, customHeadersIfHeadersAbsent: ["a", "b"], outputWithHeaders: false});
val = check csv:parseString(string ``, {header: 0, customHeadersIfHeadersAbsent: ["a", "b"], outputWithHeaders: true});

record{}[] val2 = check csv:parseString(string `a, b`, {header: 0, customHeadersIfHeadersAbsent: (), outputWithHeaders: false});
val2 = check csv:parseString(string ``, {header: 0, customHeadersIfHeadersAbsent: (), outputWithHeaders: true});

record{}[] val3 = check csv:parseString(string `a, b`, {header: 0, customHeadersIfHeadersAbsent: (), outputWithHeaders: o});
val3 = check csv:parseString(string ``, {header: 0, customHeadersIfHeadersAbsent: (), outputWithHeaders: o});
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[package]
org = "wso2"
name = "sample_package_9"
version = "0.1.0"
distribution = "2201.9.2"

[build-options]
observabilityIncluded = true
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import ballerina/data.csv;

boolean o = false;
string[] headersOrder = ["a", "b"];
record{}[] val = check csv:transform([{"a": 1, "b": 2}], {headersOrder: ["a", "b"], outputWithHeaders: false});
record{}[] val2 = check csv:transform([{"a": 1, "b": 2}], {headersOrder: ["a", "b"]});
record{}[] val3 = check csv:transform([{"a": 1, "b": 2}], {"header": false, headersOrder: headersOrder});
record{}[] val4 = check csv:transform([{"a": 1, "b": 2}], {outputWithHeaders: o, headersOrder: ()});

public function main() returns error? {
record{}[] val = check csv:transform([{"a": 1, "b": 2}], {headersOrder: ()});
val = check csv:transform([{"a": 1, "b": 2}], {headersOrder: ()});

record{}[] val2 = check csv:transform([{"a": 1, "b": 2}], {headersOrder: ["a", "b"], outputWithHeaders: false});
val2 = check csv:transform([{"a": 1, "b": 2}], {headersOrder: ["a", "b"], outputWithHeaders: true});

record{}[] val3 = check csv:transform([{"a": 1, "b": 2}], {headersOrder: null});
val3 = check csv:transform([{"a": 1, "b": 2}], {headersOrder: null});

record{}[] val4 = check csv:transform([{"a": 1, "b": 2}], {headersOrder});
val4 = check csv:transform([{"a": 1, "b": 2}], {headersOrder});
}
Loading
Loading