1*2cb6d6f1SJim Jagielski################################################################ 2*2cb6d6f1SJim Jagielski# 3*2cb6d6f1SJim Jagielski# Licensed to the Apache Software Foundation (ASF) under one 4*2cb6d6f1SJim Jagielski# or more contributor license agreements. See the NOTICE file 5*2cb6d6f1SJim Jagielski# distributed with this work for additional information 6*2cb6d6f1SJim Jagielski# regarding copyright ownership. The ASF licenses this file 7*2cb6d6f1SJim Jagielski# to you under the Apache License, Version 2.0 (the 8*2cb6d6f1SJim Jagielski# "License"); you may not use this file except in compliance 9*2cb6d6f1SJim Jagielski# with the License. You may obtain a copy of the License at 10*2cb6d6f1SJim Jagielski# 11*2cb6d6f1SJim Jagielski# http://www.apache.org/licenses/LICENSE-2.0 12*2cb6d6f1SJim Jagielski# 13*2cb6d6f1SJim Jagielski# Unless required by applicable law or agreed to in writing, 14*2cb6d6f1SJim Jagielski# software distributed under the License is distributed on an 15*2cb6d6f1SJim Jagielski# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*2cb6d6f1SJim Jagielski# KIND, either express or implied. See the License for the 17*2cb6d6f1SJim Jagielski# specific language governing permissions and limitations 18*2cb6d6f1SJim Jagielski# under the License. 19*2cb6d6f1SJim Jagielski# 20*2cb6d6f1SJim Jagielski################################################################ 21*2cb6d6f1SJim Jagielski 22*2cb6d6f1SJim Jagielski"""Builds a small extension (a Python UNO component) with zipfile, so installing one needs no compiler or JRE.""" 23*2cb6d6f1SJim Jagielskiimport zipfile 24*2cb6d6f1SJim Jagielskifrom pathlib import Path 25*2cb6d6f1SJim Jagielski 26*2cb6d6f1SJim JagielskiIDENTIFIER = "org.apache.openoffice.aootest.testextension" 27*2cb6d6f1SJim JagielskiSERVICE = "com.sun.star.comp.smoketest.TestExtension" 28*2cb6d6f1SJim JagielskiIMPLEMENTATION = "com.sun.star.comp.smoketest.TestExtension$_TestExtension" 29*2cb6d6f1SJim JagielskiFILE_NAME = "TestExtension.oxt" 30*2cb6d6f1SJim Jagielski 31*2cb6d6f1SJim JagielskiCOMPONENT = """import unohelper 32*2cb6d6f1SJim Jagielskifrom com.sun.star.lang import XServiceInfo 33*2cb6d6f1SJim Jagielski 34*2cb6d6f1SJim JagielskiIMPL = %(impl)r 35*2cb6d6f1SJim JagielskiSERVICE = %(service)r 36*2cb6d6f1SJim Jagielski 37*2cb6d6f1SJim Jagielski 38*2cb6d6f1SJim Jagielskiclass TestExtension(unohelper.Base, XServiceInfo): 39*2cb6d6f1SJim Jagielski def __init__(self, ctx): 40*2cb6d6f1SJim Jagielski self.ctx = ctx 41*2cb6d6f1SJim Jagielski 42*2cb6d6f1SJim Jagielski def getImplementationName(self): 43*2cb6d6f1SJim Jagielski return IMPL 44*2cb6d6f1SJim Jagielski 45*2cb6d6f1SJim Jagielski def supportsService(self, name): 46*2cb6d6f1SJim Jagielski return name == SERVICE 47*2cb6d6f1SJim Jagielski 48*2cb6d6f1SJim Jagielski def getSupportedServiceNames(self): 49*2cb6d6f1SJim Jagielski return (SERVICE,) 50*2cb6d6f1SJim Jagielski 51*2cb6d6f1SJim Jagielski 52*2cb6d6f1SJim Jagielskig_ImplementationHelper = unohelper.ImplementationHelper() 53*2cb6d6f1SJim Jagielskig_ImplementationHelper.addImplementation(TestExtension, IMPL, (SERVICE,)) 54*2cb6d6f1SJim Jagielski""" % {"impl": IMPLEMENTATION, "service": SERVICE} 55*2cb6d6f1SJim Jagielski 56*2cb6d6f1SJim JagielskiMANIFEST = """<?xml version="1.0" encoding="UTF-8"?> 57*2cb6d6f1SJim Jagielski<manifest:manifest xmlns:manifest="http://openoffice.org/2001/manifest"> 58*2cb6d6f1SJim Jagielski <manifest:file-entry manifest:full-path="testextension.py" manifest:media-type="application/vnd.sun.star.uno-component;type=Python"/> 59*2cb6d6f1SJim Jagielski</manifest:manifest> 60*2cb6d6f1SJim Jagielski""" 61*2cb6d6f1SJim Jagielski 62*2cb6d6f1SJim JagielskiDESCRIPTION = """<?xml version="1.0" encoding="UTF-8"?> 63*2cb6d6f1SJim Jagielski<description xmlns="http://openoffice.org/extensions/description/2006" xmlns:xlink="http://www.w3.org/1999/xlink"> 64*2cb6d6f1SJim Jagielski <identifier value="%s"/> 65*2cb6d6f1SJim Jagielski <version value="1.0"/> 66*2cb6d6f1SJim Jagielski <display-name><name lang="en">AOO test suite extension</name></display-name> 67*2cb6d6f1SJim Jagielski</description> 68*2cb6d6f1SJim Jagielski""" % IDENTIFIER 69*2cb6d6f1SJim Jagielski 70*2cb6d6f1SJim Jagielski 71*2cb6d6f1SJim Jagielskidef build(directory): 72*2cb6d6f1SJim Jagielski """Writes TestExtension.oxt into `directory` and returns its path.""" 73*2cb6d6f1SJim Jagielski path = Path(directory) / FILE_NAME 74*2cb6d6f1SJim Jagielski with zipfile.ZipFile(path, "w", zipfile.ZIP_DEFLATED) as z: 75*2cb6d6f1SJim Jagielski z.writestr("META-INF/manifest.xml", MANIFEST) 76*2cb6d6f1SJim Jagielski z.writestr("description.xml", DESCRIPTION) 77*2cb6d6f1SJim Jagielski z.writestr("testextension.py", COMPONENT) 78*2cb6d6f1SJim Jagielski return path 79