blob: 5389759bce0a0b51bc6bb27f05781906b2091a00 [file]
/*
* 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.
*/
import org.junit.jupiter.api.Test
import static groovy.test.GroovyAssert.assertScript
final class PackageTest {
@Test
void testPackages() {
assertScript '''
// tag::package_statement[]
// defining a package named com.yoursite
package com.yoursite
// end::package_statement[]
class Foo { }
def foo = new Foo()
assert foo != null
assert Foo.class.name == 'com.yoursite.Foo'
'''
assertScript '''
//tag::import_statement[]
// importing the class MarkupBuilder
import groovy.xml.MarkupBuilder
// using the imported class to create an object
def xml = new MarkupBuilder()
assert xml != null
// end::import_statement[]
'''
}
@Test
void testDefaultImports() {
assertScript '''
// tag::default_import[]
long time = LocalDateTime.now().toEpochSecond(ZoneOffset.UTC)
Date date = new Date(time)
// end::default_import[]
'''
}
@Test
void testMultipleImportsFromSamePackage() {
assertScript '''
// tag::multiple_import[]
import groovy.xml.MarkupBuilder
import groovy.xml.StreamingMarkupBuilder
def markupBuilder = new MarkupBuilder()
assert markupBuilder != null
assert new StreamingMarkupBuilder() != null
// end::multiple_import[]
'''
}
@Test
void testStarImports() {
assertScript '''
// tag::star_import[]
import groovy.xml.*
def markupBuilder = new MarkupBuilder()
assert markupBuilder != null
assert new StreamingMarkupBuilder() != null
// end::star_import[]
'''
}
@Test
void testStaticImports() {
assertScript '''
// tag::static_imports[]
import static java.lang.Boolean.FALSE
assert !FALSE //use directly, without Boolean prefix!
// end::static_imports[]
'''
}
@Test
void testStaticImportAlias() {
assertScript '''
// tag::static_importswithas[]
import static Calendar.getInstance as now
assert now().class == Calendar.getInstance().class
// end::static_importswithas[]
'''
}
@Test
void testStaticStarImport() {
assertScript '''
// tag::static_importswithstar[]
import static java.lang.Math.*
assert sin(0) == 0.0
assert cos(0) == 1.0
// end::static_importswithstar[]
'''
}
@Test
void testStaticStarImportSameMethodNameDifferentParameterType() {
assertScript '''
// tag::static_import_same_method_name_different_parameter_type[]
import static java.lang.String.format // <1>
class SomeClass {
String format(Integer i) { // <2>
i.toString()
}
static void main(String[] args) {
assert format('String') == 'String' // <3>
assert new SomeClass().format(Integer.valueOf(1)) == '1'
}
}
// end::static_import_same_method_name_different_parameter_type[]
'''
}
@Test
void testAliasImport() {
assertScript '''
// tag::alias_import[]
import java.util.Date
import java.sql.Date as SQLDate
Date utilDate = new Date(1000L)
SQLDate sqlDate = new SQLDate(1000L)
assert utilDate instanceof java.util.Date
assert sqlDate instanceof java.sql.Date
// end::alias_import[]
'''
}
@Test
void testModuleImport() {
assertScript '''
// tag::module_import[]
import module java.sql
assert Connection.name == 'java.sql.Connection'
assert DriverManager.name == 'java.sql.DriverManager'
// end::module_import[]
'''
}
@Test
void testModuleImportTransitive() {
assertScript '''
// tag::module_import_transitive[]
import module java.sql
// Direct exports of java.sql
assert Connection.name == 'java.sql.Connection'
// From java.xml (requires transitive)
assert Source.name == 'javax.xml.transform.Source'
// From java.logging (requires transitive)
assert Logger.name == 'java.util.logging.Logger'
// end::module_import_transitive[]
'''
}
@Test
void testModuleImportWithExplicit() {
assertScript '''
// tag::module_import_with_explicit[]
import module java.desktop
import java.util.List
// The explicit single-type import wins over the
// module-expanded java.awt.List
assert List.name == 'java.util.List'
// end::module_import_with_explicit[]
'''
}
}