File: TestURI.cxx

package info (click to toggle)
paraview 5.13.2%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 544,220 kB
  • sloc: cpp: 3,374,605; ansic: 1,332,409; python: 150,381; xml: 122,166; sql: 65,887; sh: 7,317; javascript: 5,262; yacc: 4,417; java: 3,977; perl: 2,363; lex: 1,929; f90: 1,397; makefile: 170; objc: 153; tcl: 59; pascal: 50; fortran: 29
file content (138 lines) | stat: -rw-r--r-- 4,696 bytes parent folder | download | duplicates (2)
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
138
// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
// SPDX-License-Identifier: BSD-3-Clause
#include "vtkNew.h"
#include "vtkTestUtilities.h"
#include "vtkURI.h"

#include <iostream>

#define Check(expr, message)                                                                       \
  do                                                                                               \
  {                                                                                                \
    if (!(expr))                                                                                   \
    {                                                                                              \
      vtkErrorWithObjectMacro(nullptr, "Test failed: \n" << message);                              \
      return false;                                                                                \
    }                                                                                              \
  } while (false)

namespace
{

bool Parse(const std::string& uri)
{
  auto parsed = vtkURI::Parse(uri);
  Check(parsed, "Failed to parse URI \"" + uri + "\"");
  const auto parsedStr = parsed->ToString();
  Check(parsedStr == uri, "Parsed URI (" + parsedStr + ") does not match input (" + uri + ")");

  return true;
}

bool TestParsing()
{
  // full
  Check(Parse("scheme://auth/p/a/t/h?query#frag"), "Parsing failed");

  // parts
  Check(Parse("scheme:"), "Parsing failed");
  Check(Parse("//auth"), "Parsing failed");
  Check(Parse("/p/a/t/h"), "Parsing failed");
  Check(Parse("p/a/t/h"), "Parsing failed");
  Check(Parse("?query"), "Parsing failed");
  Check(Parse("#frag"), "Parsing failed");

  // combinations
  Check(Parse("scheme:/p/a/t/h#frag"), "Parsing failed");
  Check(Parse("scheme://auth#frag"), "Parsing failed");
  Check(Parse("scheme:#frag"), "Parsing failed");
  Check(Parse("scheme:?query#frag"), "Parsing failed");
  Check(Parse("//auth/p/a/t/h?query#frag"), "Parsing failed");
  Check(Parse("p/a/t/h?query#frag"), "Parsing failed");

  return true;
}

bool TestEmptyButDefinedComponents()
{
  auto uri = vtkURI::Parse("s://?#");
  Check(uri->GetScheme(), "Scheme must be defined");
  Check(uri->GetScheme().GetValue() == "s",
    "Scheme must be \"s\", got \"" + uri->GetScheme().GetValue() + "\"");

  Check(uri->GetAuthority(), "Authority must be defined");
  Check(uri->GetAuthority().GetValue().empty(), "Authority must be empty");
  Check(uri->GetPath(), "Path must be defined");
  Check(uri->GetPath().GetValue().empty(), "Path must be empty");
  Check(uri->GetQuery(), "Query must be defined");
  Check(uri->GetQuery().GetValue().empty(), "Query must be empty");
  Check(uri->GetFragment(), "Fragment must be defined");
  Check(uri->GetFragment().GetValue().empty(), "Fragment must be empty");

  const auto uriStr = uri->ToString();
  Check(
    uriStr == "s://?#", "Invalid string recomposition, expected \"s://?#\" got \"" + uriStr + "\"");

  return true;
}

bool TestTypes()
{
  Check(vtkURI::Parse("s:")->IsAbsolute(), "\"s:\" must be absolute");
  Check(!vtkURI::Parse("s:#f")->IsAbsolute(), "\"s:#f\" must not be absolute");

  Check(vtkURI::Parse("//")->IsRelative(), "\"//\" must be relative");
  Check(vtkURI::Parse("p")->IsRelative(), "\"p\" must be relative");
  Check(vtkURI::Parse("?")->IsRelative(), "\"?\" must be relative");
  Check(vtkURI::Parse("#")->IsRelative(), "\"#\" must be relative");
  Check(vtkURI::Parse("///?#")->IsRelative(), "\"///?#\" must be relative");
  Check(!vtkURI::Parse("s:")->IsRelative(), "\"s:\" must not be relative");

  Check(vtkURI::Parse("s:///")->IsFull(), "\"s:///\" must be full");
  Check(vtkURI::Parse("s:///?#")->IsFull(), "\"s:///?#\" must be full");
  Check(!vtkURI::Parse("///?#")->IsFull(), "\"///?#\" must not be full");

  Check(vtkURI::Parse("#")->IsSameDocRef(), "\"s:///\" must be same document reference");
  Check(!vtkURI::Parse("s:///?#")->IsSameDocRef(), "\"s:///?#\" must be full");

  Check(vtkURI::Parse("")->IsEmpty(), "\"\" must be empty");
  Check(!vtkURI::Parse("x")->IsEmpty(), "\"x\" must not be empty");

  return true;
}

bool TestPercentEncoding()
{
  const std::string str{ "Th1s; is/ \\@ #string \xF2\t \n !" };
  Check(vtkURI::PercentDecode(vtkURI::PercentEncode(str)) == str,
    "Failed to encode/decode percent-encoded string");

  return true;
}

}

int TestURI(int, char*[])
{
  if (!TestParsing())
  {
    return EXIT_FAILURE;
  }

  if (!TestEmptyButDefinedComponents())
  {
    return EXIT_FAILURE;
  }

  if (!TestTypes())
  {
    return EXIT_FAILURE;
  }

  if (!TestPercentEncoding())
  {
    return EXIT_FAILURE;
  }

  return EXIT_SUCCESS;
}