Skip to content

Commit

Permalink
Fix mismatch error
Browse files Browse the repository at this point in the history
  • Loading branch information
kalaiyarasiganeshalingam committed Aug 10, 2023
1 parent 62f7f70 commit f1a6c23
Show file tree
Hide file tree
Showing 39 changed files with 1,250 additions and 165 deletions.
189 changes: 189 additions & 0 deletions ballerina/tests/from_xml_test.bal
Original file line number Diff line number Diff line change
Expand Up @@ -1109,3 +1109,192 @@ isolated function testFromXmlWithBackSlash1() returns error? {
Book_Store actual = check fromXml(payload);
test:assertEquals(actual, expected, msg = "testToRecordWithNamespaces result incorrect");
}


type BookStore7 record {
string storeName;
int postalCode;
@Name {
value: "isOpen"
}
boolean open;
Address7 address;
Codes7 codes;
@Attribute
string status;
@Attribute
string 'xmlns\:ns0;
};

type Address7 record {
string street;
string city;
string country;
};

type Codes7 record {
int[] item;
};

@test:Config {
groups: ["fromXml"]
}
isolated function testRecordToXml7() returns error? {
xml payload = xml `<BookStore7 status="online" xmlns:ns0="http://sample.com/test">
<storeName>foo</storeName>
<postalCode>94</postalCode>
<isOpen>true</isOpen>
<address>
<street>Galle Road</street>
<city>Colombo</city>
<country>Sri Lanka</country>
</address>
<codes>
<item>4</item>
<item>8</item>
<item>9</item>
</codes>
</BookStore7>
<!-- some comment -->
<?doc document="book.doc"?>`;
BookStore7 expected = {
storeName: "foo",
postalCode: 94,
open: true,
address: {
street: "Galle Road",
city: "Colombo",
country: "Sri Lanka"
},
codes: {
item: [4, 8, 9]
},
'xmlns\:ns0: "http://sample.com/test",
status: "online"
};
BookStore7 actual = check fromXml(payload);
test:assertEquals(actual, expected, msg = "testToRecordWithNamespaces result incorrect");
}

@Name {
value: "BookStore8"
}
type BookStore9 record {
string storeName;
int postalCode;
boolean isOpen;
@Name {
value: "address"
}
Address8 addr;
@Name {
value: "codes"
}
Codes8 code;
@Attribute
string status;
@Attribute
string 'xmlns\:ns0;
};

type Address8 record {
string street;
string city;
string country;
};

type Codes8 record {
int[] item;
};

@test:Config {
groups: ["fromXml"]
}
isolated function testRecordToXml8() returns error? {
xml payload = xml `<BookStore8 status="online" xmlns:ns0="http://sample.com/test">
<storeName>foo</storeName>
<postalCode>94</postalCode>
<isOpen>true</isOpen>
<address>
<street>Galle Road</street>
<city>Colombo</city>
<country>Sri Lanka</country>
</address>
<codes>
<item>4</item>
<item>8</item>
<item>9</item>
</codes>
</BookStore8>
<!-- some comment -->
<?doc document="book.doc"?>`;
BookStore9 expected = {
storeName: "foo",
postalCode: 94,
isOpen: true,
addr: {
street: "Galle Road",
city: "Colombo",
country: "Sri Lanka"
},
code: {
item: [4, 8, 9]
},
'xmlns\:ns0: "http://sample.com/test",
status: "online"
};
BookStore9 actual = check fromXml(payload);
test:assertEquals(actual, expected, msg = "testToRecordWithNamespaces result incorrect");
}

type Appointment record {
string firstName;
string lastName;
string email;
string age;
};

@Name {
value: "appointments"
}
type Appointments record {
Appointment[] appointment;
};

@test:Config {
groups: ["fromXml"]
}
isolated function testFromXmlWithNameAnnotation() returns error? {
Appointments expected = {
"appointment": [
{
"firstName":"John",
"lastName":"Doe",
"email":"[email protected]",
"age":"28"
},
{
"firstName":"John",
"lastName":"Doe",
"email":"[email protected]",
"age":"28"
}
]
};
xml xmlPayload = xml `<appointments>
<appointment>
<firstName>John</firstName>
<lastName>Doe</lastName>
<email>[email protected]</email>
<age>28</age>
</appointment>
<appointment>
<firstName>John</firstName>
<lastName>Doe</lastName>
<email>[email protected]</email>
<age>28</age>
</appointment>
</appointments>`;
Appointments result = check fromXml(xmlPayload);
test:assertEquals(result, expected, msg = "testFromXmlWithNameAnnotation result incorrect");
}
5 changes: 5 additions & 0 deletions changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Fixed
[Fix the mismatch error by `fromXml` API while the field has the name annotation](https://github.com/ballerina-platform/ballerina-standard-library/issues/3802)

## [2.4.3] - 2023-05-12

### Fixed
- [Fix the bug from fromXml API when xml elements have different namespaces](https://github.com/ballerina-platform/ballerina-standard-library/issues/4434)

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[package]
org = "xmldata_test"
name = "sample1"
version = "0.1.0"
31 changes: 31 additions & 0 deletions compiler-plugin-tests/bin/test/diagnostics/sample1/main.bal
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
// Copyright (c) 2022, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
//
// WSO2 Inc. licenses this file to you under the Apache License,
// Version 2.0 (the "License"); you may not use this file except
// in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.

import ballerina/xmldata;

type Foo record {
Bar? foo;
};

type Bar record {
int? bar = 2;
string car;
};

public function main() returns error? {
xml x = xml `<foo><bar>2</bar><car></car></foo>`;
Foo actual = check xmldata:toRecord(x);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[package]
org = "xmldata_test"
name = "sample10"
version = "0.1.0"
38 changes: 38 additions & 0 deletions compiler-plugin-tests/bin/test/diagnostics/sample10/main.bal
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
// Copyright (c) 2022, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
//
// WSO2 Inc. licenses this file to you under the Apache License,
// Version 2.0 (the "License"); you may not use this file except
// in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.

import ballerina/xmldata;

type Test record {
Bar|Bar1 foo;
};

type Foo record {
Bar|Bar1[]|string|int foo;
};

type Bar record {
int? bar;
string|Bar|map<string> car;
};

type Bar1 record {
int bar;
string|int|float car;
};

xml x1 = xml `<foo><bar>2</bar><car></car></foo>`;
Foo actual = check xmldata:fromXml(x1);
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[package]
org = "xmldata_test"
name = "sample11"
version = "0.1.0"
50 changes: 50 additions & 0 deletions compiler-plugin-tests/bin/test/diagnostics/sample11/main.bal
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
// Copyright (c) 2023, WSO2 LLC. (https://www.wso2.com) All Rights Reserved.
//
// WSO2 LLC. licenses this file to you under the Apache License,
// Version 2.0 (the "License"); you may not use this file except
// in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.

import ballerina/xmldata;

@xmldata:Name{
value: "Foo1"
}
type Foo record {
Bar foo;
};

@xmldata:Name{
value: "Bar1"
}
type Bar record {
int bar;
Bar2 bar2;
};

@xmldata:Name{
value: "Bar4"
}
@xmldata:Namespace {
prefix: "ns",
uri: "http://sdf.com"
}
type Bar2 record {
int bar;
string car;
};

public function main() returns error? {
xml x1 = xml `<foo><bar>2</bar><car></car></foo>`;
Foo actual = check xmldata:fromXml(x1);
Bar result = check xmldata:fromXml(x1);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[package]
org = "xmldata_test"
name = "sample2"
version = "0.1.0"
46 changes: 46 additions & 0 deletions compiler-plugin-tests/bin/test/diagnostics/sample2/main.bal
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
// Copyright (c) 2022, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
//
// WSO2 Inc. licenses this file to you under the Apache License,
// Version 2.0 (the "License"); you may not use this file except
// in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.

import ballerina/xmldata;

type Foo record {
Bar? foo;
};

type Bar record {
int? bar;
string car;
};

type Foo1 record {
Bar1? foo;
};

type Bar1 record {
int? bar;
string car;
};

public function main() returns error? {
xml x = xml `<foo><bar>2</bar><car></car></foo>`;
_ = check getValue(x);
}

function getValue(xml x) returns Foo|error {
Foo actual = check xmldata:toRecord(x);
Foo1 actual1 = check xmldata:toRecord(x);
return actual;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[package]
org = "xmldata_test"
name = "sample3"
version = "0.1.0"
Loading

0 comments on commit f1a6c23

Please sign in to comment.