def test_parse_project_descriptor_with_customized_bit_compilation(self): yaml_contents = { 'name': 'bender bender rodriguez', 'version': '1.0', 'description': 'kill all humans', 'build': { 'packages': { 'cpmhub/http': None }, 'bits': { 'sqlite3': { 'version': '3.32.3', 'cflags': ['-DCUSTOM_BIT_DEFINE'], 'target': 'arduinoNano33' } } } } project = project_descriptor_parser.parse_yaml(yaml_contents) assert project.build.packages == [ project_descriptor.PackageDescription('cpmhub/http') ] assert project.build.declared_bits[ 0] == project_descriptor.DeclaredBit( name='sqlite3', version='3.32.3', cflags=['-DCUSTOM_BIT_DEFINE'], target='arduinoNano33')
def test_parse_project_descriptor_with_default_target_image(self): yaml_contents = { 'name': 'bender bender rodriguez', 'version': '1.0', 'description': 'kill all humans', 'targets': { 'default': { 'image': 'cpmbits/bender', 'main': 'main.c', 'test_image': 'cpmbits/bender_test', 'test_dockerfile': 'test.Dockerfile', 'toolchain_prefix': 'arm-linux-gnueabi-' } } } project = project_descriptor_parser.parse_yaml(yaml_contents) assert project.targets == { 'default': project_descriptor.TargetDescription( 'default', image='cpmbits/bender', main='main.c', test_image='cpmbits/bender_test', test_dockerfile='test.Dockerfile', toolchain_prefix='arm-linux-gnueabi-') }
def test_parse_project_descriptor_with_target_build_compilation_plan(self): yaml_contents = { 'name': 'bender bender rodriguez', 'version': '1.0', 'description': 'kill all humans', 'targets': { 'arduino': { 'dockerfile': 'Dockerfile', 'build': { 'packages': { 'arduino': {}, }, 'ldflags': ['-Wl,--wrap=malloc'] }, 'post_build': ['./scripts/package.sh'] } } } project = project_descriptor_parser.parse_yaml(yaml_contents) assert project.targets['arduino'].build.packages == [ project_descriptor.PackageDescription('arduino') ] assert project.targets['arduino'].build.ldflags == [ '-Wl,--wrap=malloc' ] assert project.build_packages() == [ project_descriptor.PackageDescription('arduino') ] assert project.targets['arduino'].dockerfile == 'Dockerfile' assert project.targets['arduino'].post_build == [ './scripts/package.sh' ]
def test_parse_project_descriptor_with_just_the_project_information( self, filesystem): yaml_payload = '''name: 'bender bender rodriguez' version: '1.0' description: 'kill all humans' build: packages: bits: cflags: test: targets: ''' yaml = YAML() yaml_document = yaml.load(yaml_payload) project_descriptor = project_descriptor_parser.parse_yaml( yaml_document) project_descriptor.yaml_document = yaml_document project_descriptor_editor.update('.', project_descriptor, { 'name': 'pepito', 'version': '1.0.0' }) filesystem.write_file.assert_called_with( f'./{PROJECT_DESCRIPTOR_FILE}', '''name: pepito version: 1.0.0 description: kill all humans build: packages: bits: cflags: test: targets: ''')
def test_should_compose_project_from_project_description_with_one_build_package( self, filesystem): yaml_load = { 'name': 'HalfLife3', 'build': { 'packages': { 'shaders': { 'cflags': ['-DUSE_PORTAL_GUN'] } }, 'cflags': ['-Wall'], 'ldflags': ['-pg'], 'libraries': ['pthread'] } } filesystem.find.side_effect = [['shaders/shader.cpp'], ['shaders/water.c'], []] filesystem.parent_directory.return_value = '.' project_description = project_descriptor_parser.parse_yaml(yaml_load) project = project_composer.compose(project_description) assert len(project.targets['default'].packages) == 1 assert project.targets['default'].packages[0].path == 'shaders' assert project.targets['default'].packages[0].sources == [ 'shaders/shader.cpp', 'shaders/water.c' ] assert project.targets['default'].packages[0].cflags == [ '-DUSE_PORTAL_GUN' ] assert project.targets['default'].cflags == ['-Wall'] assert project.targets['default'].ldflags == ['-pg'] assert project.targets['default'].libraries == ['pthread'] assert project.targets['default'].include_directories == {'.'}
def test_parse_project_descriptor_with_build_compilation_plan(self): yaml_contents = { 'name': 'bender bender rodriguez', 'version': '1.0', 'description': 'kill all humans', 'build': { 'packages': { 'cpmhub/bits': { 'cflags': ['-DHOLA'] }, 'cpmhub/http': None }, 'bits': { 'sqlite3': '3.32.3' }, 'cflags': ['-std=c++11'], 'ldflags': ['-pg'], 'libraries': ['pthread'] } } project = project_descriptor_parser.parse_yaml(yaml_contents) assert project.build.packages == [ project_descriptor.PackageDescription('cpmhub/bits', cflags=['-DHOLA']), project_descriptor.PackageDescription('cpmhub/http') ] assert project.build.cflags == ['-std=c++11'] assert project.build.ldflags == ['-pg'] assert project.build.libraries == ['pthread'] assert len(project.build.declared_bits) == 1 assert project.build.declared_bits[ 0] == project_descriptor.DeclaredBit('sqlite3', '3.32.3')
def test_compose_from_description_with_customized_bit_compilation(self, filesystem): yaml_load = { 'name': 'HalfLife3', 'build': { 'bits': { 'arduino': { 'version': '1.0.0', 'target': 'nano33', 'cflags': ['-DBIT_FLAG'] } } } } filesystem.find.side_effect = [['tests/test_one.cpp'], ['nano33/nano33.cpp'], []] filesystem.parent_directory.return_value = '.' project_description = project_descriptor_parser.parse_yaml(yaml_load) arduino_bit = ProjectDescriptor( name='arduino', targets={ 'nano33': TargetDescription( name='nano33', build=CompilationPlan( cflags=['-mcpu=atmel'], packages=[PackageDescription(path='nano33')] ) ) }, declared_bit=project_description.build.declared_bits[0] ) project_description.build.bits['arduino'] = arduino_bit project = project_composer.compose(project_description, 'default') assert project.target.bits[0].packages[0].path == 'bits/arduino/nano33' assert project.target.bits[0].packages[0].cflags == ['-mcpu=atmel', '-DBIT_FLAG']
def test_should_compose_project_from_project_description_with_one_test(self, filesystem): yaml_load = { 'name': 'HalfLife3', } filesystem.find.side_effect = [['tests/test_one.cpp']] filesystem.parent_directory.return_value = '.' project_description = project_descriptor_parser.parse_yaml(yaml_load) project = project_composer.compose(project_description, 'default') assert len(project.test.test_suites) == 1 assert project.test.test_suites[0].name == 'test_one' assert project.test.test_suites[0].main == 'tests/test_one.cpp'
def test_should_compose_project_from_project_description_without_packages(self): yaml_load = { 'name': 'HalfLife3', 'version': '1.0', 'description': 'I want to believe' } project_description = project_descriptor_parser.parse_yaml(yaml_load) project = project_composer.compose(project_description, 'default') assert project.name == 'HalfLife3' assert project.version == '1.0' assert project.description == 'I want to believe' assert project.target.name == 'default' assert project.target.main == 'main.cpp'
def test_parse_project_descriptor_with_test_compilation_plan(self): yaml_contents = { 'name': 'bender bender rodriguez', 'version': '1.0', 'description': 'kill all humans', 'test': { 'packages': { 'cpmhub/bits': {}, 'cpmhub/http': {} } } } project = project_descriptor_parser.parse_yaml(yaml_contents) assert project.test.packages == [ project_descriptor.PackageDescription('cpmhub/bits'), project_descriptor.PackageDescription('cpmhub/http') ]
def test_parse_project_descriptor_with_default_target_image(self): yaml_contents = { 'name': 'bender bender rodriguez', 'version': '1.0', 'description': 'kill all humans', 'targets': { 'default': { 'image': 'cpmbits/bender', 'main': 'main.c' } } } project = project_descriptor_parser.parse_yaml(yaml_contents) assert project.targets == { 'default': project_descriptor.TargetDescription('default', image='cpmbits/bender', main='main.c') }
def test_should_compose_project_from_project_description_with_one_target_build_package(self, filesystem): yaml_load = { 'name': 'HalfLife3', 'targets': { 'default': { 'build': { 'packages': { 'shaders': { 'cflags': ['-DUSE_PORTAL_GUN'] } }, 'cflags': ['-Wall'], 'ldflags': ['-pg'], 'libraries': ['pthread'] }, 'post_build': ['./post_build.sh'], 'main': 'main.c', 'image': 'cpmbits/docker', 'test_image': 'cpmbits/docker_test', 'test_dockerfile': 'test.Dockerfile', 'toolchain_prefix': 'arm-linux-gnueabi-' } } } filesystem.find.side_effect = [['shaders/shader.cpp'], ['shaders/water.c'], []] filesystem.parent_directory.return_value = '.' project_description = project_descriptor_parser.parse_yaml(yaml_load) project = project_composer.compose(project_description, 'default') assert len(project.target.packages) == 1 assert project.target.packages[0].path == 'shaders' assert project.target.packages[0].sources == ['shaders/shader.cpp', 'shaders/water.c'] assert project.target.packages[0].cflags == ['-DUSE_PORTAL_GUN', '-Wall'] assert project.target.cflags == ['-Wall'] assert project.target.ldflags == ['-pg'] assert project.target.libraries == ['pthread'] assert project.target.include_directories == {'.'} assert project.target.post_build == ['./post_build.sh'] assert project.target.main == 'main.c' assert project.target.image == 'cpmbits/docker' assert project.target.test_image == 'cpmbits/docker_test' assert project.target.test_dockerfile == 'test.Dockerfile' assert project.target.toolchain_prefix == 'arm-linux-gnueabi-'
def test_parse_project_descriptor_with_target_test_compilation_plan(self): yaml_contents = { 'name': 'bender bender rodriguez', 'version': '1.0', 'description': 'kill all humans', 'targets': { 'arduino': { 'image': 'cpmbits/arduino', 'test': { 'packages': { 'arduino': {}, } } } } } project = project_descriptor_parser.parse_yaml(yaml_contents) assert project.targets['arduino'].test.packages == [ project_descriptor.PackageDescription('arduino') ]
def test_parse_project_descriptor_with_just_the_project_information(self): yaml_contents = { 'name': 'bender bender rodriguez', 'version': '1.0', 'description': 'kill all humans', 'build': { 'packages': None, 'bits': None, 'cflags': None }, 'test': None, 'targets': None } project = project_descriptor_parser.parse_yaml(yaml_contents) assert project == project_descriptor.ProjectDescriptor( name='bender bender rodriguez', version='1.0', description='kill all humans', targets={ 'default': project_descriptor.TargetDescription('default') })
def test_parse_project_descriptor_with_target_build_compilation_plan(self): yaml_contents = { 'name': 'bender bender rodriguez', 'version': '1.0', 'description': 'kill all humans', 'targets': { 'arduino': { 'dockerfile': 'Dockerfile', 'build': { 'packages': { 'arduino': {}, } } } } } project = project_descriptor_parser.parse_yaml(yaml_contents) assert project.targets['arduino'].build.packages == [ project_descriptor.PackageDescription('arduino') ] assert project.targets['arduino'].dockerfile == 'Dockerfile'