<!--
  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"); 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.
  -->

<test-suite suite-name="basetests"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/test-suite.xsd">
    <test-group case-name="basetests">
        <junit-test-suite class-name="org.ofbiz.base.lang.test.ComparableRangeTests"/>
        <junit-test-suite class-name="org.ofbiz.base.util.test.IndentingWriterTests"/>
        <junit-test-suite class-name="org.ofbiz.base.util.test.ObjectTypeTests"/>
        <junit-test-suite class-name="org.ofbiz.base.util.test.UtilObjectTests"/>
        <junit-test-suite class-name="org.ofbiz.base.util.string.test.FlexibleStringExpanderTests"/>
        <junit-test-suite class-name="org.ofbiz.base.util.collections.test.FlexibleMapAccessorTests"/>
        <junit-test-suite class-name="org.ofbiz.base.util.test.TimeDurationTests"/>
        <junit-test-suite class-name="org.ofbiz.base.util.cache.test.UtilCacheTests"/>
        <junit-test-suite class-name="org.ofbiz.base.conversion.test.DateTimeTests"/>
        <junit-test-suite class-name="org.ofbiz.base.conversion.test.MiscTests"/>
        <junit-test-suite class-name="org.ofbiz.base.concurrent.test.DependencyPoolTests"/>
        <junit-test-suite class-name="org.ofbiz.base.json.test.JSONTests"/>
        <junit-test-suite class-name="org.ofbiz.base.util.test.UtilIOTests"/>
        <junit-test-suite class-name="org.ofbiz.base.test.BaseUnitTests"/>
    </test-group>
</test-suite>
