#!/usr/bin/env ruby
# iExploder - Generates bad HTML files to perform QA for web browsers.
#
# Copyright 2010 Thomas Stromberg - All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

require 'cgi';
require 'iexploder';

$CONFIG_PATH = 'config.yaml'

ie = IExploder.new($CONFIG_PATH)
cgi = CGI.new("html4");
ie.cgi_url=ENV['SCRIPT_NAME'] || '?'
ie.browser=ENV['HTTP_USER_AGENT'] || 'unknown'
ie.test_num = cgi.params['t'][0].to_i
ie.subtest_data = cgi.params['s'][0] || nil
ie.random_mode = cgi.params['r'][0]
ie.lookup_mode = cgi.params['l'][0]
ie.stop_num = cgi.params['x'][0] || nil
ie.setRandomSeed()

mime_type = cgi.params['m'][0] || nil
if mime_type:
  header_options = ie.buildHeaders(mime_type)
  # The CGI library wants the Content-Type header to be named 'type'. It
  # will post two Content-Type headers otherwise.
  header_options['type'] = header_options['Content-Type'].dup
  header_options.delete('Content-Type')
  cgi.out(header_options) do
    ie.buildMediaFile(mime_type)
  end
else
  cgi.out('type' => 'text/html') do
    ie.buildPage()
  end
end
