Skip to content

Commit

Permalink
Processor now invokes merge known objects task.
Browse files Browse the repository at this point in the history
  • Loading branch information
tomaz committed Dec 6, 2012
1 parent f3c0dc9 commit 0b5179c
Show file tree
Hide file tree
Showing 5 changed files with 191 additions and 159 deletions.
336 changes: 177 additions & 159 deletions AppledocTests/Processing/ProcessorTests.mm
Expand Up @@ -74,203 +74,221 @@ - (NSInteger)processCommentForObject:(ObjectInfoBase *)object context:(ObjectInf
});
});

describe(@"running:", ^{
describe(@"top level objects:", ^{
it(@"should enumerate classes", ^{
runWithProcessor(^(Processor *processor) {
// setup
id settings = mock([GBSettings class]);
id classes = mock([NSArray class]);
id store = mock([Store class]);
[given([store storeClasses]) willReturn:classes];
// execute
[processor runWithSettings:settings store:store];
// verify
gbcatch([verify(classes) enumerateObjectsUsingBlock:(id)anything()]);
});
describe(@"objects processing:", ^{
it(@"should invoke merge known objects task", ^{
runWithProcessor(^(Processor *processor) {
// setup
id settings = mock([GBSettings class]);
id store = mock([Store class]);
id task = mock([ProcessorTask class]);
processor.mergeKnownObjectsTask = task;
// execute
[processor runWithSettings:settings store:store];
// verify
gbcatch([verify(task) runTask]);
});
});
});

it(@"should enumerate extensions", ^{
runWithProcessor(^(Processor *processor) {
// setup
id settings = mock([GBSettings class]);
id extensions = mock([NSArray class]);
id store = mock([Store class]);
[given([store storeExtensions]) willReturn:extensions];
// execute
[processor runWithSettings:settings store:store];
// verify
gbcatch([verify(extensions) enumerateObjectsUsingBlock:(id)anything()]);
describe(@"comment processing:", ^{
describe(@"enumerating objects:", ^{
describe(@"top level objects:", ^{
it(@"should enumerate classes", ^{
runWithProcessor(^(Processor *processor) {
// setup
id settings = mock([GBSettings class]);
id classes = mock([NSArray class]);
id store = mock([Store class]);
[given([store storeClasses]) willReturn:classes];
// execute
[processor runWithSettings:settings store:store];
// verify
gbcatch([verify(classes) enumerateObjectsUsingBlock:(id)anything()]);
});
});
});

it(@"should enumerate categories", ^{
runWithProcessor(^(Processor *processor) {
// setup
id settings = mock([GBSettings class]);
id categories = mock([NSArray class]);
id store = mock([Store class]);
[given([store storeCategories]) willReturn:categories];
// execute
[processor runWithSettings:settings store:store];
// verify
gbcatch([verify(categories) enumerateObjectsUsingBlock:(id)anything()]);

it(@"should enumerate extensions", ^{
runWithProcessor(^(Processor *processor) {
// setup
id settings = mock([GBSettings class]);
id extensions = mock([NSArray class]);
id store = mock([Store class]);
[given([store storeExtensions]) willReturn:extensions];
// execute
[processor runWithSettings:settings store:store];
// verify
gbcatch([verify(extensions) enumerateObjectsUsingBlock:(id)anything()]);
});
});

it(@"should enumerate categories", ^{
runWithProcessor(^(Processor *processor) {
// setup
id settings = mock([GBSettings class]);
id categories = mock([NSArray class]);
id store = mock([Store class]);
[given([store storeCategories]) willReturn:categories];
// execute
[processor runWithSettings:settings store:store];
// verify
gbcatch([verify(categories) enumerateObjectsUsingBlock:(id)anything()]);
});
});

it(@"should enumerate protocols", ^{
runWithProcessor(^(Processor *processor) {
// setup
id settings = mock([GBSettings class]);
id protocols = mock([NSArray class]);
id store = mock([Store class]);
[given([store storeProtocols]) willReturn:protocols];
// execute
[processor runWithSettings:settings store:store];
// verify
gbcatch([verify(protocols) enumerateObjectsUsingBlock:(id)anything()]);
});
});
});

it(@"should enumerate protocols", ^{
runWithProcessor(^(Processor *processor) {
// setup
id settings = mock([GBSettings class]);
id protocols = mock([NSArray class]);
id store = mock([Store class]);
[given([store storeProtocols]) willReturn:protocols];
// execute
[processor runWithSettings:settings store:store];
// verify
gbcatch([verify(protocols) enumerateObjectsUsingBlock:(id)anything()]);
describe(@"members:", ^{
__block InterfaceInfoBase *object;
__block id classMethods;
__block id interfaceMethods;
__block id properties;

beforeEach(^{
classMethods = mock([NSArray class]);
interfaceMethods = mock([NSArray class]);
properties = mock([NSArray class]);
object = [[[InterfaceInfoBase alloc] init] autorelease];
object.interfaceClassMethods = classMethods;
object.interfaceInstanceMethods = interfaceMethods;
object.interfaceProperties = properties;
});

it(@"should enumerate class members", ^{
runWithProcessor(^(Processor *processor) {
// setup
id settings = mock([GBSettings class]);
id store = mock([Store class]);
[given([store storeClasses]) willReturn:@[object]];
// execute
[processor runWithSettings:settings store:store];
// verify
gbcatch([verify(classMethods) enumerateObjectsUsingBlock:(id)anything()]);
gbcatch([verify(interfaceMethods) enumerateObjectsUsingBlock:(id)anything()]);
gbcatch([verify(properties) enumerateObjectsUsingBlock:(id)anything()]);
});
});

it(@"should enumerate extension members", ^{
runWithProcessor(^(Processor *processor) {
// setup
id settings = mock([GBSettings class]);
id store = mock([Store class]);
[given([store storeExtensions]) willReturn:@[object]];
// execute
[processor runWithSettings:settings store:store];
// verify
gbcatch([verify(classMethods) enumerateObjectsUsingBlock:(id)anything()]);
gbcatch([verify(interfaceMethods) enumerateObjectsUsingBlock:(id)anything()]);
gbcatch([verify(properties) enumerateObjectsUsingBlock:(id)anything()]);
});
});

it(@"should enumerate category members", ^{
runWithProcessor(^(Processor *processor) {
// setup
id settings = mock([GBSettings class]);
id store = mock([Store class]);
[given([store storeCategories]) willReturn:@[object]];
// execute
[processor runWithSettings:settings store:store];
// verify
gbcatch([verify(classMethods) enumerateObjectsUsingBlock:(id)anything()]);
gbcatch([verify(interfaceMethods) enumerateObjectsUsingBlock:(id)anything()]);
gbcatch([verify(properties) enumerateObjectsUsingBlock:(id)anything()]);
});
});

it(@"should enumerate protocol members", ^{
runWithProcessor(^(Processor *processor) {
// setup
id settings = mock([GBSettings class]);
id store = mock([Store class]);
[given([store storeProtocols]) willReturn:@[object]];
// execute
[processor runWithSettings:settings store:store];
// verify
gbcatch([verify(classMethods) enumerateObjectsUsingBlock:(id)anything()]);
gbcatch([verify(interfaceMethods) enumerateObjectsUsingBlock:(id)anything()]);
gbcatch([verify(properties) enumerateObjectsUsingBlock:(id)anything()]);
});
});
});
});
describe(@"members:", ^{
__block InterfaceInfoBase *object;
__block id classMethods;
__block id interfaceMethods;
__block id properties;

describe(@"processing comments:", ^{
__block id context;
__block id object;
__block id comment;
__block id componentsTask;

beforeEach(^{
classMethods = mock([NSArray class]);
interfaceMethods = mock([NSArray class]);
properties = mock([NSArray class]);
object = [[[InterfaceInfoBase alloc] init] autorelease];
object.interfaceClassMethods = classMethods;
object.interfaceInstanceMethods = interfaceMethods;
object.interfaceProperties = properties;
comment = [[CommentInfo alloc] init];
context = mock([ObjectInfoBase class]);
object = mock([ObjectInfoBase class]);
componentsTask = mock([ProcessorCommentTask class]);
});

it(@"should enumerate class members", ^{
it(@"should invoke split comment to sections task if comment given", ^{
runWithProcessor(^(Processor *processor) {
// setup
id settings = mock([GBSettings class]);
id store = mock([Store class]);
[given([store storeClasses]) willReturn:@[object]];
[given([object comment]) willReturn:comment];
processor.splitCommentToSectionsTask = componentsTask;
// execute
[processor runWithSettings:settings store:store];
[processor processCommentForObject:object context:context];
// verify
gbcatch([verify(classMethods) enumerateObjectsUsingBlock:(id)anything()]);
gbcatch([verify(interfaceMethods) enumerateObjectsUsingBlock:(id)anything()]);
gbcatch([verify(properties) enumerateObjectsUsingBlock:(id)anything()]);
gbcatch([verify(componentsTask) processCommentForObject:object context:context]);
});
});
it(@"should enumerate extension members", ^{

it(@"should invoke register comment components task if comment given", ^{
runWithProcessor(^(Processor *processor) {
// setup
id settings = mock([GBSettings class]);
id store = mock([Store class]);
[given([store storeExtensions]) willReturn:@[object]];
[given([object comment]) willReturn:comment];
processor.registerCommentComponentsTask = componentsTask;
// execute
[processor runWithSettings:settings store:store];
[processor processCommentForObject:object context:context];
// verify
gbcatch([verify(classMethods) enumerateObjectsUsingBlock:(id)anything()]);
gbcatch([verify(interfaceMethods) enumerateObjectsUsingBlock:(id)anything()]);
gbcatch([verify(properties) enumerateObjectsUsingBlock:(id)anything()]);
gbcatch([verify(componentsTask) processCommentForObject:object context:context]);
});
});

it(@"should enumerate category members", ^{
it(@"should invoke detect cross references task if comment given", ^{
runWithProcessor(^(Processor *processor) {
// setup
id settings = mock([GBSettings class]);
id store = mock([Store class]);
[given([store storeCategories]) willReturn:@[object]];
[given([object comment]) willReturn:comment];
processor.detectCrossReferencesTask = componentsTask;
// execute
[processor runWithSettings:settings store:store];
[processor processCommentForObject:object context:context];
// verify
gbcatch([verify(classMethods) enumerateObjectsUsingBlock:(id)anything()]);
gbcatch([verify(interfaceMethods) enumerateObjectsUsingBlock:(id)anything()]);
gbcatch([verify(properties) enumerateObjectsUsingBlock:(id)anything()]);
gbcatch([verify(componentsTask) processCommentForObject:object context:context]);
});
});

it(@"should enumerate protocol members", ^{
it(@"should ignore all required tasks if comment is not given", ^{
runWithProcessor(^(Processor *processor) {
// setup
id settings = mock([GBSettings class]);
id store = mock([Store class]);
[given([store storeProtocols]) willReturn:@[object]];
[given([object comment]) willReturn:nil];
processor.splitCommentToSectionsTask = componentsTask;
// execute
[processor runWithSettings:settings store:store];
// verify
gbcatch([verify(classMethods) enumerateObjectsUsingBlock:(id)anything()]);
gbcatch([verify(interfaceMethods) enumerateObjectsUsingBlock:(id)anything()]);
gbcatch([verify(properties) enumerateObjectsUsingBlock:(id)anything()]);
[processor processCommentForObject:object context:context];
// verify - we should fail because the method should not be invoked when comment is nil.
gbfail([verify(componentsTask) processCommentForObject:object context:context]);
});
});
});
});

describe(@"processing comments:", ^{
__block id context;
__block id object;
__block id comment;
__block id componentsTask;

beforeEach(^{
comment = [[CommentInfo alloc] init];
context = mock([ObjectInfoBase class]);
object = mock([ObjectInfoBase class]);
componentsTask = mock([ProcessorCommentTask class]);
});

it(@"should invoke split comment to sections task if comment given", ^{
runWithProcessor(^(Processor *processor) {
// setup
[given([object comment]) willReturn:comment];
processor.splitCommentToSectionsTask = componentsTask;
// execute
[processor processCommentForObject:object context:context];
// verify
gbcatch([verify(componentsTask) processCommentForObject:object context:context]);
});
});

it(@"should invoke register comment components task if comment given", ^{
runWithProcessor(^(Processor *processor) {
// setup
[given([object comment]) willReturn:comment];
processor.registerCommentComponentsTask = componentsTask;
// execute
[processor processCommentForObject:object context:context];
// verify
gbcatch([verify(componentsTask) processCommentForObject:object context:context]);
});
});

it(@"should invoke detect cross references task if comment given", ^{
runWithProcessor(^(Processor *processor) {
// setup
[given([object comment]) willReturn:comment];
processor.detectCrossReferencesTask = componentsTask;
// execute
[processor processCommentForObject:object context:context];
// verify
gbcatch([verify(componentsTask) processCommentForObject:object context:context]);
});
});

it(@"should ignore all required tasks if comment is not given", ^{
runWithProcessor(^(Processor *processor) {
// setup
[given([object comment]) willReturn:nil];
processor.splitCommentToSectionsTask = componentsTask;
// execute
[processor processCommentForObject:object context:context];
// verify - we should fail because the method should not be invoked when comment is nil.
gbfail([verify(componentsTask) processCommentForObject:object context:context]);
});
});
});

TEST_END
5 changes: 5 additions & 0 deletions appledoc/Processing/MergeKnownObjectsTask.m
Expand Up @@ -6,8 +6,13 @@
// Copyright (c) 2012 Tomaz Kragelj. All rights reserved.
//

#import "Objects.h"
#import "MergeKnownObjectsTask.h"

@implementation MergeKnownObjectsTask

- (NSInteger)runTask {
return GBResultOk;
}

@end

0 comments on commit 0b5179c

Please sign in to comment.