#!/usr/bin/env python # coding=utf-8 # # Copyright © 2013 Hewlett-Packard Development Company, L.P. # # This work is distributed under the W3C® Software License [1] # in the hope that it will be useful, but WITHOUT ANY # WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # # [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231 # from __future__ import print_function import sys import os import glob import json import exceptions import collections from apiclient import uritemplate from apiclient import apiclient def runTests(testFileSearch): for testFilePath in glob.glob(testFileSearch): print('Running tests from: ' + testFilePath) with open(testFilePath) as testFile: testData = json.load(testFile, object_pairs_hook = collections.OrderedDict) for testSetName in testData: print(testSetName + ':') testSet = testData[testSetName] vars = testSet['variables'] for test in testSet['testcases']: expectedResult = test[1] try: template = uritemplate.URITemplate(test[0]) except Exception as e: if (expectedResult): print('* FAIL: "' + test[0] + '" got: None, expected "' + expectedResult + '"') else: print(' PASS: "' + test[0] + '" == None') continue result = template.expand(**vars) if (isinstance(expectedResult, basestring)): if (expectedResult != result): print('* FAIL: "' + test[0] + '" got: "' + unicode(result) + '", expected "' + expectedResult + '"') continue elif (isinstance(expectedResult, list)): for possibleResult in expectedResult: if (possibleResult == result): break else: print('* FAIL: "' + test[0] + '" got: "' + unicode(result) + '", expected:') print(" or\n".join([' "' + possibleResult + '"' for possibleResult in expectedResult])) continue elif (not expectedResult): if (result): print('* FAIL "' + test[0] + '" got: "' + unicode(result) + '", expected None') continue else: print('** Unknown expected result type: ' + repr(expectedResult)) print(' PASS: "' + test[0] + '" == "' + result + '"') def debugHook(type, value, tb): if hasattr(sys, 'ps1') or not sys.stderr.isatty(): # we are in interactive mode or we don't have a tty-like # device, so we call the default hook sys.__excepthook__(type, value, tb) else: import traceback, pdb # we are NOT in interactive mode, print the exception... traceback.print_exception(type, value, tb) print() # ...then start the debugger in post-mortem mode. pdb.pm() if __name__ == "__main__": # called from the command line sys.excepthook = debugHook # runTests(os.path.join('test', '*.json')) # runTests(os.path.join('uritemplate-test', 'spec-examples.json')) # runTests(os.path.join('uritemplate-test', '*.json')) ### more tests @ https://github.com/uri-templates/uritemplate-test github = apiclient.APIClient('https://api.github.com/', version = 'vnd.github.beta') print(github.get('user_url', user = 'plinss').data) # shepherd = apiclient.APIClient('https://api.csswg.org/shepherd/', version = 'vnd.csswg.shepherd.v1') shepherd = apiclient.APIClient('https://test.linss.com/shepherd/api', version = 'vnd.csswg.shepherd.v1') print(shepherd.resourceNames) specs = shepherd.resource('specifications') print(specs.variables) # print specs.hints.docs print(shepherd.get('specifications', spec = 'compositing-1', anchors = False).data) suites = shepherd.resource('test_suites') print(suites.variables) print(shepherd.get('test_suites', spec = 'css-shapes-1').data)