<!--

  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License</name></exclude> 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.

-->
<royale-config>

    <compiler>
        <accessible>true</accessible>
        
        <locale/>
        
        <warn-no-constructor>false</warn-no-constructor>
    </compiler>
    
    <typedefs>
        <path-element>../../../target/downloads/jasmine-2.0.js</path-element>
    </typedefs>

    <as-root>../../../target/generated-sources/externc</as-root>
	
	<field-exclude>
        <class>jasmine.Spec</class>
        <field>$injector</field>
    </field-exclude>
    <exclude><class>jasmine.Matchers</class><name>actual</name></exclude><!-- TODO returns T -->

</royale-config>
