File: evaluator_test.rb

package info (click to toggle)
ruby-brandur-json-schema 0.21.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 424 kB
  • sloc: ruby: 4,082; makefile: 7
file content (69 lines) | stat: -rw-r--r-- 2,243 bytes parent folder | download | duplicates (3)
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
require "test_helper"

require "json_pointer"
require "json_schema"

describe JsonPointer::Evaluator do
  before do
    @evaluator = JsonPointer::Evaluator.new(data)
  end

  it "evaluates pointers according to spec" do
    assert_equal data,           @evaluator.evaluate("")
    assert_equal ["bar", "baz"], @evaluator.evaluate("/foo")
    assert_equal "bar",          @evaluator.evaluate("/foo/0")
    assert_equal 0,              @evaluator.evaluate("/")
    assert_equal 1,              @evaluator.evaluate("/a~1b")
    assert_equal 2,              @evaluator.evaluate("/c%d")
    assert_equal 3,              @evaluator.evaluate("/e^f")
    assert_equal 4,              @evaluator.evaluate("/g|h")
    assert_equal 5,              @evaluator.evaluate("/i\\j")
    assert_equal 6,              @evaluator.evaluate("/k\"l")
    assert_equal 7,              @evaluator.evaluate("/ ")
    assert_equal 8,              @evaluator.evaluate("/m~0n")
  end

  it "takes a leading #" do
    assert_equal 0, @evaluator.evaluate("#/")
  end

  it "returns nils on missing values" do
    assert_nil @evaluator.evaluate("/bar")
  end

  it "raises when a path doesn't being with /" do
    e = assert_raises(ArgumentError) { @evaluator.evaluate("foo") }
    assert_equal %{Path must begin with a leading "/": foo.}, e.message
    e = assert_raises(ArgumentError) { @evaluator.evaluate("#foo") }
    assert_equal %{Path must begin with a leading "/": #foo.}, e.message
  end

  it "raises when a non-digit is specified on an array" do
    e = assert_raises(ArgumentError) { @evaluator.evaluate("/foo/bar") }
    assert_equal %{Key operating on an array must be a digit or "-": bar.},
      e.message
  end

  it "can evaluate on a schema object" do
    schema = JsonSchema.parse!(DataScaffold.schema_sample)
    evaluator = JsonPointer::Evaluator.new(schema)
    res = evaluator.evaluate("#/definitions/app/definitions/contrived/allOf/0")
    assert_kind_of JsonSchema::Schema, res
    assert 30, res.max_length
  end

  def data
   {
      "foo"  => ["bar", "baz"],
      ""     => 0,
      "a/b"  => 1,
      "c%d"  => 2,
      "e^f"  => 3,
      "g|h"  => 4,
      "i\\j" => 5,
      "k\"l" => 6,
      " "    => 7,
      "m~n"  => 8
   }
  end
end