| 127 | } |
| 128 | |
| 129 | void DoCheck(const std::string& prv, const std::string& pub, const std::string& norm_prv, const std::string& norm_pub, int flags, const std::vector<std::vector<std::string>>& scripts, const std::optional<OutputType>& type, const std::set<std::vector<uint32_t>>& paths = ONLY_EMPTY, |
| 130 | bool replace_apostrophe_with_h_in_prv=false, bool replace_apostrophe_with_h_in_pub=false) |
| 131 | { |
| 132 | FlatSigningProvider keys_priv, keys_pub; |
| 133 | std::set<std::vector<uint32_t>> left_paths = paths; |
| 134 | std::string error; |
| 135 | |
| 136 | std::unique_ptr<Descriptor> parse_priv; |
| 137 | std::unique_ptr<Descriptor> parse_pub; |
| 138 | // Check that parsing succeeds. |
| 139 | if (replace_apostrophe_with_h_in_prv) { |
| 140 | parse_priv = Parse(UseHInsteadOfApostrophe(prv), keys_priv, error); |
| 141 | } else { |
| 142 | parse_priv = Parse(prv, keys_priv, error); |
| 143 | } |
| 144 | if (replace_apostrophe_with_h_in_pub) { |
| 145 | parse_pub = Parse(UseHInsteadOfApostrophe(pub), keys_pub, error); |
| 146 | } else { |
| 147 | parse_pub = Parse(pub, keys_pub, error); |
| 148 | } |
| 149 | |
| 150 | BOOST_CHECK(parse_priv); |
| 151 | BOOST_CHECK(parse_pub); |
| 152 | |
| 153 | // Check that the correct OutputType is inferred |
| 154 | BOOST_CHECK(parse_priv->GetOutputType() == type); |
| 155 | BOOST_CHECK(parse_pub->GetOutputType() == type); |
| 156 | |
| 157 | // Check private keys are extracted from the private version but not the public one. |
| 158 | BOOST_CHECK(keys_priv.keys.size()); |
| 159 | BOOST_CHECK(!keys_pub.keys.size()); |
| 160 | |
| 161 | // Check that both versions serialize back to the public version. |
| 162 | std::string pub1 = parse_priv->ToString(); |
| 163 | std::string pub2 = parse_pub->ToString(); |
| 164 | BOOST_CHECK(EqualDescriptor(pub, pub1)); |
| 165 | BOOST_CHECK(EqualDescriptor(pub, pub2)); |
| 166 | |
| 167 | // Check that both can be serialized with private key back to the private version, but not without private key. |
| 168 | if (!(flags & MISSING_PRIVKEYS)) { |
| 169 | std::string prv1; |
| 170 | BOOST_CHECK(parse_priv->ToPrivateString(keys_priv, prv1)); |
| 171 | BOOST_CHECK(EqualDescriptor(prv, prv1)); |
| 172 | BOOST_CHECK(!parse_priv->ToPrivateString(keys_pub, prv1)); |
| 173 | BOOST_CHECK(parse_pub->ToPrivateString(keys_priv, prv1)); |
| 174 | BOOST_CHECK(EqualDescriptor(prv, prv1)); |
| 175 | BOOST_CHECK(!parse_pub->ToPrivateString(keys_pub, prv1)); |
| 176 | } |
| 177 | |
| 178 | // Check that private can produce the normalized descriptors |
| 179 | std::string norm1; |
| 180 | BOOST_CHECK(parse_priv->ToNormalizedString(keys_priv, norm1)); |
| 181 | BOOST_CHECK(EqualDescriptor(norm1, norm_pub)); |
| 182 | BOOST_CHECK(parse_pub->ToNormalizedString(keys_priv, norm1)); |
| 183 | BOOST_CHECK(EqualDescriptor(norm1, norm_pub)); |
| 184 | |
| 185 | // Check whether IsRange on both returns the expected result |
| 186 | BOOST_CHECK_EQUAL(parse_pub->IsRange(), (flags & RANGE) != 0); |
no test coverage detected