1#!/usr/bin/env ruby
2# encoding: utf-8
3
4require 'test/unit'
5require File.join(File.dirname(__FILE__), 'setup_variant')
6
7class TestJSONFixtures < Test::Unit::TestCase
8  def setup
9    fixtures = File.join(File.dirname(__FILE__), 'fixtures/*.json')
10    passed, failed = Dir[fixtures].partition { |f| f['pass'] }
11    @passed = passed.inject([]) { |a, f| a << [ f, File.read(f) ] }.sort
12    @failed = failed.inject([]) { |a, f| a << [ f, File.read(f) ] }.sort
13  end
14
15  def test_passing
16    for name, source in @passed
17      begin
18        assert JSON.parse(source),
19          "Did not pass for fixture '#{name}': #{source.inspect}"
20      rescue => e
21        warn "\nCaught #{e.class}(#{e}) for fixture '#{name}': #{source.inspect}\n#{e.backtrace * "\n"}"
22        raise e
23      end
24    end
25  end
26
27  def test_failing
28    for name, source in @failed
29      assert_raises(JSON::ParserError, JSON::NestingError,
30        "Did not fail for fixture '#{name}': #{source.inspect}") do
31        JSON.parse(source)
32      end
33    end
34  end
35end
36