From 7859b5cf0b42c52af18e25734eeb4cb9fa6ef0fd Mon Sep 17 00:00:00 2001 From: Sarbjit Singh Date: Tue, 13 Mar 2018 04:28:04 +0530 Subject: [PATCH 1/3] Add tests for warnings in the body section --- test/vcf/optional_policy_test.cpp | 349 +++++++++++++++++++++++++++++- 1 file changed, 347 insertions(+), 2 deletions(-) diff --git a/test/vcf/optional_policy_test.cpp b/test/vcf/optional_policy_test.cpp index 627778682..734afb751 100644 --- a/test/vcf/optional_policy_test.cpp +++ b/test/vcf/optional_policy_test.cpp @@ -21,7 +21,238 @@ namespace ebi { - + + TEST_CASE("Record Position warnings", "[body position warnings]") + { + std::shared_ptr source{ + new vcf::Source{ + "Example VCF source", + vcf::InputFormat::VCF_FILE_VCF | vcf::InputFormat::VCF_FILE_BGZIP, + vcf::Version::v43}}; + + source->meta_entries.emplace(vcf::REFERENCE, + vcf::MetaEntry{ + 1, + vcf::REFERENCE, + "file", + source + }); + + source->meta_entries.emplace(vcf::CONTIG, + vcf::MetaEntry{ + 1, + vcf::CONTIG, + { { vcf::ID, "chr1" } }, + source + }); + + source->meta_entries.emplace(vcf::INFO, + vcf::MetaEntry{ + 1, + vcf::INFO, + { + { vcf::ID, "XYZ" }, + { vcf::NUMBER, "1" }, + { vcf::TYPE, vcf::INTEGER }, + { vcf::DESCRIPTION, "Random info tag" } + }, + source + }); + + vcf::ParsingState parsing_state{source}; + + vcf::ValidateOptionalPolicy optional_policy; + + SECTION("Non-zero position for non-telomeres") + { + CHECK_NOTHROW( (optional_policy.optional_check_body_entry(parsing_state, vcf::Record{ + 1, + "chr1", + 123456, + { vcf::MISSING_VALUE }, + "A", + { "AC" }, + 1.0, + { vcf::PASS }, + { { "XYZ", "1" } }, + { }, + { }, + source})) ); + + CHECK_THROWS_AS( (optional_policy.optional_check_body_entry(parsing_state, vcf::Record{ + 1, + "chr1", + 0, + { vcf::MISSING_VALUE }, + "A", + { "AC" }, + 1.0, + { vcf::PASS }, + { { "XYZ", "1" } }, + { }, + { }, + source})), + vcf::PositionBodyError*); + } + } + + TEST_CASE("Id warnings", "[body id warnings]") + { + std::shared_ptr source{ + new vcf::Source{ + "Example VCF source", + vcf::InputFormat::VCF_FILE_VCF | vcf::InputFormat::VCF_FILE_BGZIP, + vcf::Version::v43}}; + + source->meta_entries.emplace(vcf::REFERENCE, + vcf::MetaEntry{ + 1, + vcf::REFERENCE, + "file", + source + }); + + source->meta_entries.emplace(vcf::CONTIG, + vcf::MetaEntry{ + 1, + vcf::CONTIG, + { { vcf::ID, "chr1" } }, + source + }); + + source->meta_entries.emplace(vcf::INFO, + vcf::MetaEntry{ + 1, + vcf::INFO, + { + { vcf::ID, "XYZ" }, + { vcf::NUMBER, "1" }, + { vcf::TYPE, vcf::INTEGER }, + { vcf::DESCRIPTION, "Random info tag" } + }, + source + }); + + vcf::ParsingState parsing_state{source}; + + vcf::ValidateOptionalPolicy optional_policy; + + SECTION("Commas in ID column") + { + CHECK_THROWS_AS( (optional_policy.optional_check_body_entry(parsing_state, vcf::Record{ + 1, + "chr1", + 123456, + { "id1,id2" }, + "A", + { "AC" }, + 1.0, + { vcf::PASS }, + { { "XYZ", "1" } }, + { }, + { }, + source})), + vcf::IdBodyError*); + } + } + + TEST_CASE("Record Reference Alternate matching warnings", "[body reference alternate matching warnings]") + { + std::shared_ptr source{ + new vcf::Source{ + "Example VCF source", + vcf::InputFormat::VCF_FILE_VCF | vcf::InputFormat::VCF_FILE_BGZIP, + vcf::Version::v43}}; + + source->meta_entries.emplace(vcf::REFERENCE, + vcf::MetaEntry{ + 1, + vcf::REFERENCE, + "file", + source + }); + + source->meta_entries.emplace(vcf::CONTIG, + vcf::MetaEntry{ + 1, + vcf::CONTIG, + { { vcf::ID, "chr1" } }, + source + }); + + source->meta_entries.emplace(vcf::INFO, + vcf::MetaEntry{ + 1, + vcf::INFO, + { + { vcf::ID, "XYZ" }, + { vcf::NUMBER, "1" }, + { vcf::TYPE, vcf::INTEGER }, + { vcf::DESCRIPTION, "Random info tag" } + }, + source + }); + + vcf::ParsingState parsing_state{source}; + + vcf::ValidateOptionalPolicy optional_policy; + + SECTION("Reference and alternate alleles share first nucleotide") + { + vcf::Record record1( + 1, + "chr1", + 123456, + { vcf::MISSING_VALUE }, + "A", + { "AC" }, + 1.0, + { vcf::PASS }, + { { "XYZ", "1" } }, + { }, + { }, + source); + record1.types = { vcf::RecordType::INDEL }; + + vcf::Record record2( + 1, + "chr1", + 123456, + { vcf::MISSING_VALUE }, + "A", + { "CA" }, + 1.0, + { vcf::PASS }, + { { "XYZ", "1" } }, + { }, + { }, + source); + record2.types = { vcf::RecordType::MNV }; + + vcf::Record record3( + 1, + "chr1", + 123456, + { vcf::MISSING_VALUE }, + "AT", + { "AC", "TAG" }, + 1.0, + { vcf::PASS }, + { { "XYZ", "1" } }, + { }, + { }, + source); + record3.types = { vcf::RecordType::INDEL }; + + CHECK_NOTHROW( (optional_policy.optional_check_body_entry(parsing_state, record1)) ); + + CHECK_NOTHROW( (optional_policy.optional_check_body_entry(parsing_state, record2)) ); + + CHECK_THROWS_AS( (optional_policy.optional_check_body_entry(parsing_state, record3)), + vcf::ReferenceAlleleBodyError*); + } + } + TEST_CASE("Info predefined tags warnings", "[body info warnings]") { std::shared_ptr source{ @@ -65,7 +296,121 @@ namespace ebi vcf::ValidateOptionalPolicy optional_policy; - SECTION("Confidence Interval Tags") + SECTION("IMPRECISE test") + { + source->meta_entries.emplace(vcf::INFO, + vcf::MetaEntry{ + 1, + vcf::INFO, + { + { vcf::ID, vcf::IMPRECISE }, + { vcf::NUMBER, "0" }, + { vcf::TYPE, vcf::FLAG }, + { vcf::DESCRIPTION, "Imprecise structural variation" } + }, + source + }); + + source->meta_entries.emplace(vcf::INFO, + vcf::MetaEntry{ + 1, + vcf::INFO, + { + { vcf::ID, vcf::CIPOS }, + { vcf::NUMBER, "2" }, + { vcf::TYPE, vcf::INTEGER }, + { vcf::DESCRIPTION, "Confidence interval around POS for imprecise variants" } + }, + source + }); + + source->meta_entries.emplace(vcf::INFO, + vcf::MetaEntry{ + 1, + vcf::INFO, + { + { vcf::ID, vcf::CIEND }, + { vcf::NUMBER, "2" }, + { vcf::TYPE, vcf::INTEGER }, + { vcf::DESCRIPTION, "Confidence interval around END for imprecise variants" } + }, + source + }); + + CHECK_NOTHROW( (optional_policy.optional_check_body_entry(parsing_state, vcf::Record{ + 1, + "chr1", + 123456, + { "id123" }, + "A", + { "AC" }, + 1.0, + { vcf::PASS }, + { { vcf::IMPRECISE, "0" } }, + { vcf::GT }, + { "1|0" }, + source})) ); + + CHECK_NOTHROW( (optional_policy.optional_check_body_entry(parsing_state, vcf::Record{ + 1, + "chr1", + 123456, + { "id123" }, + "A", + { "AC" }, + 1.0, + { vcf::PASS }, + { { vcf::IMPRECISE, "1" }, { vcf::CIEND, "-2,1" } }, + { vcf::GT }, + { "1|0" }, + source})) ); + + CHECK_NOTHROW( (optional_policy.optional_check_body_entry(parsing_state, vcf::Record{ + 1, + "chr1", + 123456, + { "id123" }, + "A", + { "AC" }, + 1.0, + { vcf::PASS }, + { { vcf::CIPOS, "-1,2" }, { vcf::IMPRECISE, "1" } }, + { vcf::GT }, + { "1|0" }, + source})) ); + + CHECK_THROWS_AS( (optional_policy.optional_check_body_entry(parsing_state, vcf::Record{ + 1, + "chr1", + 123456, + { "id123" }, + "A", + { "AC" }, + 1.0, + { vcf::PASS }, + { { vcf::CIEND, "-1,2"}, { vcf::IMPRECISE, "0" } }, + { vcf::GT }, + { "0|1" }, + source})), + vcf::InfoBodyError*); + + CHECK_THROWS_AS( (optional_policy.optional_check_body_entry(parsing_state, vcf::Record{ + 1, + "chr1", + 123456, + { "id123" }, + "A", + { "AC" }, + 1.0, + { vcf::PASS }, + { { vcf::IMPRECISE, "0" }, { vcf::CIPOS, "-2,1" } }, + { vcf::GT }, + { "0|1" }, + source})), + vcf::InfoBodyError*); + } + + SECTION("Confidence Interval Tags") { std::vector confidence_interval_tags = { vcf::CICN, From 4a241738f7243456eeea07b45299ce60bc34d57d Mon Sep 17 00:00:00 2001 From: Sarbjit Singh Date: Thu, 15 Mar 2018 20:06:26 +0530 Subject: [PATCH 2/3] Updated ref alt test cases to use constructor --- test/vcf/optional_policy_test.cpp | 29 ++++++++++------------------- 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/test/vcf/optional_policy_test.cpp b/test/vcf/optional_policy_test.cpp index 734afb751..977ce0d86 100644 --- a/test/vcf/optional_policy_test.cpp +++ b/test/vcf/optional_policy_test.cpp @@ -199,7 +199,7 @@ namespace ebi SECTION("Reference and alternate alleles share first nucleotide") { - vcf::Record record1( + CHECK_NOTHROW( (optional_policy.optional_check_body_entry(parsing_state, vcf::Record{ 1, "chr1", 123456, @@ -211,25 +211,23 @@ namespace ebi { { "XYZ", "1" } }, { }, { }, - source); - record1.types = { vcf::RecordType::INDEL }; + source})) ); - vcf::Record record2( + CHECK_NOTHROW( (optional_policy.optional_check_body_entry(parsing_state, vcf::Record{ 1, "chr1", 123456, { vcf::MISSING_VALUE }, - "A", - { "CA" }, + "GT", + { "AC" }, 1.0, { vcf::PASS }, { { "XYZ", "1" } }, { }, { }, - source); - record2.types = { vcf::RecordType::MNV }; + source})) ); - vcf::Record record3( + CHECK_THROWS_AS( (optional_policy.optional_check_body_entry(parsing_state, vcf::Record{ 1, "chr1", 123456, @@ -241,15 +239,8 @@ namespace ebi { { "XYZ", "1" } }, { }, { }, - source); - record3.types = { vcf::RecordType::INDEL }; - - CHECK_NOTHROW( (optional_policy.optional_check_body_entry(parsing_state, record1)) ); - - CHECK_NOTHROW( (optional_policy.optional_check_body_entry(parsing_state, record2)) ); - - CHECK_THROWS_AS( (optional_policy.optional_check_body_entry(parsing_state, record3)), - vcf::ReferenceAlleleBodyError*); + source})), + vcf::ReferenceAlleleBodyError*); } } @@ -412,7 +403,7 @@ namespace ebi SECTION("Confidence Interval Tags") { - std::vector confidence_interval_tags = { + std::vector confidence_interval_tags = { vcf::CICN, vcf::CICNADJ, vcf::CIEND, From ce18628b6a3bb1d724524d31a839a21d38306057 Mon Sep 17 00:00:00 2001 From: Sarbjit Singh Date: Thu, 15 Mar 2018 21:25:19 +0530 Subject: [PATCH 3/3] Change tag message to 'warnings' --- test/vcf/optional_policy_test.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/vcf/optional_policy_test.cpp b/test/vcf/optional_policy_test.cpp index 977ce0d86..8fd3482ce 100644 --- a/test/vcf/optional_policy_test.cpp +++ b/test/vcf/optional_policy_test.cpp @@ -22,7 +22,7 @@ namespace ebi { - TEST_CASE("Record Position warnings", "[body position warnings]") + TEST_CASE("Record Position warnings", "[warnings]") { std::shared_ptr source{ new vcf::Source{ @@ -96,7 +96,7 @@ namespace ebi } } - TEST_CASE("Id warnings", "[body id warnings]") + TEST_CASE("Id warnings", "[warnings]") { std::shared_ptr source{ new vcf::Source{ @@ -156,7 +156,7 @@ namespace ebi } } - TEST_CASE("Record Reference Alternate matching warnings", "[body reference alternate matching warnings]") + TEST_CASE("Record Reference Alternate matching warnings", "[warnings]") { std::shared_ptr source{ new vcf::Source{ @@ -244,7 +244,7 @@ namespace ebi } } - TEST_CASE("Info predefined tags warnings", "[body info warnings]") + TEST_CASE("Info predefined tags warnings", "[warnings]") { std::shared_ptr source{ new vcf::Source{ @@ -518,7 +518,7 @@ namespace ebi } } - TEST_CASE("Alternate allele warnings", "[body alt warnings]") + TEST_CASE("Alternate allele warnings", "[warnings]") { std::vector> sources = { std::shared_ptr{new vcf::Source{